diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/BlockWithEntity.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/BlockWithEntity.kt index bcb599fb0..28dd5c90f 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/BlockWithEntity.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/BlockWithEntity.kt @@ -17,13 +17,13 @@ import de.bixilon.minosoft.camera.target.targets.BlockTarget import de.bixilon.minosoft.data.container.stack.ItemStack import de.bixilon.minosoft.data.entities.block.BlockEntity import de.bixilon.minosoft.data.entities.entities.player.Hands -import de.bixilon.minosoft.data.registries.blocks.entites.BlockEntityType import de.bixilon.minosoft.data.registries.blocks.types.properties.InteractBlockHandler import de.bixilon.minosoft.input.interaction.InteractionResults import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection interface BlockWithEntity : InteractBlockHandler { - val blockEntity: BlockEntityType? + + fun createBlockEntity(connection: PlayConnection): BlockEntity? override fun interact(connection: PlayConnection, target: BlockTarget, hand: Hands, stack: ItemStack?) = InteractionResults.SUCCESS } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/storage/EnderChestBlock.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/storage/EnderChestBlock.kt index c8e4951ff..1ce99bac7 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/storage/EnderChestBlock.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/storage/EnderChestBlock.kt @@ -14,7 +14,6 @@ package de.bixilon.minosoft.data.registries.blocks.types.entity.storage import de.bixilon.minosoft.data.entities.block.container.storage.EnderChestBlockEntity -import de.bixilon.minosoft.data.registries.blocks.entites.BlockEntityType import de.bixilon.minosoft.data.registries.blocks.factory.BlockFactory import de.bixilon.minosoft.data.registries.blocks.settings.BlockSettings import de.bixilon.minosoft.data.registries.blocks.types.Block @@ -24,12 +23,14 @@ import de.bixilon.minosoft.data.registries.identified.ResourceLocation import de.bixilon.minosoft.data.registries.item.items.Item import de.bixilon.minosoft.data.registries.item.items.tool.pickaxe.PickaxeRequirement import de.bixilon.minosoft.data.registries.registries.Registries +import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection open class EnderChestBlock(identifier: ResourceLocation = this.identifier, settings: BlockSettings) : Block(identifier, settings), ChestBlock, PickaxeRequirement, BlockWithItem { - override val blockEntity: BlockEntityType = this::blockEntity.inject(this) override val item: Item = this::item.inject(identifier) override val hardness: Float get() = 22.5f + override fun createBlockEntity(connection: PlayConnection) = EnderChestBlockEntity(connection) + companion object : BlockFactory { override val identifier = minecraft("ender_chest") diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/storage/ShulkerBoxBlock.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/storage/ShulkerBoxBlock.kt index 3282d4133..d67c63ede 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/storage/ShulkerBoxBlock.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/storage/ShulkerBoxBlock.kt @@ -15,7 +15,6 @@ package de.bixilon.minosoft.data.registries.blocks.types.entity.storage import de.bixilon.minosoft.data.colors.DyeColors import de.bixilon.minosoft.data.entities.block.container.storage.ShulkerBoxBlockEntity -import de.bixilon.minosoft.data.registries.blocks.entites.BlockEntityType import de.bixilon.minosoft.data.registries.blocks.factory.BlockFactory import de.bixilon.minosoft.data.registries.blocks.settings.BlockSettings import de.bixilon.minosoft.data.registries.blocks.types.Block @@ -26,12 +25,13 @@ import de.bixilon.minosoft.data.registries.identified.Namespaces.minecraft import de.bixilon.minosoft.data.registries.identified.ResourceLocation import de.bixilon.minosoft.data.registries.item.items.Item import de.bixilon.minosoft.data.registries.registries.Registries +import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection open class ShulkerBoxBlock(identifier: ResourceLocation, settings: BlockSettings) : Block(identifier, settings), StorageBlock, FullOpaqueBlock, BlockWithItem { - override val blockEntity: BlockEntityType = this::blockEntity.inject(this) override val item: Item = this::item.inject(identifier) override val hardness: Float get() = 2.0f + override fun createBlockEntity(connection: PlayConnection) = ShulkerBoxBlockEntity(connection) companion object : BlockFactory { override val identifier = minecraft("shulker_box") diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/storage/WoodenChestBlock.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/storage/WoodenChestBlock.kt index 2857ace1b..cb0160914 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/storage/WoodenChestBlock.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/storage/WoodenChestBlock.kt @@ -15,7 +15,6 @@ package de.bixilon.minosoft.data.registries.blocks.types.entity.storage import de.bixilon.minosoft.data.entities.block.container.storage.ChestBlockEntity import de.bixilon.minosoft.data.entities.block.container.storage.TrappedChestBlockEntity -import de.bixilon.minosoft.data.registries.blocks.entites.BlockEntityType import de.bixilon.minosoft.data.registries.blocks.factory.BlockFactory import de.bixilon.minosoft.data.registries.blocks.settings.BlockSettings import de.bixilon.minosoft.data.registries.blocks.types.Block @@ -25,6 +24,7 @@ import de.bixilon.minosoft.data.registries.identified.ResourceLocation import de.bixilon.minosoft.data.registries.item.items.Item import de.bixilon.minosoft.data.registries.item.items.tool.axe.AxeRequirement import de.bixilon.minosoft.data.registries.registries.Registries +import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection abstract class WoodenChestBlock(identifier: ResourceLocation, settings: BlockSettings) : Block(identifier, settings), BlockWithItem, AxeRequirement, DoubleChestBlock { override val hardness: Float get() = 2.5f @@ -32,7 +32,8 @@ abstract class WoodenChestBlock(identifier: ResourceLocati open class Chest(identifier: ResourceLocation = this.identifier, settings: BlockSettings) : WoodenChestBlock(identifier, settings) { - override val blockEntity: BlockEntityType = this::blockEntity.inject(this) + + override fun createBlockEntity(connection: PlayConnection) = ChestBlockEntity(connection) companion object : BlockFactory { override val identifier = minecraft("chest") @@ -42,7 +43,8 @@ abstract class WoodenChestBlock(identifier: ResourceLocati } open class TrappedChest(identifier: ResourceLocation = this.identifier, settings: BlockSettings) : WoodenChestBlock(identifier, settings) { - override val blockEntity: BlockEntityType = this::blockEntity.inject(this) + + override fun createBlockEntity(connection: PlayConnection) = TrappedChestBlockEntity(connection) companion object : BlockFactory { override val identifier = minecraft("trapped_chest") diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/entity/PixLyzerBlockWithEntity.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/entity/PixLyzerBlockWithEntity.kt index 6120cab37..615b938f9 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/entity/PixLyzerBlockWithEntity.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/entity/PixLyzerBlockWithEntity.kt @@ -21,15 +21,19 @@ import de.bixilon.minosoft.data.registries.blocks.types.pixlyzer.PixLyzerBlock import de.bixilon.minosoft.data.registries.identified.ResourceLocation import de.bixilon.minosoft.data.registries.registries.Registries import de.bixilon.minosoft.data.registries.registries.registry.RegistryItem +import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import kotlin.reflect.jvm.javaField abstract class PixLyzerBlockWithEntity(resourceLocation: ResourceLocation, registries: Registries, data: Map) : PixLyzerBlock(resourceLocation, registries, data), BlockWithEntity { - override val blockEntity: BlockEntityType = unsafeNull() + private val blockEntity: BlockEntityType = unsafeNull() init { FACTORY_FIELD.inject(this) } + + override fun createBlockEntity(connection: PlayConnection) = blockEntity.factory.build(connection) + private companion object { val FACTORY_FIELD = PixLyzerBlockWithEntity<*>::blockEntity.javaField!! } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/entity/sign/WallSignBlock.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/entity/sign/WallSignBlock.kt index 315d54b30..1d2735df8 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/entity/sign/WallSignBlock.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/entity/sign/WallSignBlock.kt @@ -19,6 +19,7 @@ import de.bixilon.minosoft.data.registries.registries.Registries open class WallSignBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map) : SignBlock(resourceLocation, registries, data) { + companion object : PixLyzerBlockFactory { override fun build(resourceLocation: ResourceLocation, registries: Registries, data: Map): WallSignBlock { diff --git a/src/main/java/de/bixilon/minosoft/data/world/chunk/chunk/Chunk.kt b/src/main/java/de/bixilon/minosoft/data/world/chunk/chunk/Chunk.kt index b38ce9552..9c85bc08b 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/chunk/chunk/Chunk.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/chunk/chunk/Chunk.kt @@ -99,7 +99,7 @@ class Chunk( if (block.block !is BlockWithEntity<*>) { return null } - blockEntity = block.block.blockEntity?.build(connection) ?: return null + blockEntity = block.block.createBlockEntity(connection) ?: return null (this.getOrPut(sectionHeight) ?: return null).blockEntities[x, inSectionHeight, z] = blockEntity return blockEntity