();
+ loaded = new HashMap<>();
_loadedFields.put(clazz, loaded);
} else {
loaded = _loadedFields.get(clazz);
@@ -146,19 +143,19 @@ public final class Reflection {
// If the field is loaded (or cached as not existing), return the relevant value, which might be null
return loaded.get(name);
}
- try {
- Field field = clazz.getDeclaredField(name);
- field.setAccessible(true);
- loaded.put(name, field);
- return field;
- } catch (Exception e) {
- // Error loading
- e.printStackTrace();
- // Cache field as not existing
- loaded.put(name, null);
- return null;
- }
- }
+ try {
+ Field field = clazz.getDeclaredField(name);
+ field.setAccessible(true);
+ loaded.put(name, field);
+ return field;
+ } catch (NoSuchFieldException | SecurityException e) {
+ // Error loading
+ e.printStackTrace();
+ // Cache field as not existing
+ loaded.put(name, null);
+ return null;
+ }
+ }
/**
* Retrieves a {@link Method} instance declared by the specified class with the specified name and argument types.
@@ -167,11 +164,9 @@ public final class Reflection {
*
* A global caching mechanism within this class is used to store method. Combined with synchronization, this guarantees that
* no method will be reflectively looked up twice.
- *
*
* If a method is deemed suitable for return, {@link Method#setAccessible(boolean) setAccessible} will be invoked with an argument of {@code true} before it is returned.
* This ensures that callers do not have to check or worry about Java access modifiers when dealing with the returned instance.
- *
*
* This method does not search superclasses of the specified type for methods with the specified signature.
* Callers wishing this behavior should use {@link Class#getDeclaredMethod(String, Class...)}.
@@ -192,7 +187,7 @@ public final class Reflection {
}
Map>, Method> loadedSignatures = loadedMethodNames.get(name);
- ArrayWrapper> wrappedArg = new ArrayWrapper>(args);
+ ArrayWrapper> wrappedArg = new ArrayWrapper<>(args);
if (loadedSignatures.containsKey(wrappedArg)) {
return loadedSignatures.get(wrappedArg);
}
diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/listeners/PlayerEvents.java b/Bukkit/src/main/java/com/plotsquared/bukkit/listeners/PlayerEvents.java
index 3cecf4b40..47a6ca301 100644
--- a/Bukkit/src/main/java/com/plotsquared/bukkit/listeners/PlayerEvents.java
+++ b/Bukkit/src/main/java/com/plotsquared/bukkit/listeners/PlayerEvents.java
@@ -28,16 +28,6 @@ import com.plotsquared.bukkit.object.BukkitPlayer;
import com.plotsquared.bukkit.util.BukkitUtil;
import com.plotsquared.listener.PlayerBlockEventType;
import com.plotsquared.listener.PlotListener;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map.Entry;
-import java.util.Objects;
-import java.util.Set;
-import java.util.UUID;
-import java.util.regex.Pattern;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
@@ -121,6 +111,17 @@ import org.bukkit.projectiles.BlockProjectileSource;
import org.bukkit.projectiles.ProjectileSource;
import org.bukkit.util.Vector;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Objects;
+import java.util.Set;
+import java.util.UUID;
+import java.util.regex.Pattern;
+
/**
* Player Events involving plots.
*
@@ -1467,6 +1468,7 @@ public class PlayerEvents extends PlotListener implements Listener {
case MINECART_TNT:
case BOAT:
return checkEntity(plot, Flags.ENTITY_CAP, Flags.VEHICLE_CAP);
+ case POLAR_BEAR:
case RABBIT:
case SHEEP:
case MUSHROOM_COW:
diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/util/Metrics.java b/Bukkit/src/main/java/com/plotsquared/bukkit/util/Metrics.java
index aee5807e7..d1b30c50c 100644
--- a/Bukkit/src/main/java/com/plotsquared/bukkit/util/Metrics.java
+++ b/Bukkit/src/main/java/com/plotsquared/bukkit/util/Metrics.java
@@ -1,6 +1,5 @@
package com.plotsquared.bukkit.util;
-import com.intellectualcrafters.plot.PS;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
@@ -9,71 +8,38 @@ import org.bukkit.scheduler.BukkitTask;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
-import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.InvocationTargetException;
-import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.LinkedHashSet;
-import java.util.Set;
import java.util.UUID;
-import java.util.logging.Level;
import java.util.zip.GZIPOutputStream;
public class Metrics {
- /**
- * The current revision number.
- */
+ /** The current revision number. */
private static final int REVISION = 7;
- /**
- * The base url of the metrics domain.
- */
+ /** The base url of the metrics domain.*/
private static final String BASE_URL = "http://report.mcstats.org";
- /**
- * The url used to report a server's status.
- */
+ /** The url used to report a server's status. */
private static final String REPORT_URL = "/plugin/%s";
- /**
- * Interval of time to ping (in minutes).
- */
+ /** Interval of time to ping (in minutes). */
private static final int PING_INTERVAL = 15;
- /**
- * The plugin this metrics submits for.
- */
+ /** The plugin this metrics submits for. */
private final Plugin plugin;
- /**
- * All of the custom graphs to submit to metrics.
- */
- private final Set graphs = Collections.synchronizedSet(new HashSet());
- /**
- * Unique server id.
- */
+ /** Unique server id. */
private final String guid;
- /**
- * Debug mode.
- */
- private final boolean debug;
- /**
- * The scheduled task.
- */
+ /** The scheduled task. */
private volatile BukkitTask task = null;
public Metrics(Plugin plugin) {
- if (plugin == null) {
- throw new IllegalArgumentException("Plugin cannot be null");
- }
this.plugin = plugin;
this.guid = UUID.randomUUID().toString();
- this.debug = false;
}
/**
@@ -186,38 +152,6 @@ public class Metrics {
return URLEncoder.encode(text, "UTF-8");
}
- /**
- * Construct and create a Graph that can be used to separate specific plotters to their own graphs on the metrics
- * website. Plotters can be added to the graph object returned.
- *
- * @param name The name of the graph
- *
- * @return Graph object created. Will never return NULL under normal circumstances unless bad parameters are given
- */
- public Graph createGraph(String name) {
- if (name == null) {
- throw new IllegalArgumentException("Graph name cannot be null");
- }
- // Construct the graph object
- Graph graph = new Graph(name);
- // Now we can add our graph
- this.graphs.add(graph);
- // and return back
- return graph;
- }
-
- /**
- * Add a Graph object to BukkitMetrics that represents data for the plugin that should be sent to the backend
- *
- * @param graph The name of the graph
- */
- public void addGraph(Graph graph) {
- if (graph == null) {
- throw new IllegalArgumentException("Graph cannot be null");
- }
- this.graphs.add(graph);
- }
-
/**
* Start measuring statistics. This will immediately create an async repeating task as the plugin and send the
* initial data to the metrics backend, and then after that it will post in increments of PING_INTERVAL * 1200
@@ -244,54 +178,12 @@ public class Metrics {
this.firstPost = false;
} catch (IOException e) {
e.printStackTrace();
- if (Metrics.this.debug) {
- Bukkit.getLogger().log(Level.INFO, "[Metrics] " + e.getMessage());
- }
}
}
}, 0, PING_INTERVAL * 1200);
return true;
}
- /**
- * Enables metrics for the server by setting "opt-out" to false in the config file and starting the metrics task.
- */
- public void enable() {
- // Enable Task, if it is not running
- if (this.task == null) {
- start();
- }
- }
-
- /**
- * Disables metrics for the server by setting "opt-out" to true in the config file and canceling the metrics task.
- */
- public void disable() {
- // Disable Task, if it is running
- if (this.task != null) {
- this.task.cancel();
- this.task = null;
- }
- }
-
- /**
- * Gets the File object of the config file that should be used to store
- * data such as the GUID and opt-out status.
- *
- * @return the File object for the config file
- */
- public File getConfigFile() {
- // I believe the easiest way to get the base folder (e.g craftbukkit set
- // via -P) for plugins to use
- // is to abuse the plugin object we already have
- // plugin.getDataFolder() => base/plugins/PluginA/
- // pluginsFolder => base/plugins/
- // The base is not necessarily relative to the startup directory.
- File pluginsFolder = this.plugin.getDataFolder().getParentFile();
- // return => base/plugins/PluginMetrics/config.yml
- return new File(new File(pluginsFolder, "PluginMetrics"), "config.yml");
- }
-
/**
* Generic method that posts a plugin to the metrics website.
*/
@@ -342,46 +234,12 @@ public class Metrics {
if (isPing) {
appendJSONPair(json, "ping", "1");
}
- if (!this.graphs.isEmpty()) {
- synchronized (this.graphs) {
- json.append(',');
- json.append('"');
- json.append("graphs");
- json.append('"');
- json.append(':');
- json.append('{');
- boolean firstGraph = true;
- for (Graph graph : this.graphs) {
- StringBuilder graphJson = new StringBuilder();
- graphJson.append('{');
- for (Plotter plotter : graph.getPlotters()) {
- appendJSONPair(graphJson, plotter.getColumnName(), Integer.toString(plotter.getValue()));
- }
- graphJson.append('}');
- if (!firstGraph) {
- json.append(',');
- }
- json.append(escapeJSON(graph.getName()));
- json.append(':');
- json.append(graphJson);
- firstGraph = false;
- }
- json.append('}');
- }
- }
// close json
json.append('}');
// Create the url
URL url = new URL(BASE_URL + String.format(REPORT_URL, urlEncode(pluginName)));
// Connect to the website
- URLConnection connection;
- // Mineshafter creates a socks proxy, so we can safely bypass it
- // It does not reroute POST requests so we need to go around it
- if (isMineshafterPresent()) {
- connection = url.openConnection(Proxy.NO_PROXY);
- } else {
- connection = url.openConnection();
- }
+ URLConnection connection = url.openConnection();
byte[] uncompressed = json.toString().getBytes();
byte[] compressed = gzip(json.toString());
// Headers
@@ -392,9 +250,6 @@ public class Metrics {
connection.addRequestProperty("Accept", "application/json");
connection.addRequestProperty("Connection", "close");
connection.setDoOutput(true);
- if (this.debug) {
- PS.debug("[Metrics] Prepared request for " + pluginName + " uncompressed=" + uncompressed.length + " compressed=" + compressed.length);
- }
try {
try (OutputStream os = connection.getOutputStream()) {
os.write(compressed);
@@ -403,9 +258,6 @@ public class Metrics {
String response;
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
response = reader.readLine();
- if (this.debug) {
- PS.debug("[Metrics] Response for " + pluginName + ": " + response);
- }
}
if (response == null || response.startsWith("ERR") || response.startsWith("7")) {
if (response == null) {
@@ -414,171 +266,7 @@ public class Metrics {
response = response.substring(response.startsWith("7,") ? 2 : 1);
}
throw new IOException(response);
- } else {
- // Is this the first update this hour?
- if ("1".equals(response) || response.contains("This is your first update this hour")) {
- synchronized (this.graphs) {
- for (Graph graph : this.graphs) {
- for (Plotter plotter : graph.getPlotters()) {
- plotter.reset();
- }
- }
- }
- }
}
- } catch (Exception e) {
- if (this.debug) {
- e.printStackTrace();
- }
- }
- }
-
- /**
- * Check if mineshafter is present. If it is, we need to bypass it to send POST requests
- *
- * @return true if mineshafter is installed on the server
- */
- private boolean isMineshafterPresent() {
- try {
- Class.forName("mineshafter.MineServer");
- return true;
- } catch (ClassNotFoundException ignored) {
- return false;
- }
- }
-
- /**
- * Represents a custom graph on the website
- */
- public static class Graph {
-
- /**
- * The graph's name, alphanumeric and spaces only :) If it does not comply to the above when submitted, it is
- * rejected
- */
- private final String name;
- /**
- * The set of plotters that are contained within this graph
- */
- private final Set plotters = new LinkedHashSet<>();
-
- private Graph(String name) {
- this.name = name;
- }
-
- /**
- * Gets the graph's name
- *
- * @return the Graph's name
- */
- public String getName() {
- return this.name;
- }
-
- /**
- * Add a plotter to the graph, which will be used to plot entries
- *
- * @param plotter the plotter to add to the graph
- */
- public void addPlotter(Plotter plotter) {
- this.plotters.add(plotter);
- }
-
- /**
- * Remove a plotter from the graph
- *
- * @param plotter the plotter to remove from the graph
- */
- public void removePlotter(Plotter plotter) {
- this.plotters.remove(plotter);
- }
-
- /**
- * Gets an unmodifiable set of the plotter objects in the graph
- *
- * @return an unmodifiable {@link Set} of the plotter objects
- */
- public Set getPlotters() {
- return Collections.unmodifiableSet(this.plotters);
- }
-
- @Override
- public int hashCode() {
- return this.name.hashCode();
- }
-
- @Override
- public boolean equals(Object object) {
- if (!(object instanceof Graph)) {
- return false;
- }
- Graph graph = (Graph) object;
- return graph.name.equals(this.name);
- }
-
- }
-
- /**
- * Interface used to collect custom data for a plugin
- */
- public abstract static class Plotter {
-
- /**
- * The plot's name
- */
- private final String name;
-
- /**
- * Construct a plotter with the default plot name
- */
- public Plotter() {
- this("Default");
- }
-
- /**
- * Construct a plotter with a specific plot name
- *
- * @param name the name of the plotter to use, which will show up on the website
- */
- public Plotter(String name) {
- this.name = name;
- }
-
- /**
- * Get the current value for the plotted point. Since this function defers to an external function it may or may
- * not return immediately thus cannot be guaranteed to be thread friendly or safe. This function can be called
- * from any thread so care should be taken when accessing resources that need to be synchronized.
- *
- * @return the current value for the point to be plotted.
- */
- public abstract int getValue();
-
- /**
- * Get the column name for the plotted point
- *
- * @return the plotted point's column name
- */
- public String getColumnName() {
- return this.name;
- }
-
- /**
- * Called after the website graphs have been updated
- */
- public void reset() {}
-
- @Override
- public int hashCode() {
- return getColumnName().hashCode();
- }
-
- @Override
- public boolean equals(Object object) {
- if (!(object instanceof Plotter)) {
- return false;
- }
- Plotter plotter = (Plotter) object;
- return plotter.name.equals(this.name) && plotter.getValue() == getValue();
- }
+ } catch (IOException ignored) {}
}
}
\ No newline at end of file
diff --git a/Core/src/main/java/com/intellectualcrafters/plot/Platform.java b/Core/src/main/java/com/intellectualcrafters/plot/Platform.java
new file mode 100644
index 000000000..d9b461377
--- /dev/null
+++ b/Core/src/main/java/com/intellectualcrafters/plot/Platform.java
@@ -0,0 +1,9 @@
+package com.intellectualcrafters.plot;
+
+public enum Platform {
+ Bukkit,
+ Sponge,
+ Spigot,
+ Cauldron
+
+}
diff --git a/Core/src/main/java/com/intellectualcrafters/plot/commands/Auto.java b/Core/src/main/java/com/intellectualcrafters/plot/commands/Auto.java
index 2c8fc8cc1..5a9d19d05 100644
--- a/Core/src/main/java/com/intellectualcrafters/plot/commands/Auto.java
+++ b/Core/src/main/java/com/intellectualcrafters/plot/commands/Auto.java
@@ -118,7 +118,7 @@ public class Auto extends SubCommand {
}
if (EconHandler.manager != null && plotarea.USE_ECONOMY) {
Expression costExp = plotarea.PRICES.get("claim");
- double cost = costExp.evalute((double) currentPlots);
+ double cost = costExp.evaluate((double) currentPlots);
cost = (size_x * size_z) * cost;
if (cost > 0d) {
if (EconHandler.manager.getMoney(player) < cost) {
diff --git a/Core/src/main/java/com/intellectualcrafters/plot/commands/Claim.java b/Core/src/main/java/com/intellectualcrafters/plot/commands/Claim.java
index 39cafeca1..52d072cd6 100644
--- a/Core/src/main/java/com/intellectualcrafters/plot/commands/Claim.java
+++ b/Core/src/main/java/com/intellectualcrafters/plot/commands/Claim.java
@@ -50,7 +50,7 @@ public class Claim extends SubCommand {
PlotArea world = plot.getArea();
if ((EconHandler.manager != null) && world.USE_ECONOMY) {
Expression costExr = world.PRICES.get("claim");
- double cost = costExr.evalute((double) currentPlots);
+ double cost = costExr.evaluate((double) currentPlots);
if (cost > 0d) {
if (EconHandler.manager.getMoney(player) < cost) {
return sendMessage(player, C.CANNOT_AFFORD_PLOT, "" + cost);
diff --git a/Core/src/main/java/com/intellectualcrafters/plot/commands/Delete.java b/Core/src/main/java/com/intellectualcrafters/plot/commands/Delete.java
index 78697bfd0..b26897149 100644
--- a/Core/src/main/java/com/intellectualcrafters/plot/commands/Delete.java
+++ b/Core/src/main/java/com/intellectualcrafters/plot/commands/Delete.java
@@ -56,7 +56,7 @@ public class Delete extends SubCommand {
plot.removeRunning();
if ((EconHandler.manager != null) && plotArea.USE_ECONOMY) {
Expression valueExr = plotArea.PRICES.get("sell");
- double value = plots.size() * valueExr.evalute((double) currentPlots);
+ double value = plots.size() * valueExr.evaluate((double) currentPlots);
if (value > 0d) {
EconHandler.manager.depositMoney(player, value);
sendMessage(player, C.ADDED_BALANCE, String.valueOf(value));
diff --git a/Core/src/main/java/com/intellectualcrafters/plot/commands/MainCommand.java b/Core/src/main/java/com/intellectualcrafters/plot/commands/MainCommand.java
index 0ce752e57..a23ef546b 100644
--- a/Core/src/main/java/com/intellectualcrafters/plot/commands/MainCommand.java
+++ b/Core/src/main/java/com/intellectualcrafters/plot/commands/MainCommand.java
@@ -141,7 +141,7 @@ public class MainCommand extends Command {
PlotArea area = player.getApplicablePlotArea();
if (area != null) {
Expression priceEval = area.PRICES.get(cmd.getFullId());
- Double price = priceEval != null ? priceEval.evalute(0d) : 0d;
+ Double price = priceEval != null ? priceEval.evaluate(0d) : 0d;
if (price != null && EconHandler.manager.getMoney(player) < price) {
if (failure != null) {
failure.run();
@@ -161,7 +161,7 @@ public class MainCommand extends Command {
PlotArea area = player.getApplicablePlotArea();
if (area != null) {
Expression priceEval = area.PRICES.get(cmd.getFullId());
- Double price = priceEval != null ? priceEval.evalute(0d) : 0d;
+ Double price = priceEval != null ? priceEval.evaluate(0d) : 0d;
if (price != 0d && EconHandler.manager.getMoney(player) < price) {
if (failure != null) {
failure.run();
diff --git a/Core/src/main/java/com/intellectualcrafters/plot/commands/Merge.java b/Core/src/main/java/com/intellectualcrafters/plot/commands/Merge.java
index bf0f2cb67..55d1161a9 100644
--- a/Core/src/main/java/com/intellectualcrafters/plot/commands/Merge.java
+++ b/Core/src/main/java/com/intellectualcrafters/plot/commands/Merge.java
@@ -74,7 +74,7 @@ public class Merge extends SubCommand {
final PlotArea plotArea = plot.getArea();
Expression priceExr = plotArea.PRICES.containsKey("merge") ? plotArea.PRICES.get("merge") : null;
final int size = plot.getConnectedPlots().size();
- final double price = priceExr == null ? 0d : priceExr.evalute((double) size);
+ final double price = priceExr == null ? 0d : priceExr.evaluate((double) size);
if (EconHandler.manager != null && plotArea.USE_ECONOMY && price > 0d && EconHandler.manager.getMoney(player) < price) {
sendMessage(player, C.CANNOT_AFFORD_MERGE, String.valueOf(price));
return false;
diff --git a/Core/src/main/java/com/intellectualcrafters/plot/config/C.java b/Core/src/main/java/com/intellectualcrafters/plot/config/C.java
index 978950114..ca28e3f36 100644
--- a/Core/src/main/java/com/intellectualcrafters/plot/config/C.java
+++ b/Core/src/main/java/com/intellectualcrafters/plot/config/C.java
@@ -75,7 +75,7 @@ public enum C {
*/
CONSOLE_JAVA_OUTDATED_1_8("&cYour version of java is outdated. It is highly recommended that you update to Java 8 as it increases performance "
+ "and security. PlotSquared will require Java 9 in a future update.", "static.console"),
- CONSOLE_PLEASE_ENABLE_METRICS("&dPlease enable metrics for PlotSquared. Using metrics improves plugin stabability, performance, and features. "
+ CONSOLE_PLEASE_ENABLE_METRICS("&dPlease enable metrics for PlotSquared. Using metrics improves plugin stability, performance, and features. "
+ "Bug fixes and new features are influenced on metrics.", "static.console"),
/*
* Confirm
@@ -368,7 +368,7 @@ public enum C {
/*
* Unknown Error
*/
- ERROR("$2An error occured: %s", "Errors"),
+ ERROR("$2An error occurred: %s", "Errors"),
// SETTINGS_PASTE_UPLOADED("$2settings.yml was uploaded to: $1%url%", "Paste"),
// LATEST_LOG_UPLOADED("$2latest.log was uploaded to: $1%url%", "Paste"),
DEBUG_REPORT_CREATED("$1Uploaded a full debug to: $1%url%", "Paste"),
diff --git a/Core/src/main/java/com/intellectualcrafters/plot/config/Settings.java b/Core/src/main/java/com/intellectualcrafters/plot/config/Settings.java
index b71f09805..1c31a1b20 100644
--- a/Core/src/main/java/com/intellectualcrafters/plot/config/Settings.java
+++ b/Core/src/main/java/com/intellectualcrafters/plot/config/Settings.java
@@ -296,7 +296,7 @@ public class Settings extends Config {
public static boolean WORLDEDIT_RESTRICTIONS = true;
@Comment("Allow economy to be used")
public static boolean ECONOMY = true;
- @Comment("Send anonymous usage statistics")
+ @Comment("Send anonymous usage statistics. Bukkit only setting.")
public static boolean METRICS = true;
@Comment("Expiry will clear old or simplistic plots")
public static boolean PLOT_EXPIRY = false;
diff --git a/Core/src/main/java/com/intellectualcrafters/plot/object/Expression.java b/Core/src/main/java/com/intellectualcrafters/plot/object/Expression.java
index 8cd0c0ce9..c3a3a3660 100644
--- a/Core/src/main/java/com/intellectualcrafters/plot/object/Expression.java
+++ b/Core/src/main/java/com/intellectualcrafters/plot/object/Expression.java
@@ -6,12 +6,12 @@ import com.intellectualcrafters.plot.commands.MainCommand;
import javax.script.ScriptException;
public abstract class Expression {
- public abstract T evalute(T arg);
+ public abstract T evaluate(T arg);
public static Expression constant(final U value) {
return new Expression() {
@Override
- public U evalute(U arg) {
+ public U evaluate(U arg) {
return value;
}
};
@@ -20,8 +20,8 @@ public abstract class Expression {
public static Expression linearDouble(final Double value) {
return new Expression() {
@Override
- public Double evalute(Double arg) {
- return (arg.doubleValue() * value.doubleValue());
+ public Double evaluate(Double arg) {
+ return (arg * value);
}
};
}
@@ -29,15 +29,15 @@ public abstract class Expression {
public static Expression doubleExpression(final String expression) {
try {
return constant(Double.parseDouble(expression));
- } catch (Exception ignore) {}
+ } catch (NumberFormatException ignore) {}
if (expression.endsWith("*{arg}")) {
try {
return linearDouble(Double.parseDouble(expression.substring(0, expression.length() - 6)));
- } catch (Exception ignore) {}
+ } catch (NumberFormatException ignore) {}
}
return new Expression() {
@Override
- public Double evalute(Double arg) {
+ public Double evaluate(Double arg) {
DebugExec exec = (DebugExec) MainCommand.getInstance().getCommand(DebugExec.class);
try {
return (Double) exec.getEngine().eval(expression.replace("{arg}", "" + arg));
diff --git a/Sponge/build.gradle b/Sponge/build.gradle
index 8b036dc26..5300dd804 100644
--- a/Sponge/build.gradle
+++ b/Sponge/build.gradle
@@ -19,12 +19,18 @@ apply plugin: 'net.minecrell.vanilla.server.library'
dependencies {
compile project(':Core')
compile 'org.spongepowered:spongeapi:5.0.0-SNAPSHOT'
+ compile 'net.minecrell.mcstats:statslite-sponge:0.2.2'
+
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
+ maven {
+ name = 'minecrell'
+ url = 'http://repo.minecrell.net/releases'
+ }
maven {
name = 'forge'
url = 'http://files.minecraftforge.net/maven'
@@ -51,9 +57,9 @@ processResources {
shadowJar {
dependencies {
include(dependency(':Core'))
- //include(dependency('org.mcstats.sponge:metrics:R8-SNAPSHOT'))
+ include dependency('net.minecrell.mcstats:statslite-sponge')
}
- //relocate 'org.mcstats', 'com.plotsquared.stats'
+ relocate 'net.minecrell.mcstats', 'com.plotsquared.util.mcstats'
archiveName = "${parent.name}-${project.name}-${parent.version}.jar"
destinationDir = file '../target'
}
diff --git a/Sponge/src/main/java/com/plotsquared/sponge/SpongeMain.java b/Sponge/src/main/java/com/plotsquared/sponge/SpongeMain.java
index 6d5671ebc..f4f1b7456 100644
--- a/Sponge/src/main/java/com/plotsquared/sponge/SpongeMain.java
+++ b/Sponge/src/main/java/com/plotsquared/sponge/SpongeMain.java
@@ -41,7 +41,6 @@ import com.plotsquared.sponge.util.SpongeEconHandler;
import com.plotsquared.sponge.util.SpongeEventUtil;
import com.plotsquared.sponge.util.SpongeHybridUtils;
import com.plotsquared.sponge.util.SpongeInventoryUtil;
-import com.plotsquared.sponge.util.SpongeMetrics;
import com.plotsquared.sponge.util.SpongeSchematicHandler;
import com.plotsquared.sponge.util.SpongeSetupUtils;
import com.plotsquared.sponge.util.SpongeTaskManager;
@@ -51,6 +50,7 @@ import com.plotsquared.sponge.util.block.SpongeLocalQueue;
import com.plotsquared.sponge.uuid.SpongeLowerOfflineUUIDWrapper;
import com.plotsquared.sponge.uuid.SpongeOnlineUUIDWrapper;
import com.plotsquared.sponge.uuid.SpongeUUIDHandler;
+import net.minecrell.mcstats.SpongeStatsLite;
import org.slf4j.Logger;
import org.spongepowered.api.Game;
import org.spongepowered.api.Server;
@@ -59,6 +59,7 @@ import org.spongepowered.api.config.ConfigDir;
import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.event.Listener;
import org.spongepowered.api.event.game.state.GameAboutToStartServerEvent;
+import org.spongepowered.api.event.game.state.GamePreInitializationEvent;
import org.spongepowered.api.plugin.Plugin;
import org.spongepowered.api.plugin.PluginContainer;
import org.spongepowered.api.profile.GameProfileManager;
@@ -90,6 +91,9 @@ public class SpongeMain implements IPlotMain {
@Inject
private Game game;
+ @Inject
+ public SpongeStatsLite stats;
+
private Server server;
@Inject
@@ -98,8 +102,7 @@ public class SpongeMain implements IPlotMain {
private GameProfileManager resolver;
- // @Override
- public Logger getLogger() {
+ private Logger getLogger() {
return this.logger;
}
@@ -122,6 +125,12 @@ public class SpongeMain implements IPlotMain {
return THIS;
}
+ @Listener
+ public void onPreInitialize(GamePreInitializationEvent event) {
+ getLogger().info("The metrics section in PlotSquared is ignored in favor of the actual metrics reporter configurations.");
+ this.stats.start();
+ }
+
@Listener
public void onServerAboutToStart(GameAboutToStartServerEvent event) {
THIS = this;
@@ -295,9 +304,6 @@ public class SpongeMain implements IPlotMain {
@Override
public void startMetrics() {
- SpongeMetrics metrics = new SpongeMetrics(this.game, this.plugin);
- metrics.start();
- PS.log(C.PREFIX.s() + "&6Metrics enabled.");
}
@Override