From d37ef51ca3a21e64b6a2fef6fe069d969e14f4d0 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Mon, 26 Apr 2021 16:02:08 +0200 Subject: [PATCH] fix some bugs in new block entity provider --- .../de/bixilon/minosoft/data/world/ChunkSection.kt | 1 + .../world/block/entities/ArrayBlockEntityProvider.kt | 11 +++++++---- .../data/world/block/entities/BlockEntityProvider.kt | 9 +++++---- .../world/block/entities/MapBlockEntityProvider.kt | 10 +++++++--- 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/data/world/ChunkSection.kt b/src/main/java/de/bixilon/minosoft/data/world/ChunkSection.kt index fede4e277..93cc85bc6 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/ChunkSection.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/ChunkSection.kt @@ -38,6 +38,7 @@ class ChunkSection( fun setData(chunkSection: ChunkSection) { blocks = chunkSection.blocks.clone() + blockEntities = chunkSection.blockEntities.clone() } fun getBlockEntity(inChunkSectionPositions: Vec3i): BlockEntity? { diff --git a/src/main/java/de/bixilon/minosoft/data/world/block/entities/ArrayBlockEntityProvider.kt b/src/main/java/de/bixilon/minosoft/data/world/block/entities/ArrayBlockEntityProvider.kt index cb2ed9a7f..54226e567 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/block/entities/ArrayBlockEntityProvider.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/block/entities/ArrayBlockEntityProvider.kt @@ -18,19 +18,18 @@ import de.bixilon.minosoft.data.world.ChunkSection.Companion.index import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import glm_.vec3.Vec3i -class ArrayBlockEntityProvider() : BlockEntityProvider { +class ArrayBlockEntityProvider( + var blockEntities: Array = arrayOfNulls(ProtocolDefinition.BLOCKS_PER_SECTION), +) : BlockEntityProvider { override var size: Int = 0 private set - constructor(blockEntityProvider: MapBlockEntityProvider) : this() { for ((position, blockEntity) in blockEntityProvider.blockEntities) { blockEntities[position.index] = blockEntity } } - var blockEntities: Array = arrayOfNulls(ProtocolDefinition.BLOCKS_PER_SECTION) - override fun get(inChunkSectionPosition: Vec3i): BlockEntity? { return blockEntities[inChunkSectionPosition.index] } @@ -44,4 +43,8 @@ class ArrayBlockEntityProvider() : BlockEntityProvider { size++ } } + + override fun clone(): ArrayBlockEntityProvider { + return ArrayBlockEntityProvider(blockEntities.clone()) + } } diff --git a/src/main/java/de/bixilon/minosoft/data/world/block/entities/BlockEntityProvider.kt b/src/main/java/de/bixilon/minosoft/data/world/block/entities/BlockEntityProvider.kt index f25004084..dcde01b30 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/block/entities/BlockEntityProvider.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/block/entities/BlockEntityProvider.kt @@ -23,9 +23,10 @@ interface BlockEntityProvider { operator fun set(inChunkSectionPosition: Vec3i, blockEntity: BlockEntity?) - companion object { - const val BLOCK_ENTITY_MAP_LIMIT_UP = 100 - const val BLOCK_ENTITY_MAP_LIMIT_DOWN = 80 - } + fun clone(): BlockEntityProvider + companion object { + const val BLOCK_ENTITY_MAP_LIMIT_UP = 15 + const val BLOCK_ENTITY_MAP_LIMIT_DOWN = 5 + } } diff --git a/src/main/java/de/bixilon/minosoft/data/world/block/entities/MapBlockEntityProvider.kt b/src/main/java/de/bixilon/minosoft/data/world/block/entities/MapBlockEntityProvider.kt index cff0e5c56..4979c6aa7 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/block/entities/MapBlockEntityProvider.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/block/entities/MapBlockEntityProvider.kt @@ -17,12 +17,12 @@ import de.bixilon.minosoft.data.entities.block.BlockEntity import de.bixilon.minosoft.data.world.ChunkSection.Companion.indexPosition import glm_.vec3.Vec3i -class MapBlockEntityProvider() : BlockEntityProvider { +class MapBlockEntityProvider( + var blockEntities: MutableMap = mutableMapOf(), +) : BlockEntityProvider { override val size: Int get() = blockEntities.size - var blockEntities: MutableMap = mutableMapOf() - constructor(blockEntityProvider: ArrayBlockEntityProvider) : this() { for ((index, blockEntity) in blockEntityProvider.blockEntities.withIndex()) { if (blockEntity == null) { @@ -43,4 +43,8 @@ class MapBlockEntityProvider() : BlockEntityProvider { } blockEntities[inChunkSectionPosition] = blockEntity } + + override fun clone(): MapBlockEntityProvider { + return MapBlockEntityProvider(blockEntities.toMutableMap()) + } }