mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-12 17:07:55 -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.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<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
|
||||
}
|
||||
|
@ -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<EnderChestBlockEntity>, PickaxeRequirement, BlockWithItem<Item> {
|
||||
override val blockEntity: BlockEntityType<EnderChestBlockEntity> = 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<EnderChestBlock> {
|
||||
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.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<ShulkerBoxBlockEntity>, FullOpaqueBlock, BlockWithItem<Item> {
|
||||
override val blockEntity: BlockEntityType<ShulkerBoxBlockEntity> = 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<ShulkerBoxBlock> {
|
||||
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.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<T : ChestBlockEntity>(identifier: ResourceLocation, settings: BlockSettings) : Block(identifier, settings), BlockWithItem<Item>, AxeRequirement, DoubleChestBlock<T> {
|
||||
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) {
|
||||
override val blockEntity: BlockEntityType<ChestBlockEntity> = this::blockEntity.inject(this)
|
||||
|
||||
override fun createBlockEntity(connection: PlayConnection) = ChestBlockEntity(connection)
|
||||
|
||||
companion object : BlockFactory<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) {
|
||||
override val blockEntity: BlockEntityType<TrappedChestBlockEntity> = this::blockEntity.inject(this)
|
||||
|
||||
override fun createBlockEntity(connection: PlayConnection) = TrappedChestBlockEntity(connection)
|
||||
|
||||
companion object : BlockFactory<TrappedChest> {
|
||||
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.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<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 {
|
||||
FACTORY_FIELD.inject<RegistryItem>(this)
|
||||
}
|
||||
|
||||
|
||||
override fun createBlockEntity(connection: PlayConnection) = blockEntity.factory.build(connection)
|
||||
|
||||
private companion object {
|
||||
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) {
|
||||
|
||||
|
||||
companion object : PixLyzerBlockFactory<WallSignBlock> {
|
||||
|
||||
override fun build(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>): WallSignBlock {
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user