From 250a6e08872612374837733bc2748b89a05bff06 Mon Sep 17 00:00:00 2001 From: Tux Date: Sat, 27 Dec 2014 18:21:51 -0500 Subject: [PATCH] vemacs broke the build --- .../redisbungee/util/NameFetcher.java | 59 +++++++++++-------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/imaginarycode/minecraft/redisbungee/util/NameFetcher.java b/src/main/java/com/imaginarycode/minecraft/redisbungee/util/NameFetcher.java index f58cdc9..7fb9870 100644 --- a/src/main/java/com/imaginarycode/minecraft/redisbungee/util/NameFetcher.java +++ b/src/main/java/com/imaginarycode/minecraft/redisbungee/util/NameFetcher.java @@ -6,35 +6,46 @@ */ package com.imaginarycode.minecraft.redisbungee.util; - -import com.google.gson.Gson; +import com.google.common.collect.ImmutableList; import com.google.gson.reflect.TypeToken; +import com.imaginarycode.minecraft.redisbungee.RedisBungee; -import java.io.IOException; -import java.lang.reflect.Type; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; import java.net.URL; -import java.net.URLConnection; -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.Callable; -public class NameFetcher { - private static Map> cache = new HashMap<>(); +/* Credits to evilmidget38 for this class. I modified it to use Gson. */ +class NameFetcher implements Callable> { + private static final String PROFILE_URL = "https://sessionserver.mojang.com/session/minecraft/profile/"; + private final List uuids; - public static List nameHistoryFromUuid(UUID uuid) { - if (cache.containsKey(uuid)) return cache.get(uuid); - URLConnection connection; - try { - connection = new URL("https://api.mojang.com/user/profiles/" - + uuid.toString().replace("-", "").toLowerCase() + "/names" - ).openConnection(); - String text = new Scanner(connection.getInputStream()).useDelimiter("\\Z").next(); - Type listType = new TypeToken>() { - }.getType(); - List list = new Gson().fromJson(text, listType); - cache.put(uuid, list); - return list; - } catch (IOException e) { - e.printStackTrace(); + public NameFetcher(List uuids) { + this.uuids = ImmutableList.copyOf(uuids); + } + + @Override + public Map call() throws Exception { + Map uuidStringMap = new HashMap<>(); + for (UUID uuid : uuids) { + HttpURLConnection connection = (HttpURLConnection) new URL(PROFILE_URL + uuid.toString().replace("-", "")).openConnection(); + Map response = RedisBungee.getGson().fromJson(new InputStreamReader(connection.getInputStream()), new TypeToken>() { + }.getType()); + String name = response.get("name"); + if (name == null) { + continue; + } + String cause = response.get("cause"); + String errorMessage = response.get("errorMessage"); + if (cause != null && cause.length() > 0) { + throw new IllegalStateException(errorMessage); + } + uuidStringMap.put(uuid, name); } - return null; + return uuidStringMap; } } \ No newline at end of file