From 0dfdeaa6e33e23a80a077b6060e962ef5563981a Mon Sep 17 00:00:00 2001 From: Lukas Date: Tue, 25 May 2021 21:25:36 +0200 Subject: [PATCH] game logic: add support for redstone repeaters and comparator blocks --- .../blocks/types/AbstractRedstoneGateBlock.kt | 7 +++++ .../data/mappings/blocks/types/Block.kt | 2 ++ .../mappings/blocks/types/ComparatorBlock.kt | 26 +++++++++++++++++++ .../blocks/types/HorizontalFacingBlock.kt | 7 +++++ .../mappings/blocks/types/RepeaterBlock.kt | 26 +++++++++++++++++++ 5 files changed, 68 insertions(+) create mode 100644 src/main/java/de/bixilon/minosoft/data/mappings/blocks/types/AbstractRedstoneGateBlock.kt create mode 100644 src/main/java/de/bixilon/minosoft/data/mappings/blocks/types/ComparatorBlock.kt create mode 100644 src/main/java/de/bixilon/minosoft/data/mappings/blocks/types/HorizontalFacingBlock.kt create mode 100644 src/main/java/de/bixilon/minosoft/data/mappings/blocks/types/RepeaterBlock.kt diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/blocks/types/AbstractRedstoneGateBlock.kt b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/types/AbstractRedstoneGateBlock.kt new file mode 100644 index 000000000..664d7850c --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/types/AbstractRedstoneGateBlock.kt @@ -0,0 +1,7 @@ +package de.bixilon.minosoft.data.mappings.blocks.types + +import com.google.gson.JsonObject +import de.bixilon.minosoft.data.mappings.ResourceLocation +import de.bixilon.minosoft.data.mappings.versions.Registries + +abstract class AbstractRedstoneGateBlock(resourceLocation: ResourceLocation, mappings: Registries, data: JsonObject) : HorizontalFacingBlock(resourceLocation, mappings, data) diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/blocks/types/Block.kt b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/types/Block.kt index bd81d2cf1..f61c62d87 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/blocks/types/Block.kt +++ b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/types/Block.kt @@ -105,6 +105,8 @@ open class Block( "DoorBlock" -> DoorBlock(resourceLocation, mappings, data) "LeverBlock" -> LeverBlock(resourceLocation, mappings, data) "NoteBlock" -> NoteBlock(resourceLocation, mappings, data) + "RepeaterBlock" -> RepeaterBlock(resourceLocation, mappings, data) + "ComparatorBlock" -> ComparatorBlock(resourceLocation, mappings, data) else -> Block(resourceLocation, mappings, data) } diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/blocks/types/ComparatorBlock.kt b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/types/ComparatorBlock.kt new file mode 100644 index 000000000..c090b58e5 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/types/ComparatorBlock.kt @@ -0,0 +1,26 @@ +package de.bixilon.minosoft.data.mappings.blocks.types + +import com.google.gson.JsonObject +import de.bixilon.minosoft.data.inventory.ItemStack +import de.bixilon.minosoft.data.mappings.ResourceLocation +import de.bixilon.minosoft.data.mappings.blocks.BlockState +import de.bixilon.minosoft.data.mappings.blocks.BlockUsages +import de.bixilon.minosoft.data.mappings.blocks.properties.BlockProperties +import de.bixilon.minosoft.data.mappings.versions.Registries +import de.bixilon.minosoft.data.player.Hands +import de.bixilon.minosoft.gui.rendering.input.camera.RaycastHit +import de.bixilon.minosoft.protocol.network.connection.PlayConnection +import glm_.vec3.Vec3i + +open class ComparatorBlock(resourceLocation: ResourceLocation, mappings: Registries, data: JsonObject) : AbstractRedstoneGateBlock(resourceLocation, mappings, data) { + + override fun getPlacementState(connection: PlayConnection, raycastHit: RaycastHit): BlockState? { + TODO() + } + + override fun use(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, raycastHit: RaycastHit, hands: Hands, itemStack: ItemStack?): BlockUsages { + connection.world[blockPosition] = blockState.cycle(BlockProperties.STRUCTURE_BLOCK_MODE) + + return BlockUsages.SUCCESS + } +} diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/blocks/types/HorizontalFacingBlock.kt b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/types/HorizontalFacingBlock.kt new file mode 100644 index 000000000..a94c44925 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/types/HorizontalFacingBlock.kt @@ -0,0 +1,7 @@ +package de.bixilon.minosoft.data.mappings.blocks.types + +import com.google.gson.JsonObject +import de.bixilon.minosoft.data.mappings.ResourceLocation +import de.bixilon.minosoft.data.mappings.versions.Registries + +abstract class HorizontalFacingBlock(resourceLocation: ResourceLocation, mappings: Registries, data: JsonObject) :Block(resourceLocation, mappings, data) diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/blocks/types/RepeaterBlock.kt b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/types/RepeaterBlock.kt new file mode 100644 index 000000000..f17c76f93 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/types/RepeaterBlock.kt @@ -0,0 +1,26 @@ +package de.bixilon.minosoft.data.mappings.blocks.types + +import com.google.gson.JsonObject +import de.bixilon.minosoft.data.inventory.ItemStack +import de.bixilon.minosoft.data.mappings.ResourceLocation +import de.bixilon.minosoft.data.mappings.blocks.BlockState +import de.bixilon.minosoft.data.mappings.blocks.BlockUsages +import de.bixilon.minosoft.data.mappings.blocks.properties.BlockProperties +import de.bixilon.minosoft.data.mappings.versions.Registries +import de.bixilon.minosoft.data.player.Hands +import de.bixilon.minosoft.gui.rendering.input.camera.RaycastHit +import de.bixilon.minosoft.protocol.network.connection.PlayConnection +import glm_.vec3.Vec3i + +open class RepeaterBlock(resourceLocation: ResourceLocation, mappings: Registries, data: JsonObject) : AbstractRedstoneGateBlock(resourceLocation, mappings, data) { + + override fun getPlacementState(connection: PlayConnection, raycastHit: RaycastHit): BlockState? { + TODO() + } + + override fun use(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, raycastHit: RaycastHit, hands: Hands, itemStack: ItemStack?): BlockUsages { + connection.world[blockPosition] = blockState.cycle(BlockProperties.REPEATER_DELAY) + + return BlockUsages.SUCCESS + } +}