diff --git a/overviewer_core/aux_files/genPOI.py b/overviewer_core/aux_files/genPOI.py index 367eb19..72eae2f 100755 --- a/overviewer_core/aux_files/genPOI.py +++ b/overviewer_core/aux_files/genPOI.py @@ -19,6 +19,7 @@ import logging import json import sys import re +import urllib2 import Queue import multiprocessing @@ -30,6 +31,8 @@ from overviewer_core import logger from overviewer_core import nbt from overviewer_core import configParser, world +UUID_LOOKUP_URL = 'https://sessionserver.mojang.com/session/minecraft/profile/' + def replaceBads(s): "Replaces bad characters with good characters!" bads = [" ", "(", ")"] @@ -132,10 +135,11 @@ def handlePlayers(rset, render, worldpath): dimension = int(mystdim.group(1)) else: raise - # TODO: get player names from UUIDs once Mojang makes available an API to do it playerdir = os.path.join(worldpath, "playerdata") + useUUIDs = True if not os.path.isdir(playerdir): playerdir = os.path.join(worldpath, "players") + useUUIDs = False if os.path.isdir(playerdir): playerfiles = os.listdir(playerdir) @@ -156,6 +160,13 @@ def handlePlayers(rset, render, worldpath): logging.warning("Skipping bad player dat file %r", playerfile) continue 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: + logging.warning("Unable to get player name for UUID %s", playername) if isSinglePlayer: playername = 'Player' if data['Dimension'] == dimension: