fix some bugs in new block entity provider

This commit is contained in:
Bixilon 2021-04-26 16:02:08 +02:00
parent 0c7ba090f0
commit d37ef51ca3
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
4 changed files with 20 additions and 11 deletions

View File

@ -38,6 +38,7 @@ class ChunkSection(
fun setData(chunkSection: ChunkSection) {
blocks = chunkSection.blocks.clone()
blockEntities = chunkSection.blockEntities.clone()
}
fun getBlockEntity(inChunkSectionPositions: Vec3i): BlockEntity? {

View File

@ -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<BlockEntity?> = 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<BlockEntity?> = 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())
}
}

View File

@ -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
}
}

View File

@ -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<Vec3i, BlockEntity> = mutableMapOf(),
) : BlockEntityProvider {
override val size: Int
get() = blockEntities.size
var blockEntities: MutableMap<Vec3i, BlockEntity> = 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())
}
}