pyflakes helped fixes: infiniteworld.py: unravel import all of mclevelbase module

This commit is contained in:
David Sowder 2012-02-27 19:04:50 -06:00
parent 9cb13d4f22
commit 4ae04dbaeb

View File

@ -4,12 +4,24 @@ Created on Jul 22, 2011
@author: Rio @author: Rio
''' '''
from mclevelbase import * # **FIXME** WindowsError is the name of a built-in Exception, but pyflakes doesn't seem to know that. -zothar
from collections import deque from collections import deque
import nbt from contextlib import closing
from cStringIO import StringIO
from datetime import datetime from datetime import datetime
from entity import Entity, TileEntity
from faces import FaceXDecreasing, FaceXIncreasing, FaceZDecreasing, FaceZIncreasing
import gzip
import itertools
from logging import getLogger from logging import getLogger
from materials import alphaMaterials, namedMaterials
from math import floor
from mclevelbase import appDataDir, Blocks, ChunkMalformed, ChunkNotPresent, decompress_first, Entities, exhaust, notclosing, PlayerNotFound, RegionMalformed, TileEntities, unpack_first
import nbt
from numpy import array, clip, fromstring, maximum, uint32, uint8, zeros
import os import os
from os.path import join, dirname, basename
import random
import time import time
import traceback import traceback
import zlib import zlib
@ -17,9 +29,9 @@ import struct
import shutil import shutil
import subprocess import subprocess
import sys import sys
import urllib
import tempfile import tempfile
from os.path import join, dirname, basename import urllib
log = getLogger(__name__) log = getLogger(__name__)
warn, error, info, debug = log.warn, log.error, log.info, log.debug warn, error, info, debug = log.warn, log.error, log.info, log.debug
@ -721,7 +733,7 @@ class InfdevChunk(LightedChunk):
self.root_tag = None self.root_tag = None
def decompressTagGzip(self, data): def decompressTagGzip(self, data):
return nbt.load(buf=gunzip(data)) return nbt.load(buf=nbt.gunzip(data))
def decompressTagDeflate(self, data): def decompressTagDeflate(self, data):
return nbt.load(buf=inflate(data)) return nbt.load(buf=inflate(data))
@ -814,34 +826,34 @@ class InfdevChunk(LightedChunk):
levelTag = nbt.TAG_Compound() levelTag = nbt.TAG_Compound()
chunkTag[Level] = levelTag chunkTag[Level] = levelTag
levelTag[TerrainPopulated] = TAG_Byte(1) levelTag[TerrainPopulated] = nbt.TAG_Byte(1)
levelTag[xPos] = TAG_Int(cx) levelTag[xPos] = nbt.TAG_Int(cx)
levelTag[zPos] = TAG_Int(cz) levelTag[zPos] = nbt.TAG_Int(cz)
levelTag[LastUpdate] = TAG_Long(0) levelTag[LastUpdate] = nbt.TAG_Long(0)
levelTag[BlockLight] = TAG_Byte_Array() levelTag[BlockLight] = nbt.TAG_Byte_Array()
levelTag[BlockLight].value = zeros(16 * 16 * self.world.Height / 2, uint8) levelTag[BlockLight].value = zeros(16 * 16 * self.world.Height / 2, uint8)
levelTag[Blocks] = TAG_Byte_Array() levelTag[Blocks] = nbt.TAG_Byte_Array()
levelTag[Blocks].value = zeros(16 * 16 * self.world.Height, uint8) levelTag[Blocks].value = zeros(16 * 16 * self.world.Height, uint8)
levelTag[Data] = TAG_Byte_Array() levelTag[Data] = nbt.TAG_Byte_Array()
levelTag[Data].value = zeros(16 * 16 * self.world.Height / 2, uint8) levelTag[Data].value = zeros(16 * 16 * self.world.Height / 2, uint8)
levelTag[SkyLight] = TAG_Byte_Array() levelTag[SkyLight] = nbt.TAG_Byte_Array()
levelTag[SkyLight].value = zeros(16 * 16 * self.world.Height / 2, uint8) levelTag[SkyLight].value = zeros(16 * 16 * self.world.Height / 2, uint8)
levelTag[SkyLight].value[:] = 255 levelTag[SkyLight].value[:] = 255
if self.world.Height <= 256: if self.world.Height <= 256:
levelTag[HeightMap] = TAG_Byte_Array() levelTag[HeightMap] = nbt.TAG_Byte_Array()
levelTag[HeightMap].value = zeros(16 * 16, uint8) levelTag[HeightMap].value = zeros(16 * 16, uint8)
else: else:
levelTag[HeightMap] = TAG_Int_Array() levelTag[HeightMap] = nbt.TAG_Int_Array()
levelTag[HeightMap].value = zeros(16 * 16, uint32).newbyteorder() levelTag[HeightMap].value = zeros(16 * 16, uint32).newbyteorder()
levelTag[Entities] = TAG_List() levelTag[Entities] = nbt.TAG_List()
levelTag[TileEntities] = TAG_List() levelTag[TileEntities] = nbt.TAG_List()
self.root_tag = chunkTag self.root_tag = chunkTag
self.shapeChunkData() self.shapeChunkData()
@ -949,16 +961,16 @@ class InfdevChunk(LightedChunk):
chunkTag[Level][BlockLight].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]["Data"].value.shape = (chunkSize, chunkSize, self.world.Height / 2)
if TileEntities not in chunkTag[Level]: if TileEntities not in chunkTag[Level]:
chunkTag[Level][TileEntities] = TAG_List() chunkTag[Level][TileEntities] = nbt.TAG_List()
if Entities not in chunkTag[Level]: if Entities not in chunkTag[Level]:
chunkTag[Level][Entities] = TAG_List() chunkTag[Level][Entities] = nbt.TAG_List()
def addEntity(self, entityTag): def addEntity(self, entityTag):
def doubleize(name): def doubleize(name):
if name in entityTag: if name in entityTag:
m = entityTag[name] m = entityTag[name]
entityTag[name] = TAG_List([TAG_Double(i.value) for i in m]) entityTag[name] = nbt.TAG_List([nbt.TAG_Double(i.value) for i in m])
doubleize("Motion") doubleize("Motion")
doubleize("Position") doubleize("Position")
@ -1098,7 +1110,7 @@ class AnvilChunk(InfdevChunk):
arr[..., y:y + 16] = secarray.swapaxes(0, 2) arr[..., y:y + 16] = secarray.swapaxes(0, 2)
def _compressChunk(self): def _compressChunk(self):
sections = self.root_tag[Level][Sections] = TAG_List() sections = self.root_tag[Level][Sections] = nbt.TAG_List()
for y in range(0, self.Height, 16): for y in range(0, self.Height, 16):
sec = nbt.TAG_Compound() sec = nbt.TAG_Compound()
@ -1112,10 +1124,10 @@ class AnvilChunk(InfdevChunk):
else: else:
secarray = packNibbleArray(secarray) secarray = packNibbleArray(secarray)
sec[name] = TAG_Byte_Array(array(secarray)) sec[name] = nbt.TAG_Byte_Array(array(secarray))
if len(sec): if len(sec):
sec["Y"] = TAG_Byte(y / 16) sec["Y"] = nbt.TAG_Byte(y / 16)
sections.append(sec) sections.append(sec)
super(AnvilChunk, self)._compressChunk() super(AnvilChunk, self)._compressChunk()
@ -1127,11 +1139,11 @@ class AnvilChunk(InfdevChunk):
levelTag = nbt.TAG_Compound() levelTag = nbt.TAG_Compound()
chunkTag[Level] = levelTag chunkTag[Level] = levelTag
levelTag[TerrainPopulated] = TAG_Byte(1) levelTag[TerrainPopulated] = nbt.TAG_Byte(1)
levelTag[xPos] = TAG_Int(cx) levelTag[xPos] = nbt.TAG_Int(cx)
levelTag[zPos] = TAG_Int(cz) levelTag[zPos] = nbt.TAG_Int(cz)
levelTag[LastUpdate] = TAG_Long(0) levelTag[LastUpdate] = nbt.TAG_Long(0)
self._Blocks = zeros((16, 16, self.world.Height), uint8) self._Blocks = zeros((16, 16, self.world.Height), uint8)
self._Data = zeros((16, 16, self.world.Height), uint8) self._Data = zeros((16, 16, self.world.Height), uint8)
@ -1139,11 +1151,11 @@ class AnvilChunk(InfdevChunk):
self._SkyLight = zeros((16, 16, self.world.Height), uint8) self._SkyLight = zeros((16, 16, self.world.Height), uint8)
self._SkyLight[:] = 15 self._SkyLight[:] = 15
levelTag[HeightMap] = TAG_Int_Array() levelTag[HeightMap] = nbt.TAG_Int_Array()
levelTag[HeightMap].value = zeros((16, 16), uint32).newbyteorder() levelTag[HeightMap].value = zeros((16, 16), uint32).newbyteorder()
levelTag[Entities] = TAG_List() levelTag[Entities] = nbt.TAG_List()
levelTag[TileEntities] = TAG_List() levelTag[TileEntities] = nbt.TAG_List()
self.root_tag = chunkTag self.root_tag = chunkTag
self.dirty = True self.dirty = True
@ -1362,7 +1374,7 @@ class MCRegionFile(object):
def _decompressSectors(self, format, data): def _decompressSectors(self, format, data):
if format == self.VERSION_GZIP: if format == self.VERSION_GZIP:
return gunzip(data) return nbt.gunzip(data)
if format == self.VERSION_DEFLATE: if format == self.VERSION_DEFLATE:
return inflate(data) return inflate(data)
@ -2311,16 +2323,16 @@ class MCInfdevOldLevel(ChunkedLevelMixin, EntityLevel):
return property(getter, setter) return property(getter, setter)
SizeOnDisk = TagProperty('SizeOnDisk', TAG_Long) SizeOnDisk = TagProperty('SizeOnDisk', nbt.TAG_Long)
RandomSeed = TagProperty('RandomSeed', TAG_Long) RandomSeed = TagProperty('RandomSeed', nbt.TAG_Long)
Time = TagProperty('Time', TAG_Long) # Age of the world in ticks. 20 ticks per second; 24000 ticks per day. Time = TagProperty('Time', nbt.TAG_Long) # Age of the world in ticks. 20 ticks per second; 24000 ticks per day.
LastPlayed = TagProperty('LastPlayed', TAG_Long, lambda self: long(time.time() * 1000)) LastPlayed = TagProperty('LastPlayed', nbt.TAG_Long, lambda self: long(time.time() * 1000))
LevelName = TagProperty('LevelName', TAG_String, lambda self: self.displayName) LevelName = TagProperty('LevelName', nbt.TAG_String, lambda self: self.displayName)
MapFeatures = TagProperty('MapFeatures', TAG_Byte, lambda self: 1) MapFeatures = TagProperty('MapFeatures', nbt.TAG_Byte, lambda self: 1)
GameType = TagProperty('GameType', TAG_Int, lambda self: 0) # 0 for survival, 1 for creative GameType = TagProperty('GameType', nbt.TAG_Int, lambda self: 0) # 0 for survival, 1 for creative
GAMETYPE_SURVIVAL = 0 GAMETYPE_SURVIVAL = 0
GAMETYPE_CREATIVE = 1 GAMETYPE_CREATIVE = 1
@ -2353,11 +2365,11 @@ class MCInfdevOldLevel(ChunkedLevelMixin, EntityLevel):
if filename == None: if filename == None:
raise ValueError("Can't create an Infinite level without a filename!") raise ValueError("Can't create an Infinite level without a filename!")
# create a new level # create a new level
root_tag = TAG_Compound() root_tag = nbt.TAG_Compound()
root_tag[Data] = TAG_Compound() root_tag[Data] = nbt.TAG_Compound()
root_tag[Data][SpawnX] = TAG_Int(0) root_tag[Data][SpawnX] = nbt.TAG_Int(0)
root_tag[Data][SpawnY] = TAG_Int(2) root_tag[Data][SpawnY] = nbt.TAG_Int(2)
root_tag[Data][SpawnZ] = TAG_Int(0) root_tag[Data][SpawnZ] = nbt.TAG_Int(0)
if last_played is None: if last_played is None:
last_played = long(time.time() * 1000) last_played = long(time.time() * 1000)
@ -2365,7 +2377,7 @@ class MCInfdevOldLevel(ChunkedLevelMixin, EntityLevel):
random_seed = long(random.random() * 0xffffffffffffffffL) - 0x8000000000000000L random_seed = long(random.random() * 0xffffffffffffffffL) - 0x8000000000000000L
self.root_tag = root_tag self.root_tag = root_tag
root_tag[Data]['version'] = TAG_Int(self.VERSION_MCR) root_tag[Data]['version'] = nbt.TAG_Int(self.VERSION_MCR)
self.LastPlayed = long(last_played) self.LastPlayed = long(last_played)
self.RandomSeed = long(random_seed) self.RandomSeed = long(random_seed)
@ -2382,25 +2394,25 @@ class MCInfdevOldLevel(ChunkedLevelMixin, EntityLevel):
def createPlayer(self, playerName): def createPlayer(self, playerName):
if playerName == "Player": if playerName == "Player":
playerTag = self.root_tag[Data].setdefault(playerName, TAG_Compound()) playerTag = self.root_tag[Data].setdefault(playerName, nbt.TAG_Compound())
else: else:
playerTag = TAG_Compound() playerTag = nbt.TAG_Compound()
playerTag['Air'] = TAG_Short(300) playerTag['Air'] = nbt.TAG_Short(300)
playerTag['AttackTime'] = TAG_Short(0) playerTag['AttackTime'] = nbt.TAG_Short(0)
playerTag['DeathTime'] = TAG_Short(0) playerTag['DeathTime'] = nbt.TAG_Short(0)
playerTag['Fire'] = TAG_Short(-20) playerTag['Fire'] = nbt.TAG_Short(-20)
playerTag['Health'] = TAG_Short(20) playerTag['Health'] = nbt.TAG_Short(20)
playerTag['HurtTime'] = TAG_Short(0) playerTag['HurtTime'] = nbt.TAG_Short(0)
playerTag['Score'] = TAG_Int(0) playerTag['Score'] = nbt.TAG_Int(0)
playerTag['FallDistance'] = TAG_Float(0) playerTag['FallDistance'] = nbt.TAG_Float(0)
playerTag['OnGround'] = TAG_Byte(0) playerTag['OnGround'] = nbt.TAG_Byte(0)
playerTag['Inventory'] = TAG_List() playerTag['Inventory'] = nbt.TAG_List()
playerTag['Motion'] = TAG_List([TAG_Double(0) for i in range(3)]) playerTag['Motion'] = nbt.TAG_List([nbt.TAG_Double(0) for i in range(3)])
playerTag['Pos'] = TAG_List([TAG_Double([0.5, 2.8, 0.5][i]) for i in range(3)]) playerTag['Pos'] = nbt.TAG_List([nbt.TAG_Double([0.5, 2.8, 0.5][i]) for i in range(3)])
playerTag['Rotation'] = TAG_List([TAG_Float(0), TAG_Float(0)]) playerTag['Rotation'] = nbt.TAG_List([nbt.TAG_Float(0), nbt.TAG_Float(0)])
if playerName != "Player": if playerName != "Player":
self.playerTagCache.save(self.getPlayerPath(playerName)) self.playerTagCache.save(self.getPlayerPath(playerName))
@ -2701,7 +2713,7 @@ class MCInfdevOldLevel(ChunkedLevelMixin, EntityLevel):
with file(chunk.filename, 'rb') as f: with file(chunk.filename, 'rb') as f:
cdata = f.read() cdata = f.read()
chunk.compressedTag = cdata chunk.compressedTag = cdata
data = gunzip(cdata) data = nbt.gunzip(cdata)
chunk.root_tag = nbt.load(buf=data) chunk.root_tag = nbt.load(buf=data)
except Exception, e: except Exception, e:
@ -2889,7 +2901,7 @@ class MCInfdevOldLevel(ChunkedLevelMixin, EntityLevel):
info(u"Saved {0} chunks".format(dirtyChunkCount)) info(u"Saved {0} chunks".format(dirtyChunkCount))
def addEntity(self, entityTag): def addEntity(self, entityTag):
assert isinstance(entityTag, TAG_Compound) assert isinstance(entityTag, nbt.TAG_Compound)
x, y, z = map(lambda x: int(floor(x)), Entity.pos(entityTag)) x, y, z = map(lambda x: int(floor(x)), Entity.pos(entityTag))
try: try:
@ -2905,7 +2917,7 @@ class MCInfdevOldLevel(ChunkedLevelMixin, EntityLevel):
return chunk.tileEntityAt(x, y, z) return chunk.tileEntityAt(x, y, z)
def addTileEntity(self, tileEntityTag): def addTileEntity(self, tileEntityTag):
assert isinstance(tileEntityTag, TAG_Compound) assert isinstance(tileEntityTag, nbt.TAG_Compound)
if not 'x' in tileEntityTag: if not 'x' in tileEntityTag:
return return
x, y, z = TileEntity.pos(tileEntityTag) x, y, z = TileEntity.pos(tileEntityTag)
@ -3129,20 +3141,20 @@ class MCInfdevOldLevel(ChunkedLevelMixin, EntityLevel):
# Check for the Abilities tag. It will be missing in worlds from before # Check for the Abilities tag. It will be missing in worlds from before
# Beta 1.9 Prerelease 5. # Beta 1.9 Prerelease 5.
if not 'abilities' in playerTag: if not 'abilities' in playerTag:
playerTag['abilities'] = TAG_Compound() playerTag['abilities'] = nbt.TAG_Compound()
# Assumes creative (1) is the only mode with these abilities set, # Assumes creative (1) is the only mode with these abilities set,
# which is true for now. Future game modes may not hold this to be # which is true for now. Future game modes may not hold this to be
# true, however. # true, however.
if gametype == 1: if gametype == 1:
playerTag['abilities']['instabuild'] = TAG_Byte(1) playerTag['abilities']['instabuild'] = nbt.TAG_Byte(1)
playerTag['abilities']['mayfly'] = TAG_Byte(1) playerTag['abilities']['mayfly'] = nbt.TAG_Byte(1)
playerTag['abilities']['invulnerable'] = TAG_Byte(1) playerTag['abilities']['invulnerable'] = nbt.TAG_Byte(1)
else: else:
playerTag['abilities']['flying'] = TAG_Byte(0) playerTag['abilities']['flying'] = nbt.TAG_Byte(0)
playerTag['abilities']['instabuild'] = TAG_Byte(0) playerTag['abilities']['instabuild'] = nbt.TAG_Byte(0)
playerTag['abilities']['mayfly'] = TAG_Byte(0) playerTag['abilities']['mayfly'] = nbt.TAG_Byte(0)
playerTag['abilities']['invulnerable'] = TAG_Byte(0) playerTag['abilities']['invulnerable'] = nbt.TAG_Byte(0)
def setPlayerGameType(self, gametype, player="Player"): def setPlayerGameType(self, gametype, player="Player"):
playerTag = self.getPlayerTag(player) playerTag = self.getPlayerTag(player)
@ -3151,7 +3163,7 @@ class MCInfdevOldLevel(ChunkedLevelMixin, EntityLevel):
self.GameType = gametype self.GameType = gametype
self.setPlayerAbilities(gametype, player) self.setPlayerAbilities(gametype, player)
else: else:
playerTag['playerGameType'] = TAG_Int(gametype) playerTag['playerGameType'] = nbt.TAG_Int(gametype)
self.setPlayerAbilities(gametype, player) self.setPlayerAbilities(gametype, player)
def getPlayerGameType(self, player="Player"): def getPlayerGameType(self, player="Player"):
@ -3225,7 +3237,7 @@ class ZipSchematic (MCInfdevOldLevel):
try: try:
schematicDat = os.path.join(tempdir, "schematic.dat") schematicDat = os.path.join(tempdir, "schematic.dat")
with closing(self.zipfile.open("schematic.dat")) as f: with closing(self.zipfile.open("schematic.dat")) as f:
schematicDat = nbt.load(buf=gunzip(f.read())) schematicDat = nbt.load(buf=nbt.gunzip(f.read()))
self.Width = schematicDat['Width'].value self.Width = schematicDat['Width'].value
self.Height = schematicDat['Height'].value self.Height = schematicDat['Height'].value