diff --git a/Changelog.txt b/Changelog.txt index adccde3fd..b13646374 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -163,6 +163,8 @@ Version 2.2.0 Added API method to check if player parties are size capped Added API method to grab the level cap of a skill by its PrimarySkillType ENUM definition Added API method to check if a skill was being level capped +Version 2.1.55 + Fixed a bug that could occur when adding UUIDs to old outdated DBs Version 2.1.54 Fixed a bug where the Skill 'Understanding the Art' was preventing vanilla experience orbs from furnaces diff --git a/src/main/java/com/gmail/nossr50/runnables/database/UUIDUpdateAsyncTask.java b/src/main/java/com/gmail/nossr50/runnables/database/UUIDUpdateAsyncTask.java index f4b3af0b9..d56e9eec6 100644 --- a/src/main/java/com/gmail/nossr50/runnables/database/UUIDUpdateAsyncTask.java +++ b/src/main/java/com/gmail/nossr50/runnables/database/UUIDUpdateAsyncTask.java @@ -69,15 +69,18 @@ public class UUIDUpdateAsyncTask extends BukkitRunnable { } catch (Exception e) { // Handle 429 - if (e.getMessage().contains("429")) { - size += userNamesSection.size(); - try { - Thread.sleep(LIMIT_PERIOD); - } catch (InterruptedException ex) { - e.printStackTrace(); - return; + if(e.getMessage() != null) + { + if (e.getMessage().contains("429")) { + size += userNamesSection.size(); + try { + Thread.sleep(LIMIT_PERIOD); + } catch (InterruptedException ex) { + e.printStackTrace(); + return; + } + continue; } - continue; } plugin.getLogger().log(Level.SEVERE, "Unable to fetch UUIDs!", e); diff --git a/src/main/java/com/gmail/nossr50/util/uuid/UUIDFetcher.java b/src/main/java/com/gmail/nossr50/util/uuid/UUIDFetcher.java index 70c00888f..42e4a67a1 100644 --- a/src/main/java/com/gmail/nossr50/util/uuid/UUIDFetcher.java +++ b/src/main/java/com/gmail/nossr50/util/uuid/UUIDFetcher.java @@ -1,10 +1,12 @@ package com.gmail.nossr50.util.uuid; import com.google.common.collect.ImmutableList; +import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; +import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; @@ -28,6 +30,40 @@ public class UUIDFetcher implements Callable> { this(names, true); } + public Map call() throws Exception { + Map uuidMap = new HashMap(); + int requests = (int) Math.ceil(names.size() / PROFILES_PER_REQUEST); + for (int i = 0; i < requests; i++) { + HttpURLConnection connection = createConnection(); + + List nameSubList = names.subList(i * PROFILES_PER_REQUEST, Math.min((i + 1) * PROFILES_PER_REQUEST, names.size())); + JsonArray array = new JsonArray(); + + for(String name : nameSubList) + { + JsonPrimitive element = new JsonPrimitive(name); + array.add(element); + } + + Gson gson = new Gson(); + String body = array.toString(); + + writeBody(connection, body); + JsonObject[] jsonStreamArray = gson.fromJson(new InputStreamReader(connection.getInputStream()), JsonObject[].class); + + for (JsonObject jsonProfile : jsonStreamArray) { + String id = jsonProfile.get("id").getAsString(); + String name = jsonProfile.get("name").getAsString(); + UUID uuid = UUIDFetcher.getUUID(id); + uuidMap.put(name, uuid); + } + if (rateLimiting && i != requests - 1) { + Thread.sleep(RATE_LIMIT); + } + } + return uuidMap; + } + private static void writeBody(HttpURLConnection connection, String body) throws Exception { OutputStream stream = connection.getOutputStream(); stream.write(body.getBytes()); @@ -70,34 +106,4 @@ public class UUIDFetcher implements Callable> { public static UUID getUUIDOf(String name) throws Exception { return new UUIDFetcher(Collections.singletonList(name)).call().get(name); } - - public Map call() throws Exception { - Map uuidMap = new HashMap<>(); - int requests = (int) Math.ceil(names.size() / PROFILES_PER_REQUEST); - for (int i = 0; i < requests; i++) { - HttpURLConnection connection = createConnection(); - - List nameSubList = names.subList(i * PROFILES_PER_REQUEST, Math.min((i + 1) * PROFILES_PER_REQUEST, names.size())); - JsonArray array = new JsonArray(); - - for (String name : nameSubList) { - JsonPrimitive element = new JsonPrimitive(name); - array.add(element); - } - - String body = array.getAsString(); - writeBody(connection, body); - for (Object profile : array) { - JsonObject jsonProfile = (JsonObject) profile; - String id = jsonProfile.get("id").getAsString(); - String name = jsonProfile.get("name").getAsString(); - UUID uuid = UUIDFetcher.getUUID(id); - uuidMap.put(name, uuid); - } - if (rateLimiting && i != requests - 1) { - Thread.sleep(RATE_LIMIT); - } - } - return uuidMap; - } }