mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-15 10:25:06 -04:00
fix some bugs in new block entity provider
This commit is contained in:
parent
0c7ba090f0
commit
d37ef51ca3
@ -38,6 +38,7 @@ class ChunkSection(
|
|||||||
|
|
||||||
fun setData(chunkSection: ChunkSection) {
|
fun setData(chunkSection: ChunkSection) {
|
||||||
blocks = chunkSection.blocks.clone()
|
blocks = chunkSection.blocks.clone()
|
||||||
|
blockEntities = chunkSection.blockEntities.clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getBlockEntity(inChunkSectionPositions: Vec3i): BlockEntity? {
|
fun getBlockEntity(inChunkSectionPositions: Vec3i): BlockEntity? {
|
||||||
|
@ -18,19 +18,18 @@ import de.bixilon.minosoft.data.world.ChunkSection.Companion.index
|
|||||||
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
||||||
import glm_.vec3.Vec3i
|
import glm_.vec3.Vec3i
|
||||||
|
|
||||||
class ArrayBlockEntityProvider() : BlockEntityProvider {
|
class ArrayBlockEntityProvider(
|
||||||
|
var blockEntities: Array<BlockEntity?> = arrayOfNulls(ProtocolDefinition.BLOCKS_PER_SECTION),
|
||||||
|
) : BlockEntityProvider {
|
||||||
override var size: Int = 0
|
override var size: Int = 0
|
||||||
private set
|
private set
|
||||||
|
|
||||||
|
|
||||||
constructor(blockEntityProvider: MapBlockEntityProvider) : this() {
|
constructor(blockEntityProvider: MapBlockEntityProvider) : this() {
|
||||||
for ((position, blockEntity) in blockEntityProvider.blockEntities) {
|
for ((position, blockEntity) in blockEntityProvider.blockEntities) {
|
||||||
blockEntities[position.index] = blockEntity
|
blockEntities[position.index] = blockEntity
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var blockEntities: Array<BlockEntity?> = arrayOfNulls(ProtocolDefinition.BLOCKS_PER_SECTION)
|
|
||||||
|
|
||||||
override fun get(inChunkSectionPosition: Vec3i): BlockEntity? {
|
override fun get(inChunkSectionPosition: Vec3i): BlockEntity? {
|
||||||
return blockEntities[inChunkSectionPosition.index]
|
return blockEntities[inChunkSectionPosition.index]
|
||||||
}
|
}
|
||||||
@ -44,4 +43,8 @@ class ArrayBlockEntityProvider() : BlockEntityProvider {
|
|||||||
size++
|
size++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun clone(): ArrayBlockEntityProvider {
|
||||||
|
return ArrayBlockEntityProvider(blockEntities.clone())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,9 +23,10 @@ interface BlockEntityProvider {
|
|||||||
|
|
||||||
operator fun set(inChunkSectionPosition: Vec3i, blockEntity: BlockEntity?)
|
operator fun set(inChunkSectionPosition: Vec3i, blockEntity: BlockEntity?)
|
||||||
|
|
||||||
companion object {
|
fun clone(): BlockEntityProvider
|
||||||
const val BLOCK_ENTITY_MAP_LIMIT_UP = 100
|
|
||||||
const val BLOCK_ENTITY_MAP_LIMIT_DOWN = 80
|
|
||||||
}
|
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val BLOCK_ENTITY_MAP_LIMIT_UP = 15
|
||||||
|
const val BLOCK_ENTITY_MAP_LIMIT_DOWN = 5
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,12 +17,12 @@ import de.bixilon.minosoft.data.entities.block.BlockEntity
|
|||||||
import de.bixilon.minosoft.data.world.ChunkSection.Companion.indexPosition
|
import de.bixilon.minosoft.data.world.ChunkSection.Companion.indexPosition
|
||||||
import glm_.vec3.Vec3i
|
import glm_.vec3.Vec3i
|
||||||
|
|
||||||
class MapBlockEntityProvider() : BlockEntityProvider {
|
class MapBlockEntityProvider(
|
||||||
|
var blockEntities: MutableMap<Vec3i, BlockEntity> = mutableMapOf(),
|
||||||
|
) : BlockEntityProvider {
|
||||||
override val size: Int
|
override val size: Int
|
||||||
get() = blockEntities.size
|
get() = blockEntities.size
|
||||||
|
|
||||||
var blockEntities: MutableMap<Vec3i, BlockEntity> = mutableMapOf()
|
|
||||||
|
|
||||||
constructor(blockEntityProvider: ArrayBlockEntityProvider) : this() {
|
constructor(blockEntityProvider: ArrayBlockEntityProvider) : this() {
|
||||||
for ((index, blockEntity) in blockEntityProvider.blockEntities.withIndex()) {
|
for ((index, blockEntity) in blockEntityProvider.blockEntities.withIndex()) {
|
||||||
if (blockEntity == null) {
|
if (blockEntity == null) {
|
||||||
@ -43,4 +43,8 @@ class MapBlockEntityProvider() : BlockEntityProvider {
|
|||||||
}
|
}
|
||||||
blockEntities[inChunkSectionPosition] = blockEntity
|
blockEntities[inChunkSectionPosition] = blockEntity
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun clone(): MapBlockEntityProvider {
|
||||||
|
return MapBlockEntityProvider(blockEntities.toMutableMap())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user