diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/MinosoftSIT.kt b/src/integration-test/kotlin/de/bixilon/minosoft/MinosoftSIT.kt index da1218239..c57e9e956 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/MinosoftSIT.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/MinosoftSIT.kt @@ -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) } } diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/data/world/chunk/neighbours/ChunkNeighboursTest.kt b/src/integration-test/kotlin/de/bixilon/minosoft/data/world/chunk/neighbours/ChunkNeighboursTest.kt index ddaed1add..a59f74583 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/data/world/chunk/neighbours/ChunkNeighboursTest.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/data/world/chunk/neighbours/ChunkNeighboursTest.kt @@ -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) + } } diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/test/IT.kt b/src/integration-test/kotlin/de/bixilon/minosoft/test/IT.kt index e9d49dfa0..a1c8bce8d 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/test/IT.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/test/IT.kt @@ -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() }