mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-13 09:26:11 -04:00
integrate some block entity factories
This commit is contained in:
parent
18ef672248
commit
a7d8a09e1b
@ -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.container.stack.ItemStack
|
||||||
import de.bixilon.minosoft.data.entities.block.BlockEntity
|
import de.bixilon.minosoft.data.entities.block.BlockEntity
|
||||||
import de.bixilon.minosoft.data.entities.entities.player.Hands
|
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.data.registries.blocks.types.properties.InteractBlockHandler
|
||||||
import de.bixilon.minosoft.input.interaction.InteractionResults
|
import de.bixilon.minosoft.input.interaction.InteractionResults
|
||||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||||
|
|
||||||
interface BlockWithEntity<T : BlockEntity> : InteractBlockHandler {
|
interface BlockWithEntity<T : BlockEntity> : InteractBlockHandler {
|
||||||
val blockEntity: BlockEntityType<T>?
|
|
||||||
|
fun createBlockEntity(connection: PlayConnection): BlockEntity?
|
||||||
|
|
||||||
override fun interact(connection: PlayConnection, target: BlockTarget, hand: Hands, stack: ItemStack?) = InteractionResults.SUCCESS
|
override fun interact(connection: PlayConnection, target: BlockTarget, hand: Hands, stack: ItemStack?) = InteractionResults.SUCCESS
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
package de.bixilon.minosoft.data.registries.blocks.types.entity.storage
|
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.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.factory.BlockFactory
|
||||||
import de.bixilon.minosoft.data.registries.blocks.settings.BlockSettings
|
import de.bixilon.minosoft.data.registries.blocks.settings.BlockSettings
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.Block
|
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.Item
|
||||||
import de.bixilon.minosoft.data.registries.item.items.tool.pickaxe.PickaxeRequirement
|
import de.bixilon.minosoft.data.registries.item.items.tool.pickaxe.PickaxeRequirement
|
||||||
import de.bixilon.minosoft.data.registries.registries.Registries
|
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<EnderChestBlockEntity>, PickaxeRequirement, BlockWithItem<Item> {
|
open class EnderChestBlock(identifier: ResourceLocation = this.identifier, settings: BlockSettings) : Block(identifier, settings), ChestBlock<EnderChestBlockEntity>, PickaxeRequirement, BlockWithItem<Item> {
|
||||||
override val blockEntity: BlockEntityType<EnderChestBlockEntity> = this::blockEntity.inject(this)
|
|
||||||
override val item: Item = this::item.inject(identifier)
|
override val item: Item = this::item.inject(identifier)
|
||||||
override val hardness: Float get() = 22.5f
|
override val hardness: Float get() = 22.5f
|
||||||
|
|
||||||
|
override fun createBlockEntity(connection: PlayConnection) = EnderChestBlockEntity(connection)
|
||||||
|
|
||||||
companion object : BlockFactory<EnderChestBlock> {
|
companion object : BlockFactory<EnderChestBlock> {
|
||||||
override val identifier = minecraft("ender_chest")
|
override val identifier = minecraft("ender_chest")
|
||||||
|
|
||||||
|
@ -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.colors.DyeColors
|
||||||
import de.bixilon.minosoft.data.entities.block.container.storage.ShulkerBoxBlockEntity
|
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.factory.BlockFactory
|
||||||
import de.bixilon.minosoft.data.registries.blocks.settings.BlockSettings
|
import de.bixilon.minosoft.data.registries.blocks.settings.BlockSettings
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.Block
|
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.identified.ResourceLocation
|
||||||
import de.bixilon.minosoft.data.registries.item.items.Item
|
import de.bixilon.minosoft.data.registries.item.items.Item
|
||||||
import de.bixilon.minosoft.data.registries.registries.Registries
|
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<ShulkerBoxBlockEntity>, FullOpaqueBlock, BlockWithItem<Item> {
|
open class ShulkerBoxBlock(identifier: ResourceLocation, settings: BlockSettings) : Block(identifier, settings), StorageBlock<ShulkerBoxBlockEntity>, FullOpaqueBlock, BlockWithItem<Item> {
|
||||||
override val blockEntity: BlockEntityType<ShulkerBoxBlockEntity> = this::blockEntity.inject(this)
|
|
||||||
override val item: Item = this::item.inject(identifier)
|
override val item: Item = this::item.inject(identifier)
|
||||||
override val hardness: Float get() = 2.0f
|
override val hardness: Float get() = 2.0f
|
||||||
|
|
||||||
|
override fun createBlockEntity(connection: PlayConnection) = ShulkerBoxBlockEntity(connection)
|
||||||
|
|
||||||
companion object : BlockFactory<ShulkerBoxBlock> {
|
companion object : BlockFactory<ShulkerBoxBlock> {
|
||||||
override val identifier = minecraft("shulker_box")
|
override val identifier = minecraft("shulker_box")
|
||||||
|
@ -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.ChestBlockEntity
|
||||||
import de.bixilon.minosoft.data.entities.block.container.storage.TrappedChestBlockEntity
|
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.factory.BlockFactory
|
||||||
import de.bixilon.minosoft.data.registries.blocks.settings.BlockSettings
|
import de.bixilon.minosoft.data.registries.blocks.settings.BlockSettings
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.Block
|
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.Item
|
||||||
import de.bixilon.minosoft.data.registries.item.items.tool.axe.AxeRequirement
|
import de.bixilon.minosoft.data.registries.item.items.tool.axe.AxeRequirement
|
||||||
import de.bixilon.minosoft.data.registries.registries.Registries
|
import de.bixilon.minosoft.data.registries.registries.Registries
|
||||||
|
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||||
|
|
||||||
abstract class WoodenChestBlock<T : ChestBlockEntity>(identifier: ResourceLocation, settings: BlockSettings) : Block(identifier, settings), BlockWithItem<Item>, AxeRequirement, DoubleChestBlock<T> {
|
abstract class WoodenChestBlock<T : ChestBlockEntity>(identifier: ResourceLocation, settings: BlockSettings) : Block(identifier, settings), BlockWithItem<Item>, AxeRequirement, DoubleChestBlock<T> {
|
||||||
override val hardness: Float get() = 2.5f
|
override val hardness: Float get() = 2.5f
|
||||||
@ -32,7 +32,8 @@ abstract class WoodenChestBlock<T : ChestBlockEntity>(identifier: ResourceLocati
|
|||||||
|
|
||||||
|
|
||||||
open class Chest(identifier: ResourceLocation = this.identifier, settings: BlockSettings) : WoodenChestBlock<ChestBlockEntity>(identifier, settings) {
|
open class Chest(identifier: ResourceLocation = this.identifier, settings: BlockSettings) : WoodenChestBlock<ChestBlockEntity>(identifier, settings) {
|
||||||
override val blockEntity: BlockEntityType<ChestBlockEntity> = this::blockEntity.inject(this)
|
|
||||||
|
override fun createBlockEntity(connection: PlayConnection) = ChestBlockEntity(connection)
|
||||||
|
|
||||||
companion object : BlockFactory<Chest> {
|
companion object : BlockFactory<Chest> {
|
||||||
override val identifier = minecraft("chest")
|
override val identifier = minecraft("chest")
|
||||||
@ -42,7 +43,8 @@ abstract class WoodenChestBlock<T : ChestBlockEntity>(identifier: ResourceLocati
|
|||||||
}
|
}
|
||||||
|
|
||||||
open class TrappedChest(identifier: ResourceLocation = this.identifier, settings: BlockSettings) : WoodenChestBlock<TrappedChestBlockEntity>(identifier, settings) {
|
open class TrappedChest(identifier: ResourceLocation = this.identifier, settings: BlockSettings) : WoodenChestBlock<TrappedChestBlockEntity>(identifier, settings) {
|
||||||
override val blockEntity: BlockEntityType<TrappedChestBlockEntity> = this::blockEntity.inject(this)
|
|
||||||
|
override fun createBlockEntity(connection: PlayConnection) = TrappedChestBlockEntity(connection)
|
||||||
|
|
||||||
companion object : BlockFactory<TrappedChest> {
|
companion object : BlockFactory<TrappedChest> {
|
||||||
override val identifier = minecraft("trapped_chest")
|
override val identifier = minecraft("trapped_chest")
|
||||||
|
@ -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.identified.ResourceLocation
|
||||||
import de.bixilon.minosoft.data.registries.registries.Registries
|
import de.bixilon.minosoft.data.registries.registries.Registries
|
||||||
import de.bixilon.minosoft.data.registries.registries.registry.RegistryItem
|
import de.bixilon.minosoft.data.registries.registries.registry.RegistryItem
|
||||||
|
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||||
import kotlin.reflect.jvm.javaField
|
import kotlin.reflect.jvm.javaField
|
||||||
|
|
||||||
abstract class PixLyzerBlockWithEntity<T : BlockEntity>(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : PixLyzerBlock(resourceLocation, registries, data), BlockWithEntity<BlockEntity> {
|
abstract class PixLyzerBlockWithEntity<T : BlockEntity>(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : PixLyzerBlock(resourceLocation, registries, data), BlockWithEntity<BlockEntity> {
|
||||||
override val blockEntity: BlockEntityType<BlockEntity> = unsafeNull()
|
private val blockEntity: BlockEntityType<BlockEntity> = unsafeNull()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
FACTORY_FIELD.inject<RegistryItem>(this)
|
FACTORY_FIELD.inject<RegistryItem>(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
override fun createBlockEntity(connection: PlayConnection) = blockEntity.factory.build(connection)
|
||||||
|
|
||||||
private companion object {
|
private companion object {
|
||||||
val FACTORY_FIELD = PixLyzerBlockWithEntity<*>::blockEntity.javaField!!
|
val FACTORY_FIELD = PixLyzerBlockWithEntity<*>::blockEntity.javaField!!
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@ import de.bixilon.minosoft.data.registries.registries.Registries
|
|||||||
|
|
||||||
open class WallSignBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : SignBlock(resourceLocation, registries, data) {
|
open class WallSignBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : SignBlock(resourceLocation, registries, data) {
|
||||||
|
|
||||||
|
|
||||||
companion object : PixLyzerBlockFactory<WallSignBlock> {
|
companion object : PixLyzerBlockFactory<WallSignBlock> {
|
||||||
|
|
||||||
override fun build(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>): WallSignBlock {
|
override fun build(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>): WallSignBlock {
|
||||||
|
@ -99,7 +99,7 @@ class Chunk(
|
|||||||
if (block.block !is BlockWithEntity<*>) {
|
if (block.block !is BlockWithEntity<*>) {
|
||||||
return null
|
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
|
(this.getOrPut(sectionHeight) ?: return null).blockEntities[x, inSectionHeight, z] = blockEntity
|
||||||
|
|
||||||
return blockEntity
|
return blockEntity
|
||||||
|
Loading…
x
Reference in New Issue
Block a user