16.12.alpha

This commit is contained in:
RoboMWM 2019-06-14 01:07:12 -07:00
parent c4a0012959
commit 6403caafca
4 changed files with 106 additions and 96 deletions

View File

@ -6,7 +6,7 @@
<groupId>me.ryanhamshire</groupId> <groupId>me.ryanhamshire</groupId>
<artifactId>GriefPrevention</artifactId> <artifactId>GriefPrevention</artifactId>
<version>16.11.6.dev</version> <version>16.12.alpha.1</version>
<properties> <properties>
<maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.target>1.8</maven.compiler.target>

View File

@ -22,6 +22,7 @@ import java.util.ArrayList;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Tag;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
@ -285,15 +286,16 @@ public class Visualization
//helper method for above. allows visualization blocks to sit underneath partly transparent blocks like grass and fence //helper method for above. allows visualization blocks to sit underneath partly transparent blocks like grass and fence
private static boolean isTransparent(Block block, boolean waterIsTransparent) private static boolean isTransparent(Block block, boolean waterIsTransparent)
{ {
Material blockMaterial = block.getType();
//Blacklist //Blacklist
switch (block.getType()) switch (blockMaterial)
{ {
case SNOW: case SNOW:
return false; return false;
} }
//Whitelist TODO: some of this might already be included in isTransparent() //Whitelist TODO: some of this might already be included in isTransparent()
switch (block.getType()) switch (blockMaterial)
{ {
case AIR: case AIR:
case OAK_FENCE: case OAK_FENCE:
@ -309,11 +311,12 @@ public class Visualization
case DARK_OAK_FENCE_GATE: case DARK_OAK_FENCE_GATE:
case SPRUCE_FENCE_GATE: case SPRUCE_FENCE_GATE:
case JUNGLE_FENCE_GATE: case JUNGLE_FENCE_GATE:
case SIGN:
case WALL_SIGN:
return true; return true;
} }
if (Tag.SIGNS.isTagged(blockMaterial) || Tag.WALL_SIGNS.isTagged(blockMaterial))
return true;
return (waterIsTransparent && block.getType() == Material.WATER) || return (waterIsTransparent && block.getType() == Material.WATER) ||
block.getType().isTransparent(); block.getType().isTransparent();
} }

View File

