From d0fb324fe389670d78cdf380f1b19971de2c5d7a Mon Sep 17 00:00:00 2001 From: Moritz Zwerger Date: Fri, 10 Nov 2023 21:38:17 +0100 Subject: [PATCH] falling block entity --- .../entities/item/FallingBlockEntity.kt | 3 +- .../entities/factory/DefaultEntityModels.kt | 6 ++- .../item/FallingBlockEntityRenderer.kt | 37 +++++++++++++++++++ .../{ => item}/PrimedTNTEntityRenderer.kt | 3 +- 4 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/item/FallingBlockEntityRenderer.kt rename src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/{ => item}/PrimedTNTEntityRenderer.kt (92%) diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/item/FallingBlockEntity.kt b/src/main/java/de/bixilon/minosoft/data/entities/entities/item/FallingBlockEntity.kt index 28361e846..843638f02 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/item/FallingBlockEntity.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/item/FallingBlockEntity.kt @@ -14,6 +14,7 @@ package de.bixilon.minosoft.data.entities.entities.item import de.bixilon.kotlinglm.vec3.Vec3d import de.bixilon.kotlinglm.vec3.Vec3i +import de.bixilon.kutil.observer.DataObserver.Companion.observed import de.bixilon.minosoft.data.entities.EntityRotation import de.bixilon.minosoft.data.entities.data.EntityData import de.bixilon.minosoft.data.entities.data.EntityDataField @@ -30,7 +31,7 @@ import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection class FallingBlockEntity(connection: PlayConnection, entityType: EntityType, data: EntityData, position: Vec3d, rotation: EntityRotation) : Entity(connection, entityType, data, position, rotation) { @get:SynchronizedEntityData - var blockState: BlockState? = null + var blockState: BlockState? by observed(null) private set @get:SynchronizedEntityData diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/factory/DefaultEntityModels.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/factory/DefaultEntityModels.kt index 5d206c853..48cdee41c 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/factory/DefaultEntityModels.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/factory/DefaultEntityModels.kt @@ -15,7 +15,8 @@ package de.bixilon.minosoft.gui.rendering.entities.factory import de.bixilon.kutil.latch.AbstractLatch import de.bixilon.minosoft.data.registries.factory.DefaultFactory -import de.bixilon.minosoft.gui.rendering.entities.renderer.PrimedTNTEntityRenderer +import de.bixilon.minosoft.gui.rendering.entities.renderer.item.FallingBlockEntityRenderer +import de.bixilon.minosoft.gui.rendering.entities.renderer.item.PrimedTNTEntityRenderer import de.bixilon.minosoft.gui.rendering.entities.renderer.living.animal.PigRenderer import de.bixilon.minosoft.gui.rendering.entities.renderer.living.player.PlayerRenderer import de.bixilon.minosoft.gui.rendering.models.loader.ModelLoader @@ -25,7 +26,8 @@ import de.bixilon.minosoft.util.logging.LogMessageType object DefaultEntityModels : DefaultFactory>( PlayerRenderer, - PigRenderer, PrimedTNTEntityRenderer, + PigRenderer, + PrimedTNTEntityRenderer, FallingBlockEntityRenderer, ) { fun load(loader: ModelLoader, latch: AbstractLatch?) { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/item/FallingBlockEntityRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/item/FallingBlockEntityRenderer.kt new file mode 100644 index 000000000..04cfe36d5 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/item/FallingBlockEntityRenderer.kt @@ -0,0 +1,37 @@ +/* + * Minosoft + * Copyright (C) 2020-2023 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.gui.rendering.entities.renderer.item + +import de.bixilon.kutil.observer.DataObserver.Companion.observe +import de.bixilon.minosoft.data.entities.entities.item.FallingBlockEntity +import de.bixilon.minosoft.data.registries.identified.Identified +import de.bixilon.minosoft.gui.rendering.entities.EntitiesRenderer +import de.bixilon.minosoft.gui.rendering.entities.factory.RegisteredEntityModelFactory +import de.bixilon.minosoft.gui.rendering.entities.feature.block.BlockFeature +import de.bixilon.minosoft.gui.rendering.entities.renderer.EntityRenderer + +class FallingBlockEntityRenderer(renderer: EntitiesRenderer, entity: FallingBlockEntity) : EntityRenderer(renderer, entity) { + val block = BlockFeature(this, null).register() + + init { + entity::blockState.observe(this, true) { block.state = it } + } + + + companion object : RegisteredEntityModelFactory, Identified { + override val identifier get() = FallingBlockEntity.identifier + + override fun create(renderer: EntitiesRenderer, entity: FallingBlockEntity) = FallingBlockEntityRenderer(renderer, entity) + } +} diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/PrimedTNTEntityRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/item/PrimedTNTEntityRenderer.kt similarity index 92% rename from src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/PrimedTNTEntityRenderer.kt rename to src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/item/PrimedTNTEntityRenderer.kt index c07b5f273..dbb5f2a81 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/PrimedTNTEntityRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/item/PrimedTNTEntityRenderer.kt @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.gui.rendering.entities.renderer +package de.bixilon.minosoft.gui.rendering.entities.renderer.item import de.bixilon.minosoft.data.entities.entities.item.PrimedTNT import de.bixilon.minosoft.data.registries.blocks.MinecraftBlocks @@ -19,6 +19,7 @@ import de.bixilon.minosoft.data.registries.identified.Identified import de.bixilon.minosoft.gui.rendering.entities.EntitiesRenderer import de.bixilon.minosoft.gui.rendering.entities.factory.RegisteredEntityModelFactory import de.bixilon.minosoft.gui.rendering.entities.feature.block.flashing.FlashingBlockFeature +import de.bixilon.minosoft.gui.rendering.entities.renderer.EntityRenderer class PrimedTNTEntityRenderer(renderer: EntitiesRenderer, entity: PrimedTNT) : EntityRenderer(renderer, entity) { val block = FlashingBlockFeature(this, renderer.connection.registries.block[MinecraftBlocks.TNT]?.states?.default).register()