Use Mojang's session API to get usernames from UUIDs
This commit is contained in:
@@ -19,6 +19,7 @@ import logging
|
|||||||
import json
|
import json
|
||||||
import sys
|
import sys
|
||||||
import re
|
import re
|
||||||
|
import urllib2
|
||||||
import Queue
|
import Queue
|
||||||
import multiprocessing
|
import multiprocessing
|
||||||
|
|
||||||
@@ -30,6 +31,8 @@ from overviewer_core import logger
|
|||||||
from overviewer_core import nbt
|
from overviewer_core import nbt
|
||||||
from overviewer_core import configParser, world
|
from overviewer_core import configParser, world
|
||||||
|
|
||||||
|
UUID_LOOKUP_URL = 'https://sessionserver.mojang.com/session/minecraft/profile/'
|
||||||
|
|
||||||
def replaceBads(s):
|
def replaceBads(s):
|
||||||
"Replaces bad characters with good characters!"
|
"Replaces bad characters with good characters!"
|
||||||
bads = [" ", "(", ")"]
|
bads = [" ", "(", ")"]
|
||||||
@@ -132,10 +135,11 @@ def handlePlayers(rset, render, worldpath):
|
|||||||
dimension = int(mystdim.group(1))
|
dimension = int(mystdim.group(1))
|
||||||
else:
|
else:
|
||||||
raise
|
raise
|
||||||
# TODO: get player names from UUIDs once Mojang makes available an API to do it
|
|
||||||
playerdir = os.path.join(worldpath, "playerdata")
|
playerdir = os.path.join(worldpath, "playerdata")
|
||||||
|
useUUIDs = True
|
||||||
if not os.path.isdir(playerdir):
|
if not os.path.isdir(playerdir):
|
||||||
playerdir = os.path.join(worldpath, "players")
|
playerdir = os.path.join(worldpath, "players")
|
||||||
|
useUUIDs = False
|
||||||
|
|
||||||
if os.path.isdir(playerdir):
|
if os.path.isdir(playerdir):
|
||||||
playerfiles = os.listdir(playerdir)
|
playerfiles = os.listdir(playerdir)
|
||||||
@@ -156,6 +160,13 @@ def handlePlayers(rset, render, worldpath):
|
|||||||
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:
|
||||||
|
logging.warning("Unable to get player name for UUID %s", playername)
|
||||||
if isSinglePlayer:
|
if isSinglePlayer:
|
||||||
playername = 'Player'
|
playername = 'Player'
|
||||||
if data['Dimension'] == dimension:
|
if data['Dimension'] == dimension:
|
||||||
|
|||||||
Reference in New Issue
Block a user