diff --git a/build.gradle b/build.gradle index 24dade5..6a7734d 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ plugins { } group 'sh.okx' -version '3.5.6' +version '3.5.7' repositories { mavenCentral() @@ -29,7 +29,7 @@ repositories { dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' - compile 'org.spigotmc:spigot-api:1.13.2-R0.1-SNAPSHOT' + compile 'org.spigotmc:spigot-api:1.14.4-R0.1-SNAPSHOT' compile('net.milkbowl.vault:VaultAPI:1.7') { exclude group: 'org.bukkit' diff --git a/src/main/java/sh/okx/rankup/Metrics.java b/src/main/java/sh/okx/rankup/Metrics.java index ed89c6e..eb42ff3 100644 --- a/src/main/java/sh/okx/rankup/Metrics.java +++ b/src/main/java/sh/okx/rankup/Metrics.java @@ -1,13 +1,14 @@ package sh.okx.rankup; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; import org.bukkit.Bukkit; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.ServicePriority; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; import javax.net.ssl.HttpsURLConnection; import java.io.*; @@ -186,24 +187,24 @@ public class Metrics { * * @return The plugin specific data. */ - public JSONObject getPluginData() { - JSONObject data = new JSONObject(); + public JsonObject getPluginData() { + JsonObject data = new JsonObject(); String pluginName = plugin.getDescription().getName(); String pluginVersion = plugin.getDescription().getVersion(); - data.put("pluginName", pluginName); // Append the name of the plugin - data.put("pluginVersion", pluginVersion); // Append the version of the plugin - JSONArray customCharts = new JSONArray(); + data.addProperty("pluginName", pluginName); // Append the name of the plugin + data.addProperty("pluginVersion", pluginVersion); // Append the version of the plugin + JsonArray customCharts = new JsonArray(); for (CustomChart customChart : charts) { // Add the data of the custom charts - JSONObject chart = customChart.getRequestJsonObject(); + JsonObject chart = customChart.getRequestJsonObject(); if (chart == null) { // If the chart is null, we skip it continue; } customCharts.add(chart); } - data.put("customCharts", customCharts); + data.add("customCharts", customCharts); return data; } @@ -213,7 +214,7 @@ public class Metrics { * * @return The server specific data. */ - private JSONObject getServerData() { + private JsonObject getServerData() { // Minecraft specific data int playerAmount; try { @@ -228,6 +229,7 @@ public class Metrics { } int onlineMode = Bukkit.getOnlineMode() ? 1 : 0; String bukkitVersion = Bukkit.getVersion(); + String bukkitName = Bukkit.getName(); // OS/Java specific data String javaVersion = System.getProperty("java.version"); @@ -236,19 +238,20 @@ public class Metrics { String osVersion = System.getProperty("os.version"); int coreCount = Runtime.getRuntime().availableProcessors(); - JSONObject data = new JSONObject(); + JsonObject data = new JsonObject(); - data.put("serverUUID", serverUUID); + data.addProperty("serverUUID", serverUUID); - data.put("playerAmount", playerAmount); - data.put("onlineMode", onlineMode); - data.put("bukkitVersion", bukkitVersion); + data.addProperty("playerAmount", playerAmount); + data.addProperty("onlineMode", onlineMode); + data.addProperty("bukkitVersion", bukkitVersion); + data.addProperty("bukkitName", bukkitName); - data.put("javaVersion", javaVersion); - data.put("osName", osName); - data.put("osArch", osArch); - data.put("osVersion", osVersion); - data.put("coreCount", coreCount); + data.addProperty("javaVersion", javaVersion); + data.addProperty("osName", osName); + data.addProperty("osArch", osArch); + data.addProperty("osVersion", osVersion); + data.addProperty("coreCount", coreCount); return data; } @@ -257,9 +260,9 @@ public class Metrics { * Collects the data and sends it afterwards. */ private void submitData() { - final JSONObject data = getServerData(); + final JsonObject data = getServerData(); - JSONArray pluginData = new JSONArray(); + JsonArray pluginData = new JsonArray(); // Search for all other bStats Metrics classes to get their plugin data for (Class service : Bukkit.getServicesManager().getKnownServices()) { try { @@ -267,13 +270,33 @@ public class Metrics { for (RegisteredServiceProvider provider : Bukkit.getServicesManager().getRegistrations(service)) { try { - pluginData.add(provider.getService().getMethod("getPluginData").invoke(provider.getProvider())); + Object plugin = provider.getService().getMethod("getPluginData").invoke(provider.getProvider()); + if (plugin instanceof JsonObject) { + pluginData.add((JsonObject) plugin); + } else { // old bstats version compatibility + try { + Class jsonObjectJsonSimple = Class.forName("org.json.simple.JSONObject"); + if (plugin.getClass().isAssignableFrom(jsonObjectJsonSimple)) { + Method jsonStringGetter = jsonObjectJsonSimple.getDeclaredMethod("toJSONString"); + jsonStringGetter.setAccessible(true); + String jsonString = (String) jsonStringGetter.invoke(plugin); + JsonObject object = new JsonParser().parse(jsonString).getAsJsonObject(); + pluginData.add(object); + } + } catch (ClassNotFoundException e) { + // minecraft version 1.14+ + if (logFailedRequests) { + this.plugin.getLogger().log(Level.SEVERE, "Encountered unexpected exception", e); + } + continue; // continue looping since we cannot do any other thing. + } + } } catch (NullPointerException | NoSuchMethodException | IllegalAccessException | InvocationTargetException ignored) { } } } catch (NoSuchFieldException ignored) { } } - data.put("plugins", pluginData); + data.add("plugins", pluginData); // Create a new thread for the connection to the bStats server new Thread(new Runnable() { @@ -299,7 +322,7 @@ public class Metrics { * @param data The data to send. * @throws Exception If the request failed. */ - private static void sendData(Plugin plugin, JSONObject data) throws Exception { + private static void sendData(Plugin plugin, JsonObject data) throws Exception { if (data == null) { throw new IllegalArgumentException("Data cannot be null!"); } @@ -382,16 +405,16 @@ public class Metrics { this.chartId = chartId; } - private JSONObject getRequestJsonObject() { - JSONObject chart = new JSONObject(); - chart.put("chartId", chartId); + private JsonObject getRequestJsonObject() { + JsonObject chart = new JsonObject(); + chart.addProperty("chartId", chartId); try { - JSONObject data = getChartData(); + JsonObject data = getChartData(); if (data == null) { // If the data is null we don't send the chart. return null; } - chart.put("data", data); + chart.add("data", data); } catch (Throwable t) { if (logFailedRequests) { Bukkit.getLogger().log(Level.WARNING, "Failed to get data for custom chart with id " + chartId, t); @@ -401,7 +424,7 @@ public class Metrics { return chart; } - protected abstract JSONObject getChartData() throws Exception; + protected abstract JsonObject getChartData() throws Exception; } @@ -424,14 +447,14 @@ public class Metrics { } @Override - protected JSONObject getChartData() throws Exception { - JSONObject data = new JSONObject(); + protected JsonObject getChartData() throws Exception { + JsonObject data = new JsonObject(); String value = callable.call(); if (value == null || value.isEmpty()) { // Null = skip the chart return null; } - data.put("value", value); + data.addProperty("value", value); return data; } } @@ -455,9 +478,9 @@ public class Metrics { } @Override - protected JSONObject getChartData() throws Exception { - JSONObject data = new JSONObject(); - JSONObject values = new JSONObject(); + protected JsonObject getChartData() throws Exception { + JsonObject data = new JsonObject(); + JsonObject values = new JsonObject(); Map map = callable.call(); if (map == null || map.isEmpty()) { // Null = skip the chart @@ -469,13 +492,13 @@ public class Metrics { continue; // Skip this invalid } allSkipped = false; - values.put(entry.getKey(), entry.getValue()); + values.addProperty(entry.getKey(), entry.getValue()); } if (allSkipped) { // Null = skip the chart return null; } - data.put("values", values); + data.add("values", values); return data; } } @@ -499,9 +522,9 @@ public class Metrics { } @Override - public JSONObject getChartData() throws Exception { - JSONObject data = new JSONObject(); - JSONObject values = new JSONObject(); + public JsonObject getChartData() throws Exception { + JsonObject data = new JsonObject(); + JsonObject values = new JsonObject(); Map> map = callable.call(); if (map == null || map.isEmpty()) { // Null = skip the chart @@ -509,22 +532,22 @@ public class Metrics { } boolean reallyAllSkipped = true; for (Map.Entry> entryValues : map.entrySet()) { - JSONObject value = new JSONObject(); + JsonObject value = new JsonObject(); boolean allSkipped = true; for (Map.Entry valueEntry : map.get(entryValues.getKey()).entrySet()) { - value.put(valueEntry.getKey(), valueEntry.getValue()); + value.addProperty(valueEntry.getKey(), valueEntry.getValue()); allSkipped = false; } if (!allSkipped) { reallyAllSkipped = false; - values.put(entryValues.getKey(), value); + values.add(entryValues.getKey(), value); } } if (reallyAllSkipped) { // Null = skip the chart return null; } - data.put("values", values); + data.add("values", values); return data; } } @@ -548,14 +571,14 @@ public class Metrics { } @Override - protected JSONObject getChartData() throws Exception { - JSONObject data = new JSONObject(); + protected JsonObject getChartData() throws Exception { + JsonObject data = new JsonObject(); int value = callable.call(); if (value == 0) { // Null = skip the chart return null; } - data.put("value", value); + data.addProperty("value", value); return data; } @@ -580,9 +603,9 @@ public class Metrics { } @Override - protected JSONObject getChartData() throws Exception { - JSONObject data = new JSONObject(); - JSONObject values = new JSONObject(); + protected JsonObject getChartData() throws Exception { + JsonObject data = new JsonObject(); + JsonObject values = new JsonObject(); Map map = callable.call(); if (map == null || map.isEmpty()) { // Null = skip the chart @@ -594,13 +617,13 @@ public class Metrics { continue; // Skip this invalid } allSkipped = false; - values.put(entry.getKey(), entry.getValue()); + values.addProperty(entry.getKey(), entry.getValue()); } if (allSkipped) { // Null = skip the chart return null; } - data.put("values", values); + data.add("values", values); return data; } @@ -625,20 +648,20 @@ public class Metrics { } @Override - protected JSONObject getChartData() throws Exception { - JSONObject data = new JSONObject(); - JSONObject values = new JSONObject(); + protected JsonObject getChartData() throws Exception { + JsonObject data = new JsonObject(); + JsonObject values = new JsonObject(); Map map = callable.call(); if (map == null || map.isEmpty()) { // Null = skip the chart return null; } for (Map.Entry entry : map.entrySet()) { - JSONArray categoryValues = new JSONArray(); + JsonArray categoryValues = new JsonArray(); categoryValues.add(entry.getValue()); - values.put(entry.getKey(), categoryValues); + values.add(entry.getKey(), categoryValues); } - data.put("values", values); + data.add("values", values); return data; } @@ -663,9 +686,9 @@ public class Metrics { } @Override - protected JSONObject getChartData() throws Exception { - JSONObject data = new JSONObject(); - JSONObject values = new JSONObject(); + protected JsonObject getChartData() throws Exception { + JsonObject data = new JsonObject(); + JsonObject values = new JsonObject(); Map map = callable.call(); if (map == null || map.isEmpty()) { // Null = skip the chart @@ -677,17 +700,17 @@ public class Metrics { continue; // Skip this invalid } allSkipped = false; - JSONArray categoryValues = new JSONArray(); + JsonArray categoryValues = new JsonArray(); for (int categoryValue : entry.getValue()) { categoryValues.add(categoryValue); } - values.put(entry.getKey(), categoryValues); + values.add(entry.getKey(), categoryValues); } if (allSkipped) { // Null = skip the chart return null; } - data.put("values", values); + data.add("values", values); return data; } } diff --git a/src/main/java/sh/okx/rankup/Rankup.java b/src/main/java/sh/okx/rankup/Rankup.java index 8663f29..e6e95a7 100644 --- a/src/main/java/sh/okx/rankup/Rankup.java +++ b/src/main/java/sh/okx/rankup/Rankup.java @@ -164,10 +164,10 @@ public class Rankup extends JavaPlugin { return false; } - if (!(sender instanceof Player)) { - getLogger().severe("Failed to load Rankup"); - } else { + if (sender instanceof Player) { sender.sendMessage(ChatColor.RED + "Could not load Rankup, check console for more information."); + } else { + getLogger().severe("Failed to load Rankup"); } for (String line : errorMessage.split("\n")) { getLogger().severe(line); diff --git a/src/main/java/sh/okx/rankup/commands/InfoCommand.java b/src/main/java/sh/okx/rankup/commands/InfoCommand.java index f901c3d..d0cee56 100644 --- a/src/main/java/sh/okx/rankup/commands/InfoCommand.java +++ b/src/main/java/sh/okx/rankup/commands/InfoCommand.java @@ -31,8 +31,7 @@ public class InfoCommand implements CommandExecutor { return true; } } - - + PluginDescriptionFile description = plugin.getDescription(); String version = description.getVersion(); sender.sendMessage( diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/ItemRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/ItemRequirement.java index 78450f4..654c341 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/ItemRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/ItemRequirement.java @@ -37,7 +37,7 @@ public class ItemRequirement extends DeductibleRequirement { @Override public double getProgress(Player player) { Material material = Material.matchMaterial(getSub()); - return Arrays.stream(player.getInventory().getStorageContents()) + return Arrays.stream(player.getInventory().getContents()) .filter(item -> item != null && item.getType() == material) .mapToInt(ItemStack::getAmount).sum(); } diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/PlaceholderRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/PlaceholderRequirement.java index 3f12e59..7853cdd 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/PlaceholderRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/PlaceholderRequirement.java @@ -49,6 +49,12 @@ public class PlaceholderRequirement extends Requirement { throw new IllegalArgumentException("Invalid operation: " + parts[1]); } + @Override + public String getFullName() { + String[] parts = getValueString().split(" "); + return parts[0]; + } + @Override public Requirement clone() { return new PlaceholderRequirement(this); diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/advancedachievements/AdvancedAchievementsAchievementRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/advancedachievements/AdvancedAchievementsAchievementRequirement.java index c6633df..8dc87d9 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/advancedachievements/AdvancedAchievementsAchievementRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/advancedachievements/AdvancedAchievementsAchievementRequirement.java @@ -21,6 +21,11 @@ public class AdvancedAchievementsAchievementRequirement extends Requirement { return api.hasPlayerReceivedAchievement(player.getUniqueId(), getValueString()); } + @Override + public String getFullName() { + return super.getFullName() + "#" + getValueString(); + } + @Override public Requirement clone() { return new AdvancedAchievementsAchievementRequirement(this);