pyflakes helped fixes: infiniteworld.py: unravel import all of mclevelbase module
This commit is contained in:
parent
9cb13d4f22
commit
4ae04dbaeb
156
infiniteworld.py
156
infiniteworld.py
@ -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
|
||||||
|
Reference in New Issue
Block a user