From 65799bb08177797d945c7a630227ad76c865a8a8 Mon Sep 17 00:00:00 2001 From: Moritz Zwerger Date: Wed, 12 Mar 2025 18:45:45 +0100 Subject: [PATCH] server light receiving This feature is disabled anyways, because it might not be correct and minosofts light engine is fast enough. --- .../data/world/chunk/light/section/SectionLight.kt | 6 +++++- .../world/chunk/light/section/border/BorderSectionLight.kt | 5 +---- .../world/chunk/light/section/border/BottomSectionLight.kt | 5 +++++ .../world/chunk/light/section/border/TopSectionLight.kt | 7 +++++++ 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/data/world/chunk/light/section/SectionLight.kt b/src/main/java/de/bixilon/minosoft/data/world/chunk/light/section/SectionLight.kt index 1489111ee..f81151098 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/chunk/light/section/SectionLight.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/chunk/light/section/SectionLight.kt @@ -59,6 +59,8 @@ class SectionLight( if (level.block <= 1) return // can not decrease any further val next = level.decrease() + // TODO: sky (trace and heightmap), check if light propagates in a direction + if (position.x > 0) trace(position.minusX(), next) else section.neighbours?.get(Directions.O_WEST)?.light?.trace(position.with(x = ProtocolDefinition.SECTION_MAX_X), next) if (position.x < ProtocolDefinition.SECTION_MAX_X) trace(position.plusX(), next) else section.neighbours?.get(Directions.O_EAST)?.light?.trace(position.with(x = 0), next) @@ -111,5 +113,7 @@ class SectionLight( } - override fun update(array: LightArray) = TODO("Save light from server") + override fun update(array: LightArray) { + System.arraycopy(array.array, 0, this.light.array, 0, array.array.size) + } } diff --git a/src/main/java/de/bixilon/minosoft/data/world/chunk/light/section/border/BorderSectionLight.kt b/src/main/java/de/bixilon/minosoft/data/world/chunk/light/section/border/BorderSectionLight.kt index cd83a1b24..d027c45a4 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/chunk/light/section/border/BorderSectionLight.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/chunk/light/section/border/BorderSectionLight.kt @@ -16,7 +16,6 @@ package de.bixilon.minosoft.data.world.chunk.light.section.border import de.bixilon.minosoft.data.world.chunk.ChunkSection import de.bixilon.minosoft.data.world.chunk.chunk.Chunk import de.bixilon.minosoft.data.world.chunk.light.section.AbstractSectionLight -import de.bixilon.minosoft.data.world.chunk.light.types.LightArray import de.bixilon.minosoft.data.world.chunk.light.types.LightLevel import de.bixilon.minosoft.data.world.chunk.update.AbstractWorldUpdate import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition @@ -49,7 +48,5 @@ abstract class BorderSectionLight( return null } - override fun propagate() = TODO() - - override fun update(array: LightArray) = TODO("Save light from server") + override fun propagate() = Unit // TODO } diff --git a/src/main/java/de/bixilon/minosoft/data/world/chunk/light/section/border/BottomSectionLight.kt b/src/main/java/de/bixilon/minosoft/data/world/chunk/light/section/border/BottomSectionLight.kt index 38fed9691..1c0b98e0b 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/chunk/light/section/border/BottomSectionLight.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/chunk/light/section/border/BottomSectionLight.kt @@ -15,6 +15,7 @@ package de.bixilon.minosoft.data.world.chunk.light.section.border import de.bixilon.kutil.array.ArrayUtil.getFirst import de.bixilon.minosoft.data.world.chunk.chunk.Chunk +import de.bixilon.minosoft.data.world.chunk.light.types.LightArray import de.bixilon.minosoft.data.world.chunk.light.types.LightLevel import de.bixilon.minosoft.data.world.positions.InSectionPosition import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition @@ -30,4 +31,8 @@ class BottomSectionLight( override fun getNearestSection() = chunk.sections.getFirst() override fun Chunk.getBorderLight() = this.light.bottom + + override fun update(array: LightArray) { + System.arraycopy(array.array, InSectionPosition(0, ProtocolDefinition.SECTION_MAX_Y, 0).index, this.light, 0, ProtocolDefinition.SECTION_WIDTH_X * ProtocolDefinition.SECTION_WIDTH_Z) + } } diff --git a/src/main/java/de/bixilon/minosoft/data/world/chunk/light/section/border/TopSectionLight.kt b/src/main/java/de/bixilon/minosoft/data/world/chunk/light/section/border/TopSectionLight.kt index 2f9076473..1b7451147 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/chunk/light/section/border/TopSectionLight.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/chunk/light/section/border/TopSectionLight.kt @@ -15,8 +15,10 @@ package de.bixilon.minosoft.data.world.chunk.light.section.border import de.bixilon.kutil.array.ArrayUtil.getLast import de.bixilon.minosoft.data.world.chunk.chunk.Chunk +import de.bixilon.minosoft.data.world.chunk.light.types.LightArray import de.bixilon.minosoft.data.world.chunk.light.types.LightLevel import de.bixilon.minosoft.data.world.positions.InSectionPosition +import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition class TopSectionLight( chunk: Chunk, @@ -29,4 +31,9 @@ class TopSectionLight( override fun getNearestSection() = chunk.sections.getLast() override fun Chunk.getBorderLight() = this.light.top + + + override fun update(array: LightArray) { + System.arraycopy(array.array, InSectionPosition(0, 0, 0).index, this.light, 0, ProtocolDefinition.SECTION_WIDTH_X * ProtocolDefinition.SECTION_WIDTH_Z) + } }