0

world: only render fully formed and lit chunks

Minecraft notes various stages of fetal development that chunks are
in, with the complete ones being "full". Previously, we'd check
against a list of states that are not full to skip a chunk, which
is obviously not future proof, and broke as Mojang updated their
possible range of values for the status field. It's better to
just bail if the status is anything other than "full".

Additionally, a key called "isLightOn" is in the chunk now. This
seemingly determines whether a chunk has been lit. We're also going
to check for this, and bail if it's not. In my tests, I have not yet
seen a single "full" chunk that does not have "isLightOn" set.

Fixes #1558.
This commit is contained in:
Nicolas F
2019-04-28 13:38:05 +02:00
parent 7b523c447a
commit 0004540a57

View File

@@ -1307,8 +1307,10 @@ class RegionSet(object):
# Empty is self-explanatory, and liquid_carved and carved seem to correspond
# to SkyLight not being calculated, which results in mostly-black chunks,
# so we'll just pretend they aren't there.
if chunk_data.get("Status", "") in ("empty", "carved", "liquid_carved", "decorated"):
if chunk_data.get("Status", "") != "full":
raise ChunkDoesntExist("Chunk %s,%s doesn't exist" % (x,z))
if not chunk_data.get("isLightOn", 0):
raise ChunkDoesntExist("Chunk %s,%s isn't lit" % (x,z))
# Turn the Biomes array into a 16x16 numpy arra
if 'Biomes' in chunk_data and len(chunk_data['Biomes']) > 0: