separate Height from ChunkHeight so that ymodded levels and zipped schematic levels can coexist

This commit is contained in:
David Vierra 2011-02-21 04:52:07 -10:00
parent f45a9358cd
commit 07b61c0b89

View File

@ -1797,16 +1797,16 @@ class InfdevChunk(MCLevel):
levelTag[LastUpdate] = TAG_Long(0);
levelTag[BlockLight] = TAG_Byte_Array()
levelTag[BlockLight].value = zeros(16*16*self.world.Height/2, uint8)
levelTag[BlockLight].value = zeros(16*16*self.world.ChunkHeight/2, uint8)
levelTag[Blocks] = TAG_Byte_Array()
levelTag[Blocks].value = zeros(16*16*self.world.Height, uint8)
levelTag[Blocks].value = zeros(16*16*self.world.ChunkHeight, uint8)
levelTag[Data] = TAG_Byte_Array()
levelTag[Data].value = zeros(16*16*self.world.Height/2, uint8)
levelTag[Data].value = zeros(16*16*self.world.ChunkHeight/2, uint8)
levelTag[SkyLight] = TAG_Byte_Array()
levelTag[SkyLight].value = zeros(16*16*self.world.Height/2, uint8)
levelTag[SkyLight].value = zeros(16*16*self.world.ChunkHeight/2, uint8)
levelTag[SkyLight].value[:] = 255
levelTag[HeightMap] = TAG_Byte_Array()
@ -1948,7 +1948,7 @@ class InfdevChunk(MCLevel):
""" for internal use. call getChunk and compressChunk to load, compress, and unpack chunks automatically """
for key in (SkyLight, BlockLight, Data):
dataArray = self.root_tag[Level][key].value
assert dataArray.shape[2] == self.world.Height/2;
assert dataArray.shape[2] == self.world.ChunkHeight/2;
unpackedData = insert(dataArray[...,newaxis], 0, 0, 3)
#unpack data
@ -1957,7 +1957,7 @@ class InfdevChunk(MCLevel):
#unpackedData[...,1] &= 0x0f
self.root_tag[Level][key].value=unpackedData.reshape(16,16,self.world.Height)
self.root_tag[Level][key].value=unpackedData.reshape(16,16,self.world.ChunkHeight)
self.dataIsPacked = False;
def packChunkData(self):
@ -1968,9 +1968,9 @@ class InfdevChunk(MCLevel):
return;
for key in (SkyLight, BlockLight, Data):
dataArray = self.root_tag[Level][key].value
assert dataArray.shape[2] == self.world.Height;
assert dataArray.shape[2] == self.world.ChunkHeight;
unpackedData = self.root_tag[Level][key].value.reshape(16,16,self.world.Height/2,2)
unpackedData = self.root_tag[Level][key].value.reshape(16,16,self.world.ChunkHeight/2,2)
unpackedData[...,1] <<=4
unpackedData[...,1] |= unpackedData[...,0]
self.root_tag[Level][key].value=array(unpackedData[:,:,:,1])
@ -1983,11 +1983,11 @@ class InfdevChunk(MCLevel):
chunkTag = self.root_tag
chunkSize = 16
chunkTag[Level][Blocks].value.shape=(chunkSize, chunkSize, self.world.Height)
chunkTag[Level][Blocks].value.shape=(chunkSize, chunkSize, self.world.ChunkHeight)
chunkTag[Level][HeightMap].value.shape=(chunkSize, chunkSize);
chunkTag[Level][SkyLight].value.shape = (chunkSize, chunkSize, self.world.Height/2)
chunkTag[Level][BlockLight].value.shape = (chunkSize, chunkSize, self.world.Height/2)
chunkTag[Level]["Data"].value.shape = (chunkSize, chunkSize, self.world.Height/2)
chunkTag[Level][SkyLight].value.shape = (chunkSize, chunkSize, self.world.ChunkHeight/2)
chunkTag[Level][BlockLight].value.shape = (chunkSize, chunkSize, self.world.ChunkHeight/2)
chunkTag[Level]["Data"].value.shape = (chunkSize, chunkSize, self.world.ChunkHeight/2)
if not TileEntities in chunkTag[Level]:
chunkTag[Level][TileEntities] = TAG_List();
if not Entities in chunkTag[Level]:
@ -2093,6 +2093,7 @@ class MCInfdevOldLevel(MCLevel):
hasEntities = True;
parentWorld = None;
dimNo = 0;
ChunkHeight = 128
@property
def displayName(self):
@ -2272,7 +2273,8 @@ class MCInfdevOldLevel(MCLevel):
#attempt to support yMod
try:
self.Height = self.root_tag["Data"]["YLimit"].value
self.ChunkHeight = self.root_tag["Data"]["YLimit"].value
self.Height = self.ChunkHeight
except:
pass
@ -2315,7 +2317,6 @@ class MCInfdevOldLevel(MCLevel):
info( "Found dimension {0}".format(dirname))
dim = MCAlphaDimension(filename = os.path.join(self.worldDir, dirname));
dim.parentWorld = self;
dim.Height = self.Height
dim.dimNo = dimNo
dim.root_tag = self.root_tag;
dim.filename = self.filename