Skip to content

Commit 1c6babc

Browse files
committed
Render chunks below zero retrogen chunks again
Pre-1.18 chunks that are loaded in 1.18+ are often saved in a transitional proto-chunk status. Currently, the Overviewer will ignore these chunks altogether, resulting in only part of the terrain being rendered. If the world is optimized with --forceUpgrade, only chunks that have been visited in 1.18+ will be rendered. With this change, the Overviewer detects these chunks and renders them again.
1 parent 09354cb commit 1c6babc

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

overviewer_core/world.py

+19-1
Original file line numberDiff line numberDiff line change
@@ -1720,6 +1720,8 @@ def get_chunk(self, x, z):
17201720
# starting with 1.16 snapshot 20w17a, block states are packed differently
17211721
longarray_unpacker = self._packed_longarray_to_shorts_v116
17221722

1723+
include_chunk = False
1724+
below_zero_retrogen_target_status = None
17231725
# From the interior of a map to the edge, a chunk's status may be one of:
17241726
# - postprocessed (interior, or next to fullchunk)
17251727
# - fullchunk (next to decorated)
@@ -1730,8 +1732,18 @@ def get_chunk(self, x, z):
17301732
# Empty is self-explanatory, and liquid_carved and carved seem to correspond
17311733
# to SkyLight not being calculated, which results in mostly-black chunks,
17321734
# so we'll just pretend they aren't there.
1733-
if chunk_data.get("Status", "") not in ("full", "postprocessed", "fullchunk",
1735+
if chunk_data.get("Status", "") in ("full", "postprocessed", "fullchunk",
17341736
"mobs_spawned", "spawn", ""):
1737+
include_chunk = True
1738+
1739+
else:
1740+
below_zero_retrogen_target_status = (
1741+
chunk_data.get("below_zero_retrogen", {}).get("target_status")
1742+
)
1743+
if below_zero_retrogen_target_status in ("heightmaps", "spawn"):
1744+
include_chunk = True
1745+
1746+
if not include_chunk:
17351747
raise ChunkDoesntExist("Chunk %s,%s doesn't exist" % (x,z))
17361748

17371749
# Turn the Biomes array into a 16x16 numpy array
@@ -1767,6 +1779,12 @@ def get_chunk(self, x, z):
17671779
if 'SkyLight' in section:
17681780
skylight = numpy.frombuffer(section['SkyLight'], dtype=numpy.uint8)
17691781
skylight = skylight.reshape((16,16,8))
1782+
elif below_zero_retrogen_target_status and section["Y"] < 0:
1783+
# nonexistent section of incomplete pre-1.18 chunk
1784+
# if we don't do this, the terrain below Y=0 next to it will be
1785+
# painted black, and since this terrain isn't a red door and we
1786+
# aren't the rolling stones, we don't want that
1787+
skylight = numpy.full((16,16, 8), 255, dtype=numpy.uint8)
17701788
else: # Special case introduced with 1.14
17711789
skylight = numpy.zeros((16,16,8), dtype=numpy.uint8)
17721790
skylight_expanded = numpy.empty((16,16,16), dtype=numpy.uint8)

0 commit comments

Comments
 (0)