game logic: add support for redstone repeaters and comparator blocks

This commit is contained in:
Lukas 2021-05-25 21:25:36 +02:00
parent ed3975f4c3
commit 0dfdeaa6e3
5 changed files with 68 additions and 0 deletions

View File

@ -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)

View File

@ -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)
}

View File

@ -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
}
}

View File

@ -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)

View File

@ -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
}
}