0

Merge pull request #1110 from CounterPillow/genpoi-triage

genPOI triage
This commit is contained in:
Andrew Chin
2014-06-18 22:51:25 -04:00

View File

@@ -117,6 +117,27 @@ def handleEntities(rset, outputdir, render, rname, config):
logging.info("Done.") logging.info("Done.")
class PlayerDict(dict):
use_uuid = False
_name = ''
def __getitem__(self, item):
if item == "EntityId":
if not super(PlayerDict, self).has_key("EntityId"):
if self.use_uuid:
super(PlayerDict, self).__setitem__("EntityId", self.get_name_from_uuid())
else:
super(PlayerDict, self).__setitem__("EntityId", self._name)
return super(PlayerDict, self).__getitem__(item)
def get_name_from_uuid(self):
try:
profile = json.loads(urllib2.urlopen(UUID_LOOKUP_URL + self._name.replace('-','')).read())
if 'name' in profile:
return profile['name']
except (ValueError, urllib2.URLError):
logging.warning("Unable to get player name for UUID %s", playername)
def handlePlayers(rset, render, worldpath): def handlePlayers(rset, render, worldpath):
if not hasattr(rset, "_pois"): if not hasattr(rset, "_pois"):
rset._pois = dict(TileEntities=[], Entities=[]) rset._pois = dict(TileEntities=[], Entities=[])
@@ -153,37 +174,35 @@ def handlePlayers(rset, render, worldpath):
rset._pois['Players'] = [] rset._pois['Players'] = []
for playerfile in playerfiles: for playerfile in playerfiles:
try: try:
data = nbt.load(os.path.join(playerdir, playerfile))[1] data = PlayerDict(nbt.load(os.path.join(playerdir, playerfile))[1])
data.use_uuid = useUUIDs
if isSinglePlayer: if isSinglePlayer:
data = data['Data']['Player'] data = data['Data']['Player']
except IOError: except IOError:
logging.warning("Skipping bad player dat file %r", playerfile) logging.warning("Skipping bad player dat file %r", playerfile)
continue continue
playername = playerfile.split(".")[0] playername = playerfile.split(".")[0]
if useUUIDs:
try:
profile = json.loads(urllib2.urlopen(UUID_LOOKUP_URL + playername.replace('-','')).read())
if 'name' in profile:
playername = profile['name']
except (ValueError, urllib2.URLError):
logging.warning("Unable to get player name for UUID %s", playername)
if isSinglePlayer: if isSinglePlayer:
playername = 'Player' playername = 'Player'
data._name = playername
if data['Dimension'] == dimension: if data['Dimension'] == dimension:
# Position at last logout # Position at last logout
data['id'] = "Player" data['id'] = "Player"
data['EntityId'] = playername
data['x'] = int(data['Pos'][0]) data['x'] = int(data['Pos'][0])
data['y'] = int(data['Pos'][1]) data['y'] = int(data['Pos'][1])
data['z'] = int(data['Pos'][2]) data['z'] = int(data['Pos'][2])
rset._pois['Players'].append(data) rset._pois['Players'].append(data)
if "SpawnX" in data and dimension == 0: if "SpawnX" in data and dimension == 0:
# Spawn position (bed or main spawn) # Spawn position (bed or main spawn)
spawn = {"id": "PlayerSpawn", spawn = PlayerDict()
"EntityId": playername, spawn._name = playername
"x": data['SpawnX'], spawn["id"] = "PlayerSpawn"
"y": data['SpawnY'], spawn["x"] = data['SpawnX']
"z": data['SpawnZ']} spawn["y"] = data['SpawnY']
spawn["z"] = data['SpawnZ']
rset._pois['Players'].append(spawn) rset._pois['Players'].append(spawn)
def handleManual(rset, manualpois): def handleManual(rset, manualpois):