@ -1,41 +1,32 @@
package me.ryanhamshire.GriefPrevention.metrics; package me.ryanhamshire.GriefPrevention.metrics;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.ServicePriority; import org.bukkit.plugin.ServicePriority;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.HttpsURLConnection;
import java.io.BufferedReader; import java.io.*;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.net.URL; import java.net.URL;
import java.util.ArrayList; import java.nio.charset.StandardCharsets;
import java.util.Collection; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import java.util.UUID;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.zip.GZIPOutputStream; import java.util.zip.GZIPOutputStream;
/** /**
* bStats collects some data for plugin authors. * bStats collects some data for plugin authors.
* * <p>
* Check out https://bStats.org/ to learn more about bStats! * Check out https://bStats.org/ to learn more about bStats!
*/ */
@SuppressWarnings({"WeakerAccess", "unused"})
public class Metrics { public class Metrics {
static { static {
@ -182,14 +173,9 @@ public class Metrics {
} }
// Nevertheless we want our code to run in the Bukkit main thread, so we have to use the Bukkit scheduler // Nevertheless we want our code to run in the Bukkit main thread, so we have to use the Bukkit scheduler
// Don't be afraid! The connection to the bStats server is still async, only the stats collection is sync ;) // Don't be afraid! The connection to the bStats server is still async, only the stats collection is sync ;)
Bukkit.getScheduler().runTask(plugin, new Runnable() { Bukkit.getScheduler().runTask(plugin, () -> submitData());
@Override
public void run() {
submitData();
}
});
} }
}, 1000*60*5, 1000*60*30); }, 1000 * 60 * 5, 1000 * 60 * 30);
// Submit the data every 30 minutes, first time after 5 minutes to give other plugins enough time to start // Submit the data every 30 minutes, first time after 5 minutes to give other plugins enough time to start
// WARNING: Changing the frequency has no effect but your plugin WILL be blocked/deleted! // WARNING: Changing the frequency has no effect but your plugin WILL be blocked/deleted!
// WARNING: Just don't do it! // WARNING: Just don't do it!
@ -201,24 +187,24 @@ public class Metrics {
* *
* @return The plugin specific data. * @return The plugin specific data.
*/ */
public JSONObject getPluginData() { public JsonObject getPluginData() {
JSONObject data = new JSONObject(); JsonObject data = new JsonObject();
String pluginName = plugin.getDescription().getName() + "-legacy"; String pluginName = plugin.getDescription().getName() + "-legacy";
String pluginVersion = plugin.getDescription().getVersion(); String pluginVersion = plugin.getDescription().getVersion();
data.put("pluginName", pluginName); // Append the name of the plugin data.addProperty("pluginName", pluginName); // Append the name of the plugin
data.put("pluginVersion", pluginVersion); // Append the version of the plugin data.addProperty("pluginVersion", pluginVersion); // Append the version of the plugin
JSONArray customCharts = new JSONArray(); JsonArray customCharts = new JsonArray();
for (CustomChart customChart : charts) { for (CustomChart customChart : charts) {
// Add the data of the custom 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 if (chart == null) { // If the chart is null, we skip it
continue; continue;
} }
customCharts.add(chart); customCharts.add(chart);
} }
data.put("customCharts", customCharts); data.add("customCharts", customCharts);
return data; return data;
} }
@ -228,7 +214,7 @@ public class Metrics {
* *
* @return The server specific data. * @return The server specific data.
*/ */
private JSONObject getServerData() { private JsonObject getServerData() {
// Minecraft specific data // Minecraft specific data
int playerAmount; int playerAmount;
try { try {
@ -243,6 +229,7 @@ public class Metrics {
} }
int onlineMode = Bukkit.getOnlineMode() ? 1 : 0; int onlineMode = Bukkit.getOnlineMode() ? 1 : 0;
String bukkitVersion = Bukkit.getVersion(); String bukkitVersion = Bukkit.getVersion();
String bukkitName = Bukkit.getName();
// OS/Java specific data // OS/Java specific data
String javaVersion = System.getProperty("java.version"); String javaVersion = System.getProperty("java.version");
@ -251,19 +238,20 @@ public class Metrics {
String osVersion = System.getProperty("os.version"); String osVersion = System.getProperty("os.version");
int coreCount = Runtime.getRuntime().availableProcessors(); 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.addProperty("playerAmount", playerAmount);
data.put("onlineMode", onlineMode); data.addProperty("onlineMode", onlineMode);
data.put("bukkitVersion", bukkitVersion); data.addProperty("bukkitVersion", bukkitVersion);
data.addProperty("bukkitName", bukkitName);
data.put("javaVersion", javaVersion); data.addProperty("javaVersion", javaVersion);
data.put("osName", osName); data.addProperty("osName", osName);
data.put("osArch", osArch); data.addProperty("osArch", osArch);
data.put("osVersion", osVersion); data.addProperty("osVersion", osVersion);
data.put("coreCount", coreCount); data.addProperty("coreCount", coreCount);
return data; return data;
} }
@ -272,9 +260,9 @@ public class Metrics {
* Collects the data and sends it afterwards. * Collects the data and sends it afterwards.
*/ */
private void submitData() { 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 // Search for all other bStats Metrics classes to get their plugin data
for (Class<?> service : Bukkit.getServicesManager().getKnownServices()) { for (Class<?> service : Bukkit.getServicesManager().getKnownServices()) {
try { try {
@ -282,13 +270,33 @@ public class Metrics {
for (RegisteredServiceProvider<?> provider : Bukkit.getServicesManager().getRegistrations(service)) { for (RegisteredServiceProvider<?> provider : Bukkit.getServicesManager().getRegistrations(service)) {
try { 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 (NullPointerException | NoSuchMethodException | IllegalAccessException | InvocationTargetException ignored) { }
} }
} catch (NoSuchFieldException ignored) { } } catch (NoSuchFieldException ignored) { }
} }
data.put("plugins", pluginData); data.add("plugins", pluginData);
// Create a new thread for the connection to the bStats server // Create a new thread for the connection to the bStats server
new Thread(new Runnable() { new Thread(new Runnable() {
@ -314,7 +322,7 @@ public class Metrics {
* @param data The data to send. * @param data The data to send.
* @throws Exception If the request failed. * @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) { if (data == null) {
throw new IllegalArgumentException("Data cannot be null!"); throw new IllegalArgumentException("Data cannot be null!");
} }
@ -372,7 +380,7 @@ public class Metrics {
} }
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(outputStream); GZIPOutputStream gzip = new GZIPOutputStream(outputStream);
gzip.write(str.getBytes("UTF-8")); gzip.write(str.getBytes(StandardCharsets.UTF_8));
gzip.close(); gzip.close();
return outputStream.toByteArray(); return outputStream.toByteArray();
} }
@ -397,16 +405,16 @@ public class Metrics {
this.chartId = chartId; this.chartId = chartId;
} }
private JSONObject getRequestJsonObject() { private JsonObject getRequestJsonObject() {
JSONObject chart = new JSONObject(); JsonObject chart = new JsonObject();
chart.put("chartId", chartId); chart.addProperty("chartId", chartId);
try { try {
JSONObject data = getChartData(); JsonObject data = getChartData();
if (data == null) { if (data == null) {
// If the data is null we don't send the chart. // If the data is null we don't send the chart.
return null; return null;
} }
chart.put("data", data); chart.add("data", data);
} catch (Throwable t) { } catch (Throwable t) {
if (logFailedRequests) { if (logFailedRequests) {
Bukkit.getLogger().log(Level.WARNING, "Failed to get data for custom chart with id " + chartId, t); Bukkit.getLogger().log(Level.WARNING, "Failed to get data for custom chart with id " + chartId, t);
@ -416,7 +424,7 @@ public class Metrics {
return chart; return chart;
} }
protected abstract JSONObject getChartData() throws Exception; protected abstract JsonObject getChartData() throws Exception;
} }
@ -439,14 +447,14 @@ public class Metrics {
} }
@Override @Override
protected JSONObject getChartData() throws Exception { protected JsonObject getChartData() throws Exception {
JSONObject data = new JSONObject(); JsonObject data = new JsonObject();
String value = callable.call(); String value = callable.call();
if (value == null || value.isEmpty()) { if (value == null || value.isEmpty()) {
// Null = skip the chart // Null = skip the chart
return null; return null;
} }
data.put("value", value); data.addProperty("value", value);
return data; return data;
} }
} }
@ -470,9 +478,9 @@ public class Metrics {
} }
@Override @Override
protected JSONObject getChartData() throws Exception { protected JsonObject getChartData() throws Exception {
JSONObject data = new JSONObject(); JsonObject data = new JsonObject();
JSONObject values = new JSONObject(); JsonObject values = new JsonObject();
Map<String, Integer> map = callable.call(); Map<String, Integer> map = callable.call();
if (map == null || map.isEmpty()) { if (map == null || map.isEmpty()) {
// Null = skip the chart // Null = skip the chart
@ -484,13 +492,13 @@ public class Metrics {
continue; // Skip this invalid continue; // Skip this invalid
} }
allSkipped = false; allSkipped = false;
values.put(entry.getKey(), entry.getValue()); values.addProperty(entry.getKey(), entry.getValue());
} }
if (allSkipped) { if (allSkipped) {
// Null = skip the chart // Null = skip the chart
return null; return null;
} }
data.put("values", values); data.add("values", values);
return data; return data;
} }
} }
@ -514,9 +522,9 @@ public class Metrics {
} }
@Override @Override
public JSONObject getChartData() throws Exception { public JsonObject getChartData() throws Exception {
JSONObject data = new JSONObject(); JsonObject data = new JsonObject();
JSONObject values = new JSONObject(); JsonObject values = new JsonObject();
Map<String, Map<String, Integer>> map = callable.call(); Map<String, Map<String, Integer>> map = callable.call();
if (map == null || map.isEmpty()) { if (map == null || map.isEmpty()) {
// Null = skip the chart // Null = skip the chart
@ -524,22 +532,22 @@ public class Metrics {
} }
boolean reallyAllSkipped = true; boolean reallyAllSkipped = true;
for (Map.Entry<String, Map<String, Integer>> entryValues : map.entrySet()) { for (Map.Entry<String, Map<String, Integer>> entryValues : map.entrySet()) {
JSONObject value = new JSONObject(); JsonObject value = new JsonObject();
boolean allSkipped = true; boolean allSkipped = true;
for (Map.Entry<String, Integer> valueEntry : map.get(entryValues.getKey()).entrySet()) { for (Map.Entry<String, Integer> valueEntry : map.get(entryValues.getKey()).entrySet()) {
value.put(valueEntry.getKey(), valueEntry.getValue()); value.addProperty(valueEntry.getKey(), valueEntry.getValue());
allSkipped = false; allSkipped = false;
} }
if (!allSkipped) { if (!allSkipped) {
reallyAllSkipped = false; reallyAllSkipped = false;
values.put(entryValues.getKey(), value); values.add(entryValues.getKey(), value);
} }
} }
if (reallyAllSkipped) { if (reallyAllSkipped) {
// Null = skip the chart // Null = skip the chart
return null; return null;
} }
data.put("values", values); data.add("values", values);
return data; return data;
} }
} }
@ -563,14 +571,14 @@ public class Metrics {
} }
@Override @Override
protected JSONObject getChartData() throws Exception { protected JsonObject getChartData() throws Exception {
JSONObject data = new JSONObject(); JsonObject data = new JsonObject();
int value = callable.call(); int value = callable.call();
if (value == 0) { if (value == 0) {
// Null = skip the chart // Null = skip the chart
return null; return null;
} }
data.put("value", value); data.addProperty("value", value);
return data; return data;
} }
@ -595,9 +603,9 @@ public class Metrics {
} }
@Override @Override
protected JSONObject getChartData() throws Exception { protected JsonObject getChartData() throws Exception {
JSONObject data = new JSONObject(); JsonObject data = new JsonObject();
JSONObject values = new JSONObject(); JsonObject values = new JsonObject();
Map<String, Integer> map = callable.call(); Map<String, Integer> map = callable.call();
if (map == null || map.isEmpty()) { if (map == null || map.isEmpty()) {
// Null = skip the chart // Null = skip the chart
@ -609,13 +617,13 @@ public class Metrics {
continue; // Skip this invalid continue; // Skip this invalid
} }
allSkipped = false; allSkipped = false;
values.put(entry.getKey(), entry.getValue()); values.addProperty(entry.getKey(), entry.getValue());
} }
if (allSkipped) { if (allSkipped) {
// Null = skip the chart // Null = skip the chart
return null; return null;
} }
data.put("values", values); data.add("values", values);
return data; return data;
} }
@ -640,20 +648,20 @@ public class Metrics {
} }
@Override @Override
protected JSONObject getChartData() throws Exception { protected JsonObject getChartData() throws Exception {
JSONObject data = new JSONObject(); JsonObject data = new JsonObject();
JSONObject values = new JSONObject(); JsonObject values = new JsonObject();
Map<String, Integer> map = callable.call(); Map<String, Integer> map = callable.call();
if (map == null || map.isEmpty()) { if (map == null || map.isEmpty()) {
// Null = skip the chart // Null = skip the chart
return null; return null;
} }
for (Map.Entry<String, Integer> entry : map.entrySet()) { for (Map.Entry<String, Integer> entry : map.entrySet()) {
JSONArray categoryValues = new JSONArray(); JsonArray categoryValues = new JsonArray();
categoryValues.add(entry.getValue()); categoryValues.add(entry.getValue());
values.put(entry.getKey(), categoryValues); values.add(entry.getKey(), categoryValues);
} }
data.put("values", values); data.add("values", values);
return data; return data;
} }
@ -678,9 +686,9 @@ public class Metrics {
} }
@Override @Override
protected JSONObject getChartData() throws Exception { protected JsonObject getChartData() throws Exception {
JSONObject data = new JSONObject(); JsonObject data = new JsonObject();
JSONObject values = new JSONObject(); JsonObject values = new JsonObject();
Map<String, int[]> map = callable.call(); Map<String, int[]> map = callable.call();
if (map == null || map.isEmpty()) { if (map == null || map.isEmpty()) {
// Null = skip the chart // Null = skip the chart
@ -692,19 +700,19 @@ public class Metrics {
continue; // Skip this invalid continue; // Skip this invalid
} }
allSkipped = false; allSkipped = false;
JSONArray categoryValues = new JSONArray(); JsonArray categoryValues = new JsonArray();
for (int categoryValue : entry.getValue()) { for (int categoryValue : entry.getValue()) {
categoryValues.add(categoryValue); categoryValues.add(categoryValue);
} }
values.put(entry.getKey(), categoryValues); values.add(entry.getKey(), categoryValues);
} }
if (allSkipped) { if (allSkipped) {
// Null = skip the chart // Null = skip the chart
return null; return null;
} }
data.put("values", values); data.add("values", values);
return data; return data;
} }
} }
} }

View File

@ -89,7 +89,6 @@ public class MetricsHandler
//CPU-intensive options //CPU-intensive options
addSimplePie("survival_nature_restoration", plugin.config_claims_survivalAutoNatureRestoration); addSimplePie("survival_nature_restoration", plugin.config_claims_survivalAutoNatureRestoration);
addSimplePie("portals_require_build_permission", plugin.config_claims_portalsRequirePermission);
addSimplePie("block_sky_trees", plugin.config_blockSkyTrees); addSimplePie("block_sky_trees", plugin.config_blockSkyTrees);
addSimplePie("limit_tree_growth", plugin.config_limitTreeGrowth); addSimplePie("limit_tree_growth", plugin.config_limitTreeGrowth);