From a3af8202e5ea7495255b92d60ce50ba409018e4d Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Fri, 9 Dec 2016 23:03:51 +0200 Subject: [PATCH] 1.4.2 Possible bugfix, Advanced Achievements 4.0.3 Offline player support Added "* 1.0" to some calculations in analysis just to make sure returned values are doubles. Added AA 4.0.3 Offline player support and analysis feature. Ready for release once AA 4.0.3 is released. --- .../hooks/AdvancedAchievementsHook.java | 44 +++++++++++++++---- .../plan/command/utils/DataUtils.java | 8 ++-- 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/src/com/djrapitops/plan/command/hooks/AdvancedAchievementsHook.java b/src/com/djrapitops/plan/command/hooks/AdvancedAchievementsHook.java index c399b4f2f..9acd661ee 100644 --- a/src/com/djrapitops/plan/command/hooks/AdvancedAchievementsHook.java +++ b/src/com/djrapitops/plan/command/hooks/AdvancedAchievementsHook.java @@ -16,10 +16,34 @@ public class AdvancedAchievementsHook implements Hook { private Plan plugin; private AdvancedAchievements aAPlugin; private int totalAchievements; + private boolean usingUUID; public AdvancedAchievementsHook(Plan plugin) throws Exception, NoClassDefFoundError { this.plugin = plugin; this.aAPlugin = getPlugin(AdvancedAchievements.class); + String[] aAVersion = aAPlugin.getDescription().getVersion().split("."); + try { + double versionNumber = Double.parseDouble(aAVersion[0] + "." + aAVersion[1] + aAVersion[2]); + if (versionNumber >= 4.03) { + this.usingUUID = true; + } else { + this.usingUUID = false; + plugin.logError("Advanced Achievements 4.0.3 or above required for Offline players"); + } + } catch (Exception e) { + try { + double versionNumber = Double.parseDouble(aAVersion[0] + "." + aAVersion[1]); + if (versionNumber >= 4.03) { + this.usingUUID = true; + } else { + this.usingUUID = false; + plugin.logError("Advanced Achievements 4.0.3 or above required for Offline players"); + } + } catch (Exception e2) { + plugin.logToFile("AAHOOK\nError getting version number.\n" + e2); + } + } + for (NormalAchievements category : NormalAchievements.values()) { String categoryName = category.toString(); if (aAPlugin.getDisabledCategorySet().contains(categoryName)) { @@ -46,15 +70,19 @@ public class AdvancedAchievementsHook implements Hook { @Override public HashMap getData(String player) throws Exception { HashMap data = new HashMap<>(); - UUID uuid = UUIDFetcher.getUUIDOf(player); - Player p = getPlayer(player); - if (uuid != null) { - p = getPlayer(uuid); - } - if (p != null) { + if (totalAchievements > 0) { + UUID uuid = UUIDFetcher.getUUIDOf(player); try { - if (totalAchievements > 0) { - data.put("AAC-ACHIEVEMENTS", aAPlugin.getDb().getPlayerAchievementsAmount(p) + " / " + totalAchievements); + if (this.usingUUID) { + Player p = getPlayer(player); + if (uuid != null) { + p = getPlayer(uuid); + } + if (p != null) { + data.put("AAC-ACHIEVEMENTS", aAPlugin.getDb().getPlayerAchievementsAmount(p) + " / " + totalAchievements); + } + } else { + data.put("AAC-ACHIEVEMENTS", aAPlugin.getDb().getPlayerAchievementsAmount(uuid.toString()) + " / " + totalAchievements); } } catch (Exception e) { plugin.logToFile("AAHOOK-GetData\nFailed to get data\n" + e + "\nfor: " + player); diff --git a/src/com/djrapitops/plan/command/utils/DataUtils.java b/src/com/djrapitops/plan/command/utils/DataUtils.java index 4056993fa..c26383cba 100644 --- a/src/com/djrapitops/plan/command/utils/DataUtils.java +++ b/src/com/djrapitops/plan/command/utils/DataUtils.java @@ -92,7 +92,7 @@ public class DataUtils { } } - String[] numbers = {"ESS-HEALTH", "ESS-XP LEVEL", "FAC-POWER", "FAC-POWER PER HOUR", + String[] numbers = {"AAC-ACHIEVEMENTS","ESS-HEALTH", "ESS-XP LEVEL", "FAC-POWER", "FAC-POWER PER HOUR", "FAC-POWER PER DEATH", "SVO-VOTES", "ONT-TOTAL VOTES", "ONT-TOTAL REFERRED", "ECO-BALANCE"}; List numberKeys = new ArrayList<>(); numberKeys.addAll(Arrays.asList(numbers)); @@ -125,7 +125,7 @@ public class DataUtils { errorTypes.add("" + e); } } - analyzedData.put(dataKey, "" + (sum / playerData.size())); + analyzedData.put(dataKey, "" + (sum * 1.0 / playerData.size())); } else if (boolKeys.contains(dataKey)) { int amount = 0; @@ -139,7 +139,7 @@ public class DataUtils { errorTypes.add("" + e); } } - analyzedData.put(dataKey, "" + ((amount / playerData.size()) * 100) + "%"); + analyzedData.put(dataKey, "" + ((amount * 1.0 / playerData.size()) * 100) + "%"); } else if (timeKeys.contains(dataKey)) { Long time = Long.parseLong("0"); for (String dataPoint : playerDataLists.get(dataKey)) { @@ -150,7 +150,7 @@ public class DataUtils { errorTypes.add("" + e); } } - analyzedData.put(dataKey, "" + (time / playerData.size())); + analyzedData.put(dataKey, "" + (time * 1.0 / playerData.size())); } } if (errors > 0) {