From 1cf131a8fc410be95e3560c7f90fec970bdecde6 Mon Sep 17 00:00:00 2001 From: Luc Ritchie Date: Sat, 8 Mar 2014 23:01:40 -0500 Subject: [PATCH 1/2] Handle UUID player files semi-nicely in POIgen (14w10a+, 1.7.6+) --- overviewer_core/aux_files/genPOI.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/overviewer_core/aux_files/genPOI.py b/overviewer_core/aux_files/genPOI.py index 5fa4b00..367eb19 100755 --- a/overviewer_core/aux_files/genPOI.py +++ b/overviewer_core/aux_files/genPOI.py @@ -132,7 +132,11 @@ def handlePlayers(rset, render, worldpath): dimension = int(mystdim.group(1)) else: raise - playerdir = os.path.join(worldpath, "players") + # TODO: get player names from UUIDs once Mojang makes available an API to do it + playerdir = os.path.join(worldpath, "playerdata") + if not os.path.isdir(playerdir): + playerdir = os.path.join(worldpath, "players") + if os.path.isdir(playerdir): playerfiles = os.listdir(playerdir) playerfiles = [x for x in playerfiles if x.endswith(".dat")] From 0e1bd4369a0aaf0e1734fcc5974705dc9f0428be Mon Sep 17 00:00:00 2001 From: Luc Ritchie Date: Sun, 9 Mar 2014 16:22:00 -0400 Subject: [PATCH 2/2] Use Mojang's session API to get usernames from UUIDs --- overviewer_core/aux_files/genPOI.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) 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: