diff --git a/src/main/java/de/bixilon/minosoft/data/entities/block/BlockEntity.kt b/src/main/java/de/bixilon/minosoft/data/entities/block/BlockEntity.kt index 52ec77d47..8d031100e 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/block/BlockEntity.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/block/BlockEntity.kt @@ -31,11 +31,11 @@ abstract class BlockEntity( open fun tick(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, random: Random) = Unit - open fun getRenderer(context: RenderContext, blockState: BlockState, blockPosition: Vec3i, light: Int): BlockEntityRenderer? { - if (this.renderer?.blockState != blockState) { - this.renderer = createRenderer(context, blockState, blockPosition, light) + open fun getRenderer(context: RenderContext, state: BlockState, position: Vec3i, light: Int): BlockEntityRenderer? { + if (this.renderer?.state != state) { + this.renderer = createRenderer(context, state, position, light) } else { - this.renderer?.light = light + this.renderer?.update(position, state, light) } return this.renderer } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/block/MeshedBlockEntity.kt b/src/main/java/de/bixilon/minosoft/data/entities/block/MeshedBlockEntity.kt index 0a104df8d..13d261abd 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/block/MeshedBlockEntity.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/block/MeshedBlockEntity.kt @@ -22,12 +22,12 @@ import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection abstract class MeshedBlockEntity(connection: PlayConnection) : BlockEntity(connection) { - override fun getRenderer(context: RenderContext, blockState: BlockState, blockPosition: Vec3i, light: Int): MeshedEntityRenderer<*> { + override fun getRenderer(context: RenderContext, state: BlockState, position: Vec3i, light: Int): MeshedEntityRenderer<*> { var renderer = this.renderer - if (renderer is MeshedEntityRenderer && renderer.blockState == blockState) { + if (renderer is MeshedEntityRenderer && renderer.state == state) { return renderer } - renderer = createMeshedRenderer(context, blockState, blockPosition) + renderer = createMeshedRenderer(context, state, position) this.renderer = renderer return renderer } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/entities/BlockEntityRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/entities/BlockEntityRenderer.kt index a94ce3fc3..63e910466 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/entities/BlockEntityRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/entities/BlockEntityRenderer.kt @@ -15,12 +15,13 @@ package de.bixilon.minosoft.gui.rendering.chunk.entities import de.bixilon.minosoft.data.entities.block.BlockEntity import de.bixilon.minosoft.data.registries.blocks.state.BlockState +import de.bixilon.minosoft.data.world.positions.BlockPosition import de.bixilon.minosoft.gui.rendering.RenderContext interface BlockEntityRenderer { val enabled: Boolean get() = true - val blockState: BlockState + var state: BlockState var light: Int get() = 0 set(value) = Unit @@ -29,4 +30,9 @@ interface BlockEntityRenderer { fun unload() = Unit fun load() = Unit + + fun update(position: BlockPosition, state: BlockState, light: Int) { + this.light = light + this.state = state + } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/entities/renderer/sign/SignBlockEntityRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/entities/renderer/sign/SignBlockEntityRenderer.kt index 016530105..927b1c6dc 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/entities/renderer/sign/SignBlockEntityRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/entities/renderer/sign/SignBlockEntityRenderer.kt @@ -48,18 +48,19 @@ import java.util.* class SignBlockEntityRenderer( val sign: SignBlockEntity, val context: RenderContext, - override val blockState: BlockState, + override var state: BlockState, ) : MeshedEntityRenderer { override val enabled: Boolean get() = false private fun getRotation(): Float { - if (blockState !is PropertyBlockState) return 0.0f - val rotation = blockState.properties[BlockProperties.ROTATION]?.toFloat() ?: return 0.0f + val state = this.state + if (state !is PropertyBlockState) return 0.0f + val rotation = state.properties[BlockProperties.ROTATION]?.toFloat() ?: return 0.0f return rotation * 22.5f } override fun render(position: BlockPosition, offset: FloatArray, mesh: ChunkMesh, random: Random?, state: BlockState, neighbours: Array, light: ByteArray, tints: IntArray?): Boolean { - val block = this.blockState.block + val block = this.state.block if (block is StandingSignBlock) { renderStandingText(offset, mesh, light[SELF_LIGHT_INDEX].toInt()) } else if (block is WallSignBlock) { @@ -97,7 +98,7 @@ class SignBlockEntityRenderer( } private fun renderWallText(position: FloatArray, mesh: ChunkMesh, light: Int) { - val yRotation = -when (val rotation = this.blockState.getFacing()) { + val yRotation = -when (val rotation = this.state.getFacing()) { Directions.SOUTH -> 0.0f Directions.EAST -> 90.0f Directions.NORTH -> 180.0f diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/entities/renderer/storage/DoubleChestRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/entities/renderer/storage/DoubleChestRenderer.kt index af9141917..a440f06ba 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/entities/renderer/storage/DoubleChestRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/entities/renderer/storage/DoubleChestRenderer.kt @@ -20,6 +20,7 @@ import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.get import de.bixilon.minosoft.data.registries.blocks.state.BlockState import de.bixilon.minosoft.data.registries.identified.Namespaces.minecraft import de.bixilon.minosoft.data.registries.identified.ResourceLocation +import de.bixilon.minosoft.data.world.positions.BlockPosition import de.bixilon.minosoft.gui.rendering.RenderContext import de.bixilon.minosoft.gui.rendering.chunk.entities.EntityRendererRegister import de.bixilon.minosoft.gui.rendering.models.loader.ModelLoader @@ -41,7 +42,11 @@ class DoubleChestRenderer( ) { init { - skeletal?.update(blockPosition, blockState.getFacing()) + update(blockPosition, state, light) + } + + override fun update(position: BlockPosition, state: BlockState, light: Int) { + skeletal?.update(position, state.getFacing()) } companion object { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/entities/renderer/storage/SingleChestRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/entities/renderer/storage/SingleChestRenderer.kt index 57f88baa1..0cd8e7da7 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/entities/renderer/storage/SingleChestRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/entities/renderer/storage/SingleChestRenderer.kt @@ -20,6 +20,7 @@ import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.get import de.bixilon.minosoft.data.registries.blocks.state.BlockState import de.bixilon.minosoft.data.registries.identified.Namespaces.minecraft import de.bixilon.minosoft.data.registries.identified.ResourceLocation +import de.bixilon.minosoft.data.world.positions.BlockPosition import de.bixilon.minosoft.gui.rendering.RenderContext import de.bixilon.minosoft.gui.rendering.chunk.entities.EntityRendererRegister import de.bixilon.minosoft.gui.rendering.models.loader.ModelLoader @@ -39,8 +40,13 @@ class SingleChestRenderer( model.createInstance(context), light, ) { + init { - skeletal?.update(blockPosition, blockState.getFacing()) + update(blockPosition, state, light) + } + + override fun update(position: BlockPosition, state: BlockState, light: Int) { + skeletal?.update(position, state.getFacing()) } companion object { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/entities/renderer/storage/StorageBlockEntityRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/entities/renderer/storage/StorageBlockEntityRenderer.kt index 2f94bbd9e..f3c1b98d0 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/entities/renderer/storage/StorageBlockEntityRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/entities/renderer/storage/StorageBlockEntityRenderer.kt @@ -20,7 +20,7 @@ import de.bixilon.minosoft.gui.rendering.chunk.entities.BlockEntityRenderer import de.bixilon.minosoft.gui.rendering.skeletal.instance.SkeletalInstance abstract class StorageBlockEntityRenderer( - override val blockState: BlockState, + override var state: BlockState, protected val skeletal: SkeletalInstance?, override var light: Int, ) : BlockEntityRenderer {