chunk neighbour block tracing test

This commit is contained in:
Moritz Zwerger 2025-03-07 15:43:15 +01:00
parent d45c80e062
commit 301e5d9df1
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
3 changed files with 90 additions and 0 deletions

View File

@ -17,6 +17,9 @@ import de.bixilon.kutil.concurrent.worker.task.TaskWorker
import de.bixilon.kutil.environment.Environment
import de.bixilon.kutil.reflection.ReflectionUtil.forceSet
import de.bixilon.minosoft.assets.IntegratedAssets
import de.bixilon.minosoft.data.registries.blocks.types.building.stone.Andesite
import de.bixilon.minosoft.data.registries.blocks.types.building.stone.Cobblestone
import de.bixilon.minosoft.data.registries.blocks.types.building.stone.StoneBlock
import de.bixilon.minosoft.data.registries.fallback.tags.FallbackTags
import de.bixilon.minosoft.gui.rendering.system.base.RenderSystemFactory
import de.bixilon.minosoft.gui.rendering.system.dummy.DummyRenderSystem
@ -81,5 +84,9 @@ internal object MinosoftSIT {
IT.VERSION = version
IT.REGISTRIES = registries
IT.FALLBACK_TAGS = FallbackTags.map(registries)
IT::BLOCK_1.forceSet(registries.block[StoneBlock.Block]!!.states.default)
IT::BLOCK_2.forceSet(registries.block[Cobblestone.Block]!!.states.default)
IT::BLOCK_3.forceSet(registries.block[Andesite.Block]!!.states.default)
}
}

View File

@ -13,10 +13,15 @@
package de.bixilon.minosoft.data.world.chunk.neighbours
import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.world.World
import de.bixilon.minosoft.data.world.positions.BlockPosition
import de.bixilon.minosoft.data.world.positions.ChunkPosition
import de.bixilon.minosoft.data.world.positions.InChunkPosition
import de.bixilon.minosoft.protocol.network.session.play.SessionTestUtil
import de.bixilon.minosoft.test.IT
import org.testng.Assert.assertEquals
import org.testng.Assert.assertNull
import org.testng.annotations.Test
/**
@ -43,4 +48,76 @@ class ChunkNeighboursTest {
assertEquals(chunk.neighbours.traceChunk(ChunkPosition(1, 0))?.position, ChunkPosition(1, 0))
assertEquals(chunk.neighbours.traceChunk(ChunkPosition(1, 1))?.position, ChunkPosition(1, 1))
}
fun `trace 2 in x- direction`() {
val world = create()
val chunk = world.chunks[0, 0]!!
assertEquals(chunk.neighbours.traceChunk(ChunkPosition(-2, 0))?.position, ChunkPosition(-2, 0))
}
fun `trace 2 in x+ direction`() {
val world = create()
val chunk = world.chunks[0, 0]!!
assertEquals(chunk.neighbours.traceChunk(ChunkPosition(2, 0))?.position, ChunkPosition(2, 0))
}
fun `trace 2 in z- direction`() {
val world = create()
val chunk = world.chunks[0, 0]!!
assertEquals(chunk.neighbours.traceChunk(ChunkPosition(0, -2))?.position, ChunkPosition(0, -2))
}
fun `trace 2 in z+ direction`() {
val world = create()
val chunk = world.chunks[0, 0]!!
assertEquals(chunk.neighbours.traceChunk(ChunkPosition(0, 2))?.position, ChunkPosition(0, 2))
}
fun `trace non-existent chunk`() {
val world = create()
val chunk = world.chunks[0, 0]!!
assertNull(chunk.neighbours.traceChunk(ChunkPosition(0, 5)))
}
fun `trace block absolut same chunk`() {
val world = create()
val chunk = world.chunks[1, 1]!!
chunk[InChunkPosition(1, 2, 3)] = IT.BLOCK_1
assertEquals(chunk.neighbours.traceBlock(BlockPosition(17, 2, 19)), IT.BLOCK_1)
}
fun `trace block relative direction same chunk`() {
val world = create()
val chunk = world.chunks[1, 1]!!
chunk[InChunkPosition(1, 2, 3)] = IT.BLOCK_1
assertEquals(chunk.neighbours.traceBlock(InChunkPosition(1, 1, 3), Directions.UP), IT.BLOCK_1)
}
fun `trace block relative offset same chunk`() {
val world = create()
val chunk = world.chunks[1, 1]!!
chunk[InChunkPosition(3, 5, 7)] = IT.BLOCK_1
assertEquals(chunk.neighbours.traceBlock(InChunkPosition(1, 0, 3), BlockPosition(2, 5, 4)), IT.BLOCK_1)
}
fun `trace block absolut neighbour chunk`() {
val world = create()
val chunk = world.chunks[1, 1]!!
chunk[InChunkPosition(1, 2, 3)] = IT.BLOCK_1
assertEquals(world.chunks[0, 0]!!.neighbours.traceBlock(BlockPosition(17, 2, 19)), IT.BLOCK_1)
}
fun `trace block relative direction neighbour chunk`() {
val world = create()
val chunk = world.chunks[1, 0]!!
chunk[InChunkPosition(0, 1, 3)] = IT.BLOCK_1
assertEquals(world.chunks[0, 0]!!.neighbours.traceBlock(InChunkPosition(15, 1, 3), Directions.EAST), IT.BLOCK_1)
}
fun `trace block relative offset neighbour chunk`() {
val world = create()
val chunk = world.chunks[1, 1]!!
chunk[InChunkPosition(2, 5, 8)] = IT.BLOCK_1 // 18 5 24
assertEquals(world.chunks[-1, 0]!!.neighbours.traceBlock(InChunkPosition(3, 1, 3), BlockPosition(31, 4, 21)), IT.BLOCK_1)
}
}

View File

@ -14,6 +14,7 @@
package de.bixilon.minosoft.test
import de.bixilon.kutil.cast.CastUtil.unsafeNull
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
import de.bixilon.minosoft.data.registries.registries.Registries
import de.bixilon.minosoft.protocol.network.session.play.PlaySession
import de.bixilon.minosoft.protocol.versions.Version
@ -27,4 +28,9 @@ object IT {
var REGISTRIES: Registries = unsafeNull()
var FALLBACK_TAGS: TagManager = unsafeNull()
val NULL_CONNECTION = OBJENESIS.newInstance(PlaySession::class.java)
val BLOCK_1: BlockState = unsafeNull()
val BLOCK_2: BlockState = unsafeNull()
val BLOCK_3: BlockState = unsafeNull()
}