();
+ 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/EntitySpawnListener.java b/Bukkit/src/main/java/com/plotsquared/bukkit/listeners/EntitySpawnListener.java
index 5c871eaf5..3c1ea45e1 100644
--- a/Bukkit/src/main/java/com/plotsquared/bukkit/listeners/EntitySpawnListener.java
+++ b/Bukkit/src/main/java/com/plotsquared/bukkit/listeners/EntitySpawnListener.java
@@ -1,5 +1,7 @@
package com.plotsquared.bukkit.listeners;
+import com.intellectualcrafters.plot.config.Settings;
+import com.intellectualcrafters.plot.flag.Flags;
import com.intellectualcrafters.plot.object.Location;
import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotArea;
@@ -14,14 +16,14 @@ public class EntitySpawnListener implements Listener {
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void creatureSpawnEvent(EntitySpawnEvent event) {
Entity entity = event.getEntity();
+ Location location = BukkitUtil.getLocation(entity.getLocation());
+ PlotArea area = location.getPlotArea();
+ if (area == null) {
+ return;
+ }
+ Plot plot = area.getOwnedPlotAbs(location);
switch (entity.getType()) {
case ENDER_CRYSTAL:
- Location location = BukkitUtil.getLocation(entity.getLocation());
- PlotArea area = location.getPlotArea();
- if (area == null) {
- return;
- }
- Plot plot = area.getOwnedPlotAbs(location);
if (plot == null) {
if (!area.MOB_SPAWNING) {
event.setCancelled(true);
@@ -32,5 +34,8 @@ public class EntitySpawnListener implements Listener {
event.setCancelled(true);
}
}
+ if (Settings.Done.RESTRICT_BUILDING && plot.hasFlag(Flags.DONE)) {
+ event.setCancelled(true);
+ }
}
}
diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/listeners/ForceFieldListener.java b/Bukkit/src/main/java/com/plotsquared/bukkit/listeners/ForceFieldListener.java
index a4258421c..d32185f23 100644
--- a/Bukkit/src/main/java/com/plotsquared/bukkit/listeners/ForceFieldListener.java
+++ b/Bukkit/src/main/java/com/plotsquared/bukkit/listeners/ForceFieldListener.java
@@ -8,14 +8,13 @@ import com.intellectualcrafters.plot.object.PlotPlayer;
import com.plotsquared.bukkit.object.BukkitPlayer;
import com.plotsquared.bukkit.util.BukkitUtil;
import org.bukkit.entity.Player;
-import org.bukkit.event.Listener;
import org.bukkit.util.Vector;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
-public class ForceFieldListener implements Listener {
+public class ForceFieldListener {
private static Set getNearbyPlayers(Player player, Plot plot) {
Set players = new HashSet<>();
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 2f673a3b8..b28e1eb6b 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.
*
@@ -483,7 +484,7 @@ public class PlayerEvents extends PlotListener implements Listener {
pp.deleteMeta("lastplot");
return;
}
- Plot now = area.getPlot(loc);
+ Plot now = area.getPlotAbs(loc);
Plot lastPlot = pp.getMeta("lastplot");
if (now == null) {
if (lastPlot != null && !plotExit(pp, lastPlot)) {
@@ -1470,6 +1471,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:
@@ -1848,6 +1850,9 @@ public class PlayerEvents extends PlotListener implements Listener {
@EventHandler(priority = EventPriority.MONITOR)
public void onLeave(PlayerQuitEvent event) {
+ if (TaskManager.TELEPORT_QUEUE.contains(event.getPlayer().getName())) {
+ TaskManager.TELEPORT_QUEUE.remove(event.getPlayer().getName());
+ }
PlotPlayer pp = BukkitUtil.getPlayer(event.getPlayer());
pp.unregister();
}
diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/util/BukkitChunkManager.java b/Bukkit/src/main/java/com/plotsquared/bukkit/util/BukkitChunkManager.java
index a73bb63c3..fef2434e0 100644
--- a/Bukkit/src/main/java/com/plotsquared/bukkit/util/BukkitChunkManager.java
+++ b/Bukkit/src/main/java/com/plotsquared/bukkit/util/BukkitChunkManager.java
@@ -17,14 +17,6 @@ import com.intellectualcrafters.plot.util.block.GlobalBlockQueue;
import com.intellectualcrafters.plot.util.block.LocalBlockQueue;
import com.intellectualcrafters.plot.util.block.ScopedLocalBlockQueue;
import com.plotsquared.bukkit.object.entity.EntityWrapper;
-import java.util.ArrayDeque;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.DyeColor;
@@ -57,6 +49,15 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
public class BukkitChunkManager extends ChunkManager {
public static boolean isIn(RegionWrapper region, int x, int z) {
@@ -546,6 +547,7 @@ public class BukkitChunkManager extends ChunkManager {
case BOAT:
count[4]++;
break;
+ 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/Bukkit/src/main/java/com/plotsquared/bukkit/uuid/FileUUIDHandler.java b/Bukkit/src/main/java/com/plotsquared/bukkit/uuid/FileUUIDHandler.java
index fdd8a9816..fcf007ea7 100644
--- a/Bukkit/src/main/java/com/plotsquared/bukkit/uuid/FileUUIDHandler.java
+++ b/Bukkit/src/main/java/com/plotsquared/bukkit/uuid/FileUUIDHandler.java
@@ -163,7 +163,7 @@ public class FileUUIDHandler extends UUIDHandlerImplementation {
ByteSource is = com.google.common.io.Files.asByteSource(file);
NbtFactory.NbtCompound compound = NbtFactory.fromStream(is, NbtFactory.StreamOptions.GZIP_COMPRESSION);
if (!compound.containsKey("bukkit")) {
- PS.debug("ERROR: Player data does not contain the the key \"bukkit\"");
+ PS.debug("ERROR: Player data (" + uuid.toString() + ".dat) does not contain the the key \"bukkit\"");
} else {
NbtFactory.NbtCompound bukkit = (NbtFactory.NbtCompound) compound.get("bukkit");
String name = (String) bukkit.get("lastKnownName");
diff --git a/Core/src/main/java/com/intellectualcrafters/plot/IPlotMain.java b/Core/src/main/java/com/intellectualcrafters/plot/IPlotMain.java
index 205677391..6c644b38b 100644
--- a/Core/src/main/java/com/intellectualcrafters/plot/IPlotMain.java
+++ b/Core/src/main/java/com/intellectualcrafters/plot/IPlotMain.java
@@ -236,12 +236,6 @@ public interface IPlotMain extends ILogger {
*/
void registerWorldEvents();
- /**
- * Get the name of the server.
- * @return the server name
- */
- String getServerName();
-
/**
* Get the class that will manage player titles.
* @return
diff --git a/Core/src/main/java/com/intellectualcrafters/plot/PS.java b/Core/src/main/java/com/intellectualcrafters/plot/PS.java
index 575959576..334535a10 100644
--- a/Core/src/main/java/com/intellectualcrafters/plot/PS.java
+++ b/Core/src/main/java/com/intellectualcrafters/plot/PS.java
@@ -171,7 +171,6 @@ public class PS {
this.IMP.registerPlayerEvents();
this.IMP.registerInventoryEvents();
this.IMP.registerPlotPlusEvents();
- this.IMP.registerForceFieldEvents();
}
// Required
this.IMP.registerWorldEvents();
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/Load.java b/Core/src/main/java/com/intellectualcrafters/plot/commands/Load.java
index b8073f9cd..301f0d87f 100644
--- a/Core/src/main/java/com/intellectualcrafters/plot/commands/Load.java
+++ b/Core/src/main/java/com/intellectualcrafters/plot/commands/Load.java
@@ -148,13 +148,7 @@ public class Load extends SubCommand {
String world = split[1];
PlotId id = PlotId.fromString(split[2] + ';' + split[3]);
String size = split[4];
- String server = split[5].replaceAll(".schematic", "");
- String color;
- if (PS.get().IMP.getServerName().replaceAll("[^A-Za-z0-9]", "").equals(server)) {
- color = "$4";
- } else {
- color = "$1";
- }
+ String color = "$4";
MainUtil.sendMessage(player,
"$3[$2" + (i + 1) + "$3] " + color + time + "$3 | " + color + world + ';' + id + "$3 | " + color + size + 'x' + size);
} catch (Exception e) {
@@ -191,7 +185,7 @@ public class Load extends SubCommand {
time -= minutes * 60;
toreturn.append(minutes + "m ");
}
- if (toreturn.equals("") || (time > 0)) {
+ if (toreturn.length() == 0 || (time > 0)) {
toreturn.append(time + "s ");
}
return toreturn.toString().trim();
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/commands/Save.java b/Core/src/main/java/com/intellectualcrafters/plot/commands/Save.java
index c2c99f258..90fb76050 100644
--- a/Core/src/main/java/com/intellectualcrafters/plot/commands/Save.java
+++ b/Core/src/main/java/com/intellectualcrafters/plot/commands/Save.java
@@ -63,12 +63,11 @@ public class Save extends SubCommand {
@Override
public void run() {
String time = (System.currentTimeMillis() / 1000) + "";
- String name = PS.get().IMP.getServerName().replaceAll("[^A-Za-z0-9]", "");
Location[] corners = plot.getCorners();
int size = (corners[1].getX() - corners[0].getX()) + 1;
PlotId id = plot.getId();
String world = plot.getArea().toString().replaceAll(";", "-").replaceAll("[^A-Za-z0-9]", "");
- final String file = time + '_' + world + '_' + id.x + '_' + id.y + '_' + size + '_' + name;
+ final String file = time + '_' + world + '_' + id.x + '_' + id.y + '_' + size;
UUID uuid = player.getUUID();
SchematicHandler.manager.upload(value, uuid, file, new RunnableVal() {
@Override
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 2b5546809..5996c768a 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/flag/Flags.java b/Core/src/main/java/com/intellectualcrafters/plot/flag/Flags.java
index bb9473c39..2be58cd58 100644
--- a/Core/src/main/java/com/intellectualcrafters/plot/flag/Flags.java
+++ b/Core/src/main/java/com/intellectualcrafters/plot/flag/Flags.java
@@ -114,7 +114,7 @@ public final class Flags {
}
};
public static final BooleanFlag SLEEP = new BooleanFlag("sleep");
- public static final TeleportDenyFlag TELEPORT_DENY = new TeleportDenyFlag("teleport-deny");
+ public static final TeleportDenyFlag DENY_TELEPORT = new TeleportDenyFlag("deny-teleport");
private static final HashMap> flags;
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/Core/src/main/java/com/intellectualcrafters/plot/util/EventUtil.java b/Core/src/main/java/com/intellectualcrafters/plot/util/EventUtil.java
index 60105e290..adeb69181 100644
--- a/Core/src/main/java/com/intellectualcrafters/plot/util/EventUtil.java
+++ b/Core/src/main/java/com/intellectualcrafters/plot/util/EventUtil.java
@@ -68,6 +68,7 @@ public abstract class EventUtil {
}
}
if (PS.get().update != null && Permissions.hasPermission(player, C.PERMISSION_ADMIN_UPDATE) && Settings.Enabled_Components.UPDATER) {
+ MainUtil.sendMessage(player,C.CONSOLE_JAVA_OUTDATED_1_8.s());
MainUtil.sendMessage(player, "&6An update for PlotSquared is available: &7/plot update");
}
final Plot plot = player.getCurrentPlot();
diff --git a/Core/src/main/java/com/plotsquared/listener/PlotListener.java b/Core/src/main/java/com/plotsquared/listener/PlotListener.java
index a9ac3e5ab..8b9fc1ced 100644
--- a/Core/src/main/java/com/plotsquared/listener/PlotListener.java
+++ b/Core/src/main/java/com/plotsquared/listener/PlotListener.java
@@ -207,7 +207,8 @@ public class PlotListener {
for (UUID uuid : plot.getOwners()) {
PlotPlayer owner = UUIDHandler.getPlayer(uuid);
if ((owner != null) && !owner.getUUID().equals(player.getUUID())) {
- MainUtil.sendMessage(player, C.NOTIFY_LEAVE.s().replace("%player", player.getName()).replace("%plot", plot.getId().toString()));
+ MainUtil.sendMessage(owner, C.NOTIFY_LEAVE.s().replace("%player", player.getName()).replace("%plot", plot.getId()
+ .toString()));
}
}
}
@@ -220,7 +221,7 @@ public class PlotListener {
PlotGameMode gameMode = player.getGameMode();
if (gameMode == PlotGameMode.SURVIVAL || gameMode == PlotGameMode.ADVENTURE) {
player.setFlight(false);
- } else if (player.getFlight() != true) {
+ } else if (!player.getFlight()) {
player.setFlight(true);
}
}
diff --git a/Sponge/build.gradle b/Sponge/build.gradle
index 4295fe4e7..5300dd804 100644
--- a/Sponge/build.gradle
+++ b/Sponge/build.gradle
@@ -14,17 +14,23 @@ buildscript {
}
}
-apply plugin: 'net.minecraftforge.gradle.forge'
+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'
@@ -35,7 +41,7 @@ repositories {
}
}
minecraft {
- version = "2014"
+ version = "1.10.2"
mappings = "snapshot_20160629"
runDir = 'run'
}
@@ -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 8e6641741..2e22f19b0 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,13 +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 java.io.File;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.UUID;
-import java.util.stream.Collectors;
+import net.minecrell.mcstats.SpongeStatsLite;
import org.slf4j.Logger;
import org.spongepowered.api.Game;
import org.spongepowered.api.Server;
@@ -66,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;
@@ -74,8 +68,16 @@ import org.spongepowered.api.world.gen.GenerationPopulator;
import org.spongepowered.api.world.gen.WorldGenerator;
import org.spongepowered.api.world.gen.WorldGeneratorModifier;
+import java.io.File;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
@Plugin(id = "plotsquared", name = "PlotSquared", description = "Easy, yet powerful Plot World generation and management.",
- url = "https://github.com/IntellectualSites/PlotSquared", version = "3.3.3")
+ url = "https://github.com/IntellectualSites/PlotSquared", version = "3.5.0-SNAPSHOT")
public class SpongeMain implements IPlotMain {
public static SpongeMain THIS;
@@ -89,6 +91,9 @@ public class SpongeMain implements IPlotMain {
@Inject
private Game game;
+ @Inject
+ public SpongeStatsLite stats;
+
private Server server;
@Inject
@@ -97,8 +102,7 @@ public class SpongeMain implements IPlotMain {
private GameProfileManager resolver;
- // @Override
- public Logger getLogger() {
+ private Logger getLogger() {
return this.logger;
}
@@ -121,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;
@@ -241,14 +251,11 @@ public class SpongeMain implements IPlotMain {
@Override
public void registerPlotPlusEvents() {
- // TODO Auto-generated method stub
PS.log("registerPlotPlusEvents is not implemented!");
}
@Override
public void registerForceFieldEvents() {
- // TODO Auto-generated method stub
- PS.log("registerForceFieldEvents is not implemented!");
}
@Override
@@ -292,16 +299,8 @@ public class SpongeMain implements IPlotMain {
Sponge.getEventManager().registerListeners(this, new WorldEvents());
}
- @Override
- public String getServerName() {
- throw new UnsupportedOperationException("NOT IMPLEMENTED YET");
- }
-
@Override
public void startMetrics() {
- SpongeMetrics metrics = new SpongeMetrics(this.game, this.plugin);
- metrics.start();
- PS.log(C.PREFIX.s() + "&6Metrics enabled.");
}
@Override
diff --git a/Sponge/src/main/java/com/plotsquared/sponge/generator/SpongeAugmentedGenerator.java b/Sponge/src/main/java/com/plotsquared/sponge/generator/SpongeAugmentedGenerator.java
index 172e2f7c1..91f45bbe4 100644
--- a/Sponge/src/main/java/com/plotsquared/sponge/generator/SpongeAugmentedGenerator.java
+++ b/Sponge/src/main/java/com/plotsquared/sponge/generator/SpongeAugmentedGenerator.java
@@ -5,7 +5,6 @@ import com.intellectualcrafters.plot.generator.AugmentedUtils;
import com.intellectualcrafters.plot.object.PlotBlock;
import com.intellectualcrafters.plot.util.block.DelegateLocalBlockQueue;
import com.plotsquared.sponge.util.SpongeUtil;
-import java.util.List;
import org.spongepowered.api.block.BlockState;
import org.spongepowered.api.world.World;
import org.spongepowered.api.world.extent.ImmutableBiomeArea;
@@ -13,6 +12,8 @@ import org.spongepowered.api.world.extent.MutableBlockVolume;
import org.spongepowered.api.world.gen.GenerationPopulator;
import org.spongepowered.api.world.gen.WorldGenerator;
+import java.util.List;
+
public class SpongeAugmentedGenerator implements GenerationPopulator {
private static SpongeAugmentedGenerator generator;
@@ -51,7 +52,7 @@ public class SpongeAugmentedGenerator implements GenerationPopulator {
@Override
public PlotBlock getBlock(int x, int y, int z) {
BlockState block = terrain.getBlock(bx + x, y, bz + z);
- return block == null ? PlotBlock.get(0, 0) : SpongeUtil.getPlotBlock(block);
+ return SpongeUtil.getPlotBlock(block);
}
@Override
diff --git a/Sponge/src/main/java/com/plotsquared/sponge/listener/ForceFieldListener.java b/Sponge/src/main/java/com/plotsquared/sponge/listener/ForceFieldListener.java
new file mode 100644
index 000000000..0b5e4c3ca
--- /dev/null
+++ b/Sponge/src/main/java/com/plotsquared/sponge/listener/ForceFieldListener.java
@@ -0,0 +1,97 @@
+package com.plotsquared.sponge.listener;
+
+import com.flowpowered.math.vector.Vector3d;
+import com.intellectualcrafters.plot.flag.Flags;
+import com.intellectualcrafters.plot.object.Location;
+import com.intellectualcrafters.plot.object.Plot;
+import com.intellectualcrafters.plot.object.PlotPlayer;
+import com.plotsquared.sponge.object.SpongePlayer;
+import com.plotsquared.sponge.util.SpongeUtil;
+import org.spongepowered.api.entity.Entity;
+import org.spongepowered.api.entity.EntityTypes;
+import org.spongepowered.api.entity.living.player.Player;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
+public class ForceFieldListener {
+
+ private static Set getNearbyPlayers(Player player, Plot plot) {
+ Set players = new HashSet<>();
+ for (Entity nearbyEntity : player.getNearbyEntities(entity -> entity.getType().equals(EntityTypes.PLAYER))) {
+ Player nearbyPlayer = (Player) nearbyEntity;
+ PlotPlayer plotPlayer;
+ if ((plotPlayer = SpongeUtil.getPlayer(nearbyPlayer)) == null || !plot.equals(plotPlayer.getCurrentPlot())) {
+ continue;
+ }
+ if (!plot.isAdded(plotPlayer.getUUID())) {
+ players.add(plotPlayer);
+ }
+
+ }
+ return players;
+ }
+
+ private static PlotPlayer hasNearbyPermitted(Player player, Plot plot) {
+ for (Entity nearbyEntity : player.getNearbyEntities(entity -> entity.getType().equals(EntityTypes.PLAYER))) {
+ Player nearbyPlayer = (Player) nearbyEntity;
+ PlotPlayer plotPlayer;
+ if ((plotPlayer = SpongeUtil.getPlayer(nearbyPlayer)) == null || !plot.equals(plotPlayer.getCurrentPlot())) {
+ continue;
+ }
+ if (plot.isAdded(plotPlayer.getUUID())) {
+ return plotPlayer;
+ }
+ }
+ return null;
+ }
+
+ private static Vector3d calculateVelocity(PlotPlayer player, PlotPlayer e) {
+ Location playerLocation = player.getLocationFull();
+ Location oPlayerLocation = e.getLocation();
+ double playerX = playerLocation.getX();
+ double playerY = playerLocation.getY();
+ double playerZ = playerLocation.getZ();
+ double oPlayerX = oPlayerLocation.getX();
+ double oPlayerY = oPlayerLocation.getY();
+ double oPlayerZ = oPlayerLocation.getZ();
+ double x = 0d;
+ if (playerX < oPlayerX) {
+ x = 1.0d;
+ } else if (playerX > oPlayerX) {
+ x = -1.0d;
+ }
+ double y = 0d;
+ if (playerY < oPlayerY) {
+ y = 0.5d;
+ } else if (playerY > oPlayerY) {
+ y = -0.5d;
+ }
+ double z = 0d;
+ if (playerZ < oPlayerZ) {
+ z = 1.0d;
+ } else if (playerZ > oPlayerZ) {
+ z = -1.0d;
+ }
+ return new Vector3d(x, y, z);
+ }
+
+ public static void handleForcefield(Player player, PlotPlayer plotPlayer, Plot plot) {
+ if (Flags.FORCEFIELD.isTrue(plot)) {
+ UUID uuid = plotPlayer.getUUID();
+ if (plot.isAdded(uuid)) {
+ Set players = getNearbyPlayers(player, plot);
+ for (PlotPlayer oPlayer : players) {
+ ((SpongePlayer) oPlayer).player.setVelocity(calculateVelocity(plotPlayer, oPlayer));
+ }
+ } else {
+ PlotPlayer oPlayer = hasNearbyPermitted(player, plot);
+ if (oPlayer == null) {
+ return;
+ }
+ player.setVelocity(calculateVelocity(oPlayer, plotPlayer));
+ }
+ }
+ }
+}
diff --git a/Sponge/src/main/java/com/plotsquared/sponge/listener/MainListener.java b/Sponge/src/main/java/com/plotsquared/sponge/listener/MainListener.java
index cd44889ee..c2d256c30 100644
--- a/Sponge/src/main/java/com/plotsquared/sponge/listener/MainListener.java
+++ b/Sponge/src/main/java/com/plotsquared/sponge/listener/MainListener.java
@@ -662,6 +662,7 @@ public class MainListener {
return;
}
} else if (now.equals(lastPlot)) {
+ ForceFieldListener.handleForcefield(player, pp, now);
return;
} else if (!PlotListener.plotEntry(pp, now)) {
MainUtil.sendMessage(pp, C.NO_PERMISSION_EVENT, C.PERMISSION_ADMIN_ENTRY_DENIED);
@@ -711,6 +712,7 @@ public class MainListener {
return;
}
} else if (now.equals(lastPlot)) {
+ ForceFieldListener.handleForcefield(player, pp, now);
return;
} else if (!PlotListener.plotEntry(pp, now)) {
MainUtil.sendMessage(pp, C.NO_PERMISSION_EVENT, C.PERMISSION_ADMIN_ENTRY_DENIED);
diff --git a/Sponge/src/main/java/com/plotsquared/sponge/object/SpongePlayer.java b/Sponge/src/main/java/com/plotsquared/sponge/object/SpongePlayer.java
index 8bc5fd9e4..840d3f5ad 100644
--- a/Sponge/src/main/java/com/plotsquared/sponge/object/SpongePlayer.java
+++ b/Sponge/src/main/java/com/plotsquared/sponge/object/SpongePlayer.java
@@ -1,6 +1,7 @@
package com.plotsquared.sponge.object;
import com.flowpowered.math.vector.Vector3d;
+import com.intellectualcrafters.plot.PS;
import com.intellectualcrafters.plot.commands.RequiredType;
import com.intellectualcrafters.plot.object.Location;
import com.intellectualcrafters.plot.object.PlotPlayer;
@@ -111,8 +112,12 @@ public class SpongePlayer extends PlotPlayer {
@Override
public void setCompassTarget(Location location) {
- TargetedLocationData target = this.player.getOrCreate(TargetedLocationData.class).get();
- target.set(Keys.TARGETED_LOCATION, SpongeUtil.getLocation(location).getPosition());
+ Optional target = this.player.getOrCreate(TargetedLocationData.class);
+ if (target.isPresent()) {
+ target.get().set(Keys.TARGETED_LOCATION, SpongeUtil.getLocation(location).getPosition());
+ } else {
+ PS.debug("Failed to set compass target.");
+ }
}
@Override
diff --git a/Sponge/src/main/java/com/plotsquared/sponge/util/SpongeSetupUtils.java b/Sponge/src/main/java/com/plotsquared/sponge/util/SpongeSetupUtils.java
index 061e913f0..e814beaf5 100644
--- a/Sponge/src/main/java/com/plotsquared/sponge/util/SpongeSetupUtils.java
+++ b/Sponge/src/main/java/com/plotsquared/sponge/util/SpongeSetupUtils.java
@@ -26,7 +26,7 @@ import java.util.Objects;
import java.util.Optional;
public class SpongeSetupUtils extends SetupUtils {
-
+
@Override
public void updateGenerators() {
if (!SetupUtils.generators.isEmpty()) {
@@ -48,7 +48,7 @@ public class SpongeSetupUtils extends SetupUtils {
}
}
}
-
+
@Override
public String getGenerator(PlotArea plotArea) {
if (SetupUtils.generators.isEmpty()) {
@@ -61,7 +61,7 @@ public class SpongeSetupUtils extends SetupUtils {
WorldGenerator generator = world.getWorldGenerator();
throw new UnsupportedOperationException("NOT IMPLEMENTED YET");
}
-
+
@Override
public String setupWorld(SetupObject object) {
SetupUtils.manager.updateGenerators();
@@ -146,7 +146,7 @@ public class SpongeSetupUtils extends SetupUtils {
.loadsOnStartup(true)
.keepsSpawnLoaded(true)
.dimension(DimensionTypes.OVERWORLD)
- .generator(GeneratorTypes.OVERWORLD)
+ .generator(GeneratorTypes.FLAT)
.usesMapFeatures(false)
.enabled(true)
.generatorModifiers(wgm)
diff --git a/Sponge/src/main/java/com/plotsquared/sponge/util/SpongeUtil.java b/Sponge/src/main/java/com/plotsquared/sponge/util/SpongeUtil.java
index e6cfd833b..7abab8bcb 100644
--- a/Sponge/src/main/java/com/plotsquared/sponge/util/SpongeUtil.java
+++ b/Sponge/src/main/java/com/plotsquared/sponge/util/SpongeUtil.java
@@ -17,16 +17,6 @@ import com.intellectualcrafters.plot.util.UUIDHandler;
import com.intellectualcrafters.plot.util.WorldUtil;
import com.plotsquared.sponge.SpongeMain;
import com.plotsquared.sponge.object.SpongePlayer;
-import java.io.IOException;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Optional;
import net.minecraft.block.Block;
import net.minecraft.world.biome.Biome;
import org.spongepowered.api.Sponge;
@@ -51,6 +41,17 @@ import org.spongepowered.api.world.biome.BiomeType;
import org.spongepowered.api.world.biome.BiomeTypes;
import org.spongepowered.api.world.extent.Extent;
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Optional;
+
public class SpongeUtil extends WorldUtil {
public static Cause CAUSE = Cause.of(NamedCause.source(Sponge.getPluginManager().fromInstance(SpongeMain.THIS).get()));
@@ -303,7 +304,8 @@ public class SpongeUtil extends WorldUtil {
StringComparison outer = new StringComparison();
return outer.new ComparisonResult(match, block);
- } catch (NumberFormatException ignored) {}
+ } catch (NumberFormatException ignored) {
+ }
return null;
}
diff --git a/Sponge/src/main/java/com/plotsquared/sponge/util/block/GenChunk.java b/Sponge/src/main/java/com/plotsquared/sponge/util/block/GenChunk.java
index be7c8fc9f..3f844386e 100644
--- a/Sponge/src/main/java/com/plotsquared/sponge/util/block/GenChunk.java
+++ b/Sponge/src/main/java/com/plotsquared/sponge/util/block/GenChunk.java
@@ -4,6 +4,7 @@ import com.intellectualcrafters.plot.object.ChunkWrapper;
import com.intellectualcrafters.plot.object.Location;
import com.intellectualcrafters.plot.object.PlotBlock;
import com.intellectualcrafters.plot.util.block.ScopedLocalBlockQueue;
+import com.plotsquared.sponge.SpongeMain;
import com.plotsquared.sponge.util.SpongeUtil;
import org.spongepowered.api.world.biome.BiomeType;
import org.spongepowered.api.world.extent.MutableBiomeArea;
diff --git a/Sponge/src/main/java/com/plotsquared/sponge/util/block/SpongeLocalQueue.java b/Sponge/src/main/java/com/plotsquared/sponge/util/block/SpongeLocalQueue.java
index f8f974daa..061baaf51 100644
--- a/Sponge/src/main/java/com/plotsquared/sponge/util/block/SpongeLocalQueue.java
+++ b/Sponge/src/main/java/com/plotsquared/sponge/util/block/SpongeLocalQueue.java
@@ -7,9 +7,6 @@ import com.intellectualcrafters.plot.util.StringMan;
import com.intellectualcrafters.plot.util.TaskManager;
import com.intellectualcrafters.plot.util.block.BasicLocalBlockQueue;
import com.plotsquared.sponge.util.SpongeUtil;
-import java.lang.reflect.Field;
-import java.util.Arrays;
-import java.util.HashSet;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.Entity;
@@ -33,6 +30,10 @@ import org.spongepowered.api.block.BlockTypes;
import org.spongepowered.api.world.World;
import org.spongepowered.api.world.biome.BiomeType;
+import java.lang.reflect.Field;
+import java.util.Arrays;
+import java.util.HashSet;
+
public class SpongeLocalQueue extends BasicLocalBlockQueue {
public SpongeLocalQueue(String world) {
diff --git a/build.gradle b/build.gradle
index c547fa0da..58eafd20c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -6,19 +6,19 @@ buildscript {
maven { url = "https://oss.sonatype.org/content/repositories/snapshots/"}
jcenter()
}
- dependencies {
+ dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.3'
classpath 'org.ajoberstar:grgit:1.7.0'
}
}
group = 'com.intellectualcrafters'
-def revision = ""
+
ext {
git = Grgit.open()
- revision = "-${git.head().abbreviatedId}"
+ revision = "${git.head().abbreviatedId}"
}
-version = "3.4.5-SNAPSHOT${revision}"
+version = "3.4.5-SNAPSHOT-${revision}"
description = """PlotSquared"""
subprojects {