Browse Source

Merge branch 'master' of github.com:mcMMO-Dev/mcMMO into configurable

nossr50 6 years ago
parent
commit
71a2ea2a2e

+ 2 - 0
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

+ 11 - 8
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);

+ 36 - 30
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<Map<String, UUID>> {
         this(names, true);
     }
 
+    public Map<String, UUID> call() throws Exception {
+        Map<String, UUID> uuidMap = new HashMap<String, UUID>();
+        int requests = (int) Math.ceil(names.size() / PROFILES_PER_REQUEST);
+        for (int i = 0; i < requests; i++) {
+            HttpURLConnection connection = createConnection();
+
+            List<String> 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<Map<String, UUID>> {
     public static UUID getUUIDOf(String name) throws Exception {
         return new UUIDFetcher(Collections.singletonList(name)).call().get(name);
     }
-
-    public Map<String, UUID> call() throws Exception {
-        Map<String, UUID> uuidMap = new HashMap<>();
-        int requests = (int) Math.ceil(names.size() / PROFILES_PER_REQUEST);
-        for (int i = 0; i < requests; i++) {
-            HttpURLConnection connection = createConnection();
-
-            List<String> 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;
-    }
 }