diff --git a/pom.xml b/pom.xml
index 45e89a318..776c0c19e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,7 +8,7 @@
UTF-8
PlotSquared
- 3.2.22
+ 3.2.23
PlotSquared
jar
diff --git a/src/main/java/com/intellectualcrafters/plot/PS.java b/src/main/java/com/intellectualcrafters/plot/PS.java
index a5d67f3b3..428bd4be2 100644
--- a/src/main/java/com/intellectualcrafters/plot/PS.java
+++ b/src/main/java/com/intellectualcrafters/plot/PS.java
@@ -1336,17 +1336,17 @@ public class PS {
}
case "f":
case "floor": {
- config.set(base + "plot.floor", Arrays.asList(StringMan.join(Configuration.BLOCKLIST.parseString(value), ",").split(",")));
+ config.set(base + "plot.floor", new ArrayList(Arrays.asList(StringMan.join(Configuration.BLOCKLIST.parseString(value), ",").split(","))));
break;
}
case "m":
case "main": {
- config.set(base + "plot.filling", Arrays.asList(StringMan.join(Configuration.BLOCKLIST.parseString(value), ",").split(",")));
+ config.set(base + "plot.filling", new ArrayList(Arrays.asList(StringMan.join(Configuration.BLOCKLIST.parseString(value), ",").split(","))));
break;
}
case "w":
case "wall": {
- config.set(base + "wall.filling", Arrays.asList(StringMan.join(Configuration.BLOCKLIST.parseString(value), ",").split(",")));
+ config.set(base + "wall.filling", Configuration.BLOCK.parseString(value).toString());
break;
}
case "b":
diff --git a/src/main/java/com/intellectualcrafters/plot/commands/DebugExec.java b/src/main/java/com/intellectualcrafters/plot/commands/DebugExec.java
index 9c650ad2d..3d56b97a7 100644
--- a/src/main/java/com/intellectualcrafters/plot/commands/DebugExec.java
+++ b/src/main/java/com/intellectualcrafters/plot/commands/DebugExec.java
@@ -218,7 +218,7 @@ public class DebugExec extends SubCommand {
return false;
}
final String flag = args[1];
- for (final Plot plot : PS.get().getPlots()) {
+ for (final Plot plot : PS.get().getBasePlots()) {
if (FlagManager.getPlotFlagRaw(plot, flag) != null) {
FlagManager.removePlotFlag(plot, flag);
}
@@ -409,6 +409,49 @@ public class DebugExec extends SubCommand {
}
break;
}
+ case "allcmd": {
+ if (args.length < 3) {
+ C.COMMAND_SYNTAX.send(player, "/plot debugexec allcmd ");
+ return false;
+ }
+ long start = System.currentTimeMillis();
+ Command cmd = MainCommand.getInstance().getCommand(args[3]);
+ String[] params = Arrays.copyOfRange(args, 4, args.length);
+ if (args[1].equals("true")) {
+ Location loc = (Location) player.getMeta("location");
+ Plot plot = (Plot) player.getMeta("lastplot");
+ for (Plot current : PS.get().getBasePlots()) {
+ player.setMeta("location", current.getBottomAbs());
+ player.setMeta("lastplot", current);
+ cmd.onCommand(player, params);
+ }
+ if (loc == null) {
+ player.deleteMeta("location");
+ } else {
+ player.setMeta("location", loc);
+ }
+ if (plot == null) {
+ player.deleteMeta("lastplot");
+ } else {
+ player.setMeta("lastplot", plot);
+ }
+ player.sendMessage("&c> " + (System.currentTimeMillis() - start));
+ return true;
+ }
+ init();
+ scope.put("_2", params);
+ scope.put("_3", cmd);
+ script = "_1=PS.getBasePlots().iterator();while(_1.hasNext()){plot=_1.next();if(" + args[1] + "){PlotPlayer.setMeta(\"location\",plot.getBottomAbs());PlotPlayer.setMeta(\"lastplot\",plot);_3.onCommand(PlotPlayer,_2)}}";
+ break;
+ }
+ case "all": {
+ if (args.length < 3) {
+ C.COMMAND_SYNTAX.send(player, "/plot debugexec all ");
+ return false;
+ }
+ script = "_1=PS.getBasePlots().iterator();while(_1.hasNext()){plot=_1.next();if(" + args[1] + "){" + StringMan.join(Arrays.copyOfRange(args, 2, args.length), " ") + "}}";
+ break;
+ }
default: {
script = StringMan.join(args, " ");
}
diff --git a/src/main/java/com/intellectualcrafters/plot/commands/MainCommand.java b/src/main/java/com/intellectualcrafters/plot/commands/MainCommand.java
index cc9a81376..0eaf5577e 100644
--- a/src/main/java/com/intellectualcrafters/plot/commands/MainCommand.java
+++ b/src/main/java/com/intellectualcrafters/plot/commands/MainCommand.java
@@ -210,6 +210,8 @@ public class MainCommand extends CommandManager {
int help_index = -1;
String category = null;
Location loc = null;
+ Plot plot = null;
+ boolean tp = false;
switch (args.length) {
case 0: {
help_index = 0;
@@ -268,15 +270,21 @@ public class MainCommand extends CommandManager {
default: {
if (args.length >= 2) {
String world = player.getLocation().getWorld();
- Plot plot = Plot.fromString(world, args[0]);
- if (plot == null) {
+ Plot newPlot = Plot.fromString(world, args[0]);
+ if (newPlot == null) {
break;
}
- if (!ConsolePlayer.isConsole(player) && (!plot.world.equals(world) || plot.isDenied(player.getUUID())) && !Permissions.hasPermission(player, C.PERMISSION_ADMIN)) {
+ if (!ConsolePlayer.isConsole(player) && (!newPlot.world.equals(world) || newPlot.isDenied(player.getUUID())) && !Permissions.hasPermission(player, C.PERMISSION_ADMIN)) {
break;
}
+ // Save meta
loc = (Location) player.getMeta("location");
- player.setMeta("location", plot.getBottomAbs());
+ plot = (Plot) player.getMeta("lastplot");
+ tp = true;
+ // Set loc
+ player.setMeta("location", newPlot.getBottomAbs());
+ player.setMeta("lastplot", newPlot);
+ // Trim command
args = Arrays.copyOfRange(args, 1, args.length);
}
}
@@ -292,8 +300,18 @@ public class MainCommand extends CommandManager {
}
String fullCmd = StringMan.join(args, " ");
getInstance().handle(player, cmd + " " + fullCmd);
- if (loc != null) {
- player.setMeta("location", loc);
+ // Restore location
+ if (tp) {
+ if (loc == null) {
+ player.deleteMeta("location");
+ } else {
+ player.setMeta("location", loc);
+ }
+ if (plot == null) {
+ player.deleteMeta("lastplot");
+ } else {
+ player.setMeta("lastplot", plot);
+ }
}
return true;
}
diff --git a/src/main/java/com/intellectualcrafters/plot/object/ConsolePlayer.java b/src/main/java/com/intellectualcrafters/plot/object/ConsolePlayer.java
index 140b73f10..927565866 100644
--- a/src/main/java/com/intellectualcrafters/plot/object/ConsolePlayer.java
+++ b/src/main/java/com/intellectualcrafters/plot/object/ConsolePlayer.java
@@ -15,7 +15,6 @@ import com.intellectualcrafters.plot.util.PlotWeather;
public class ConsolePlayer extends PlotPlayer {
private static ConsolePlayer instance;
- private Location loc;
private final HashMap meta;
public static ConsolePlayer getConsole() {
@@ -38,8 +37,9 @@ public class ConsolePlayer extends PlotPlayer {
} else {
world = "world";
}
- loc = new Location(world, 0, 0, 0);
meta = new HashMap<>();
+ Location loc = new Location(world, 0, 0, 0);
+ setMeta("location", loc);
}
public static boolean isConsole(final PlotPlayer plr) {
@@ -53,12 +53,12 @@ public class ConsolePlayer extends PlotPlayer {
@Override
public Location getLocation() {
- return loc;
+ return (Location) getMeta("location");
}
@Override
public Location getLocationFull() {
- return loc;
+ return (Location) getMeta("location");
}
@Override
@@ -85,7 +85,7 @@ public class ConsolePlayer extends PlotPlayer {
public void teleport(final Location loc) {
final Plot plot = MainUtil.getPlot(loc);
setMeta("lastplot", plot);
- this.loc = loc;
+ setMeta("location", loc);
}
@Override
diff --git a/src/main/java/com/intellectualcrafters/plot/object/PlotPlayer.java b/src/main/java/com/intellectualcrafters/plot/object/PlotPlayer.java
index 401350c00..4bd7dfe9f 100644
--- a/src/main/java/com/intellectualcrafters/plot/object/PlotPlayer.java
+++ b/src/main/java/com/intellectualcrafters/plot/object/PlotPlayer.java
@@ -7,14 +7,15 @@ import java.util.concurrent.ConcurrentHashMap;
import com.intellectualcrafters.plot.PS;
import com.intellectualcrafters.plot.commands.RequiredType;
import com.intellectualcrafters.plot.config.Settings;
+import com.intellectualcrafters.plot.util.CmdConfirm;
import com.intellectualcrafters.plot.util.EventUtil;
import com.intellectualcrafters.plot.util.ExpireManager;
import com.intellectualcrafters.plot.util.MainUtil;
import com.intellectualcrafters.plot.util.PlotGamemode;
import com.intellectualcrafters.plot.util.PlotWeather;
+import com.intellectualcrafters.plot.util.SetupUtils;
import com.intellectualcrafters.plot.util.UUIDHandler;
import com.plotsquared.general.commands.CommandCaller;
-import com.plotsquared.listener.PlotListener;
/**
* The PlotPlayer class
@@ -321,17 +322,19 @@ public abstract class PlotPlayer implements CommandCaller {
public void unregister() {
final Plot plot = getCurrentPlot();
if (plot != null) {
- PlotListener.plotExit(this, plot);
+ EventUtil.manager.callLeave(this, plot);
}
- ExpireManager.dates.put(getUUID(), System.currentTimeMillis());
- EventUtil.unregisterPlayer(this);
if (Settings.DELETE_PLOTS_ON_BAN && isBanned()) {
for (final Plot owned : PS.get().getPlotsInWorld(getName())) {
owned.deletePlot(null);
PS.debug(String.format("&cPlot &6%s &cwas deleted + cleared due to &6%s&c getting banned", plot.getId(), getName()));
}
}
- UUIDHandler.getPlayers().remove(getName());
+ String name = getName();
+ ExpireManager.dates.put(getUUID(), System.currentTimeMillis());
+ SetupUtils.setupMap.remove(name);
+ CmdConfirm.removePending(name);
+ UUIDHandler.getPlayers().remove(name);
PS.get().IMP.unregister(this);
}
}
diff --git a/src/main/java/com/intellectualcrafters/plot/object/PlotWorld.java b/src/main/java/com/intellectualcrafters/plot/object/PlotWorld.java
index 5781a0c25..4f57f4866 100644
--- a/src/main/java/com/intellectualcrafters/plot/object/PlotWorld.java
+++ b/src/main/java/com/intellectualcrafters/plot/object/PlotWorld.java
@@ -284,6 +284,11 @@ public abstract class PlotWorld {
}
}
+ @Override
+ public String toString() {
+ return worldname;
+ }
+
/**
* Used for the /plot setup command Return null if you do not want to support this feature
*
diff --git a/src/main/java/com/intellectualcrafters/plot/util/EventUtil.java b/src/main/java/com/intellectualcrafters/plot/util/EventUtil.java
index f5c7e88f2..c9b090f89 100644
--- a/src/main/java/com/intellectualcrafters/plot/util/EventUtil.java
+++ b/src/main/java/com/intellectualcrafters/plot/util/EventUtil.java
@@ -4,7 +4,6 @@ import java.util.ArrayList;
import java.util.HashSet;
import java.util.UUID;
-import com.intellectualcrafters.plot.PS;
import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.flag.Flag;
import com.intellectualcrafters.plot.flag.FlagManager;
@@ -22,15 +21,6 @@ public abstract class EventUtil {
public static EventUtil manager = null;
- public static void unregisterPlayer(final PlotPlayer player) {
- final String name = player.getName();
- if (SetupUtils.setupMap.containsKey(name)) {
- SetupUtils.setupMap.remove(name);
- }
- CmdConfirm.removePending(name);
- PS.get().IMP.unregister(player);
- }
-
public abstract Rating callRating(final PlotPlayer player, final Plot plot, final Rating rating);
public abstract boolean callClaim(final PlotPlayer player, final Plot plot, final boolean auto);
diff --git a/src/main/java/com/intellectualcrafters/plot/util/UUIDHandlerImplementation.java b/src/main/java/com/intellectualcrafters/plot/util/UUIDHandlerImplementation.java
index 3004c965e..cdcb49e5b 100644
--- a/src/main/java/com/intellectualcrafters/plot/util/UUIDHandlerImplementation.java
+++ b/src/main/java/com/intellectualcrafters/plot/util/UUIDHandlerImplementation.java
@@ -108,27 +108,32 @@ public abstract class UUIDHandlerImplementation {
* lazy UUID conversion:
* - Useful if the person misconfigured the database, or settings before PlotMe conversion
*/
- if (!Settings.OFFLINE_MODE) {
- UUID offline = UUID.nameUUIDFromBytes(("OfflinePlayer:" + name.value).getBytes(Charsets.UTF_8));
- if (!unknown.contains(offline) && !name.value.equals(name.value.toLowerCase())) {
- offline = UUID.nameUUIDFromBytes(("OfflinePlayer:" + name.value).getBytes(Charsets.UTF_8));
- if (!unknown.contains(offline)) {
- offline = null;
- }
- }
- if (offline != null && !offline.equals(uuid)) {
- unknown.remove(offline);
- final Set plots = PS.get().getPlots(offline);
- if (plots.size() > 0) {
- for (final Plot plot : plots) {
- plot.owner = uuid;
+ if (!Settings.OFFLINE_MODE && unknown.size() > 0) {
+ TaskManager.runTaskAsync(new Runnable() {
+ @Override
+ public void run() {
+ UUID offline = UUID.nameUUIDFromBytes(("OfflinePlayer:" + name.value).getBytes(Charsets.UTF_8));
+ if (!unknown.contains(offline) && !name.value.equals(name.value.toLowerCase())) {
+ offline = UUID.nameUUIDFromBytes(("OfflinePlayer:" + name.value.toLowerCase()).getBytes(Charsets.UTF_8));
+ if (!unknown.contains(offline)) {
+ offline = null;
+ }
+ }
+ if (offline != null && !offline.equals(uuid)) {
+ unknown.remove(offline);
+ final Set plots = PS.get().getPlots(offline);
+ if (plots.size() > 0) {
+ for (final Plot plot : plots) {
+ plot.owner = uuid;
+ }
+ DBFunc.replaceUUID(offline, uuid);
+ PS.debug("&cDetected invalid UUID stored for: " + name.value);
+ PS.debug("&7 - Did you recently switch to online-mode storage without running `uuidconvert`?");
+ PS.debug("&6PlotSquared will update incorrect entries when the user logs in, or you can reconstruct your database.");
+ }
}
- DBFunc.replaceUUID(offline, uuid);
- PS.debug("&cDetected invalid UUID stored for: " + name.value);
- PS.debug("&7 - Did you recently switch to online-mode storage without running `uuidconvert`?");
- PS.debug("&6PlotSquared will update incorrect entries when the user logs in, or you can reconstruct your database.");
}
- }
+ });
}
try {
final UUID offline = uuidMap.put(name, uuid);
diff --git a/src/main/java/com/plotsquared/bukkit/listeners/PlayerEvents.java b/src/main/java/com/plotsquared/bukkit/listeners/PlayerEvents.java
index 53318f7c7..83ee7bfa0 100644
--- a/src/main/java/com/plotsquared/bukkit/listeners/PlayerEvents.java
+++ b/src/main/java/com/plotsquared/bukkit/listeners/PlayerEvents.java
@@ -74,9 +74,7 @@ import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerEggThrowEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent;
-import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerLoginEvent;
-import org.bukkit.event.player.PlayerLoginEvent.Result;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
@@ -96,7 +94,6 @@ import org.bukkit.util.Vector;
import com.intellectualcrafters.plot.PS;
import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.config.Settings;
-import com.intellectualcrafters.plot.database.DBFunc;
import com.intellectualcrafters.plot.flag.Flag;
import com.intellectualcrafters.plot.flag.FlagManager;
import com.intellectualcrafters.plot.object.Location;
@@ -407,57 +404,48 @@ public class PlayerEvents extends com.plotsquared.listener.PlotListener implemen
}
}
- @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
+ @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onConnect(final PlayerLoginEvent event) {
final Player player = event.getPlayer();
- final String name = player.getName();
+ BukkitUtil.getPlayer(event.getPlayer()).unregister();
final PlotPlayer pp = BukkitUtil.getPlayer(player);
- if (name.equals("PlotSquared") || pp.getUUID().equals(DBFunc.everyone)) {
- event.disallow(Result.KICK_WHITELIST, "This account is reserved");
- BukkitUtil.removePlayer(pp.getName());
- }
- }
-
- @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
- public void onJoin(final PlayerJoinEvent event) {
- final Player player = event.getPlayer();
- if (!player.hasPlayedBefore()) {
- player.saveData();
- }
- BukkitUtil.getPlayer(event.getPlayer()).unregister();;
- final PlotPlayer pp = BukkitUtil.getPlayer(player);
-
- // Set last location
- pp.setMeta("location", BukkitUtil.getLocation(player.getLocation()));
-
- final String username = pp.getName();
- final StringWrapper name = new StringWrapper(username);
+ // Now
+ String name = pp.getName();
+ StringWrapper sw = new StringWrapper(name);
final UUID uuid = pp.getUUID();
- UUIDHandler.add(name, uuid);
- ExpireManager.dates.put(uuid, System.currentTimeMillis());
- if (BukkitMain.worldEdit != null) {
- if (pp.getAttribute("worldedit")) {
- MainUtil.sendMessage(pp, C.WORLDEDIT_BYPASSED);
- }
+ UUIDHandler.add(sw, uuid);
+
+ Location loc = pp.getLocation();
+ final Plot plot = MainUtil.getPlotAbs(loc);
+ if (plot != null) {
+ plotEntry(pp, plot);
}
- if ((PS.get().update != null) && Permissions.hasPermission(pp, C.PERMISSION_ADMIN_UPDATE) && Settings.UPDATE_NOTIFICATIONS) {
- TaskManager.runTaskLater(new Runnable() {
- @Override
- public void run() {
+ // Delayed
+ {
+
+ }
+ // Async
+ TaskManager.runTaskLaterAsync(new Runnable() {
+ @Override
+ public void run() {
+ if (!player.hasPlayedBefore()) {
+ player.saveData();
+ }
+ ExpireManager.dates.put(uuid, System.currentTimeMillis());
+ if (BukkitMain.worldEdit != null) {
+ if (pp.getAttribute("worldedit")) {
+ MainUtil.sendMessage(pp, C.WORLDEDIT_BYPASSED);
+ }
+ }
+ if ((PS.get().update != null) && Permissions.hasPermission(pp, C.PERMISSION_ADMIN_UPDATE) && Settings.UPDATE_NOTIFICATIONS) {
MainUtil.sendMessage(pp, "&6An update for PlotSquared is available: &7/plot update");
}
- }, 20);
- }
- final Location loc = BukkitUtil.getLocation(player.getLocation());
- final Plot plot = MainUtil.getPlot(loc);
- if (plot == null) {
- return;
- }
- if (Settings.TELEPORT_ON_LOGIN) {
- MainUtil.teleportPlayer(pp, pp.getLocation(), plot);
- MainUtil.sendMessage(pp, C.TELEPORTED_TO_ROAD);
- }
- plotEntry(pp, plot);
+ if (Settings.TELEPORT_ON_LOGIN && plot != null) {
+ MainUtil.teleportPlayer(pp, pp.getLocation(), plot);
+ MainUtil.sendMessage(pp, C.TELEPORTED_TO_ROAD);
+ }
+ }
+ }, 20);
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
@@ -740,8 +728,7 @@ public class PlayerEvents extends com.plotsquared.listener.PlotListener implemen
}
}
if (Settings.PERMISSION_CACHING) {
- ((BukkitPlayer) pp).hasPerm = new HashSet<>();
- ((BukkitPlayer) pp).noPerm = new HashSet<>();
+ pp.deleteMeta("perm");
}
}
@@ -1225,9 +1212,8 @@ public class PlayerEvents extends com.plotsquared.listener.PlotListener implemen
if (entity instanceof Player) {
return;
}
- final Location loc = BukkitUtil.getLocation(event.getLocation());
- final String world = loc.getWorld();
- final PlotWorld plotworld = PS.get().getPlotWorld(world);
+ final Location loc = BukkitUtil.getLocation(entity.getLocation());
+ final PlotWorld plotworld = loc.getPlotWorld();
if (plotworld == null) {
return;
}
@@ -1235,18 +1221,28 @@ public class PlayerEvents extends com.plotsquared.listener.PlotListener implemen
return;
}
final CreatureSpawnEvent.SpawnReason reason = event.getSpawnReason();
- if (((reason == CreatureSpawnEvent.SpawnReason.SPAWNER_EGG) || (reason == CreatureSpawnEvent.SpawnReason.DISPENSE_EGG)) && !plotworld.SPAWN_EGGS) {
- event.setCancelled(true);
- return;
- } else if ((reason == CreatureSpawnEvent.SpawnReason.BREEDING) && !plotworld.SPAWN_BREEDING) {
- event.setCancelled(true);
- return;
- } else if ((reason == CreatureSpawnEvent.SpawnReason.CUSTOM) && !plotworld.SPAWN_CUSTOM && !(event.getEntityType().getTypeId() == 30)) {
- event.setCancelled(true);
- return;
+ switch (reason) {
+ case SPAWNER_EGG:
+ case DISPENSE_EGG:
+ if (!plotworld.SPAWN_EGGS) {
+ event.setCancelled(true);
+ return;
+ }
+ break;
+ case BREEDING:
+ if (!plotworld.SPAWN_BREEDING) {
+ event.setCancelled(true);
+ return;
+ }
+ break;
+ case CUSTOM:
+ if (!plotworld.SPAWN_CUSTOM && entity.getType().getTypeId() != 30) {
+ event.setCancelled(true);
+ return;
+ }
+ break;
}
-
- final Plot plot = MainUtil.getPlot(loc);
+ final Plot plot = MainUtil.getPlotAbs(loc);
if (checkEntity(entity, plot)) {
event.setCancelled(true);
return;
@@ -1342,116 +1338,116 @@ public class PlayerEvents extends com.plotsquared.listener.PlotListener implemen
}
public boolean checkEntity(final Entity entity, final Plot plot) {
- if ((plot != null) && (plot.owner != null)) {
- switch (entity.getType()) {
- case PLAYER: {
- return false;
- }
- case SMALL_FIREBALL:
- case FIREBALL:
- case DROPPED_ITEM:
- case EGG:
- case THROWN_EXP_BOTTLE:
- case SPLASH_POTION:
- case SNOWBALL:
- case ENDER_PEARL:
- case ARROW: {
- // projectile
- }
- case PRIMED_TNT:
- case FALLING_BLOCK: {
- // Block entities
- }
- case ENDER_CRYSTAL:
- case COMPLEX_PART:
- case FISHING_HOOK:
- case ENDER_SIGNAL:
- case EXPERIENCE_ORB:
- case LEASH_HITCH:
- case FIREWORK:
- case WEATHER:
- case LIGHTNING:
- case WITHER_SKULL:
- case UNKNOWN: {
- // non moving / unremovable
- return checkEntity(plot, "entity-cap");
- }
- case ITEM_FRAME:
- case PAINTING:
- case ARMOR_STAND: {
- return checkEntity(plot, "entity-cap", "misc-cap");
- // misc
- }
- case MINECART:
- case MINECART_CHEST:
- case MINECART_COMMAND:
- case MINECART_FURNACE:
- case MINECART_HOPPER:
- case MINECART_MOB_SPAWNER:
- case MINECART_TNT:
- case BOAT: {
- return checkEntity(plot, "entity-cap", "vehicle-cap");
- }
- case RABBIT:
- case SHEEP:
- case MUSHROOM_COW:
- case OCELOT:
- case PIG:
- case HORSE:
- case SQUID:
- case VILLAGER:
- case IRON_GOLEM:
- case WOLF:
- case CHICKEN:
- case COW:
- case SNOWMAN:
- case BAT: {
- // animal
- return checkEntity(plot, "entity-cap", "mob-cap", "animal-cap");
- }
- case BLAZE:
- case CAVE_SPIDER:
- case CREEPER:
- case ENDERMAN:
- case ENDERMITE:
- case ENDER_DRAGON:
- case GHAST:
- case GIANT:
- case GUARDIAN:
- case MAGMA_CUBE:
- case PIG_ZOMBIE:
- case SILVERFISH:
- case SKELETON:
- case SLIME:
- case SPIDER:
- case WITCH:
- case WITHER:
- case ZOMBIE: {
- // monster
- return checkEntity(plot, "entity-cap", "mob-cap", "hostile-cap");
- }
- default: {
- String[] types;
- if (entity instanceof LivingEntity) {
- if (entity instanceof Animals) {
- types = new String[] { "entity-cap", "mob-cap", "animal-cap" };
- } else if (entity instanceof Monster) {
- types = new String[] { "entity-cap", "mob-cap", "hostile-cap" };
- } else {
- types = new String[] { "entity-cap", "mob-cap" };
- }
- } else if (entity instanceof Vehicle) {
- types = new String[] { "entity-cap", "vehicle-cap" };
- } else if (entity instanceof Hanging) {
- types = new String[] { "entity-cap", "misc-cap" };
+ if (plot == null || plot.owner == null || plot.settings == null || (plot.settings.flags.size() == 0 && plot.getWorld().DEFAULT_FLAGS.size() == 0)) {
+ return false;
+ }
+ switch (entity.getType()) {
+ case PLAYER: {
+ return false;
+ }
+ case SMALL_FIREBALL:
+ case FIREBALL:
+ case DROPPED_ITEM:
+ case EGG:
+ case THROWN_EXP_BOTTLE:
+ case SPLASH_POTION:
+ case SNOWBALL:
+ case ENDER_PEARL:
+ case ARROW: {
+ // projectile
+ }
+ case PRIMED_TNT:
+ case FALLING_BLOCK: {
+ // Block entities
+ }
+ case ENDER_CRYSTAL:
+ case COMPLEX_PART:
+ case FISHING_HOOK:
+ case ENDER_SIGNAL:
+ case EXPERIENCE_ORB:
+ case LEASH_HITCH:
+ case FIREWORK:
+ case WEATHER:
+ case LIGHTNING:
+ case WITHER_SKULL:
+ case UNKNOWN: {
+ // non moving / unremovable
+ return checkEntity(plot, "entity-cap");
+ }
+ case ITEM_FRAME:
+ case PAINTING:
+ case ARMOR_STAND: {
+ return checkEntity(plot, "entity-cap", "misc-cap");
+ // misc
+ }
+ case MINECART:
+ case MINECART_CHEST:
+ case MINECART_COMMAND:
+ case MINECART_FURNACE:
+ case MINECART_HOPPER:
+ case MINECART_MOB_SPAWNER:
+ case MINECART_TNT:
+ case BOAT: {
+ return checkEntity(plot, "entity-cap", "vehicle-cap");
+ }
+ case RABBIT:
+ case SHEEP:
+ case MUSHROOM_COW:
+ case OCELOT:
+ case PIG:
+ case HORSE:
+ case SQUID:
+ case VILLAGER:
+ case IRON_GOLEM:
+ case WOLF:
+ case CHICKEN:
+ case COW:
+ case SNOWMAN:
+ case BAT: {
+ // animal
+ return checkEntity(plot, "entity-cap", "mob-cap", "animal-cap");
+ }
+ case BLAZE:
+ case CAVE_SPIDER:
+ case CREEPER:
+ case ENDERMAN:
+ case ENDERMITE:
+ case ENDER_DRAGON:
+ case GHAST:
+ case GIANT:
+ case GUARDIAN:
+ case MAGMA_CUBE:
+ case PIG_ZOMBIE:
+ case SILVERFISH:
+ case SKELETON:
+ case SLIME:
+ case SPIDER:
+ case WITCH:
+ case WITHER:
+ case ZOMBIE: {
+ // monster
+ return checkEntity(plot, "entity-cap", "mob-cap", "hostile-cap");
+ }
+ default: {
+ String[] types;
+ if (entity instanceof LivingEntity) {
+ if (entity instanceof Animals) {
+ types = new String[] { "entity-cap", "mob-cap", "animal-cap" };
+ } else if (entity instanceof Monster) {
+ types = new String[] { "entity-cap", "mob-cap", "hostile-cap" };
} else {
- types = new String[] { "entity-cap" };
+ types = new String[] { "entity-cap", "mob-cap" };
}
- return checkEntity(plot, types);
+ } else if (entity instanceof Vehicle) {
+ types = new String[] { "entity-cap", "vehicle-cap" };
+ } else if (entity instanceof Hanging) {
+ types = new String[] { "entity-cap", "misc-cap" };
+ } else {
+ types = new String[] { "entity-cap" };
}
+ return checkEntity(plot, types);
}
}
- return false;
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
diff --git a/src/main/java/com/plotsquared/bukkit/listeners/PlotPlusListener.java b/src/main/java/com/plotsquared/bukkit/listeners/PlotPlusListener.java
index 545457dc3..43b88245a 100644
--- a/src/main/java/com/plotsquared/bukkit/listeners/PlotPlusListener.java
+++ b/src/main/java/com/plotsquared/bukkit/listeners/PlotPlusListener.java
@@ -65,37 +65,41 @@ public class PlotPlusListener extends PlotListener implements Listener {
plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() {
@Override
public void run() {
- for (final Iterator> iter = healRunnable.entrySet().iterator(); iter.hasNext();) {
- final Entry entry = iter.next();
- final Interval value = entry.getValue();
- ++value.count;
- if (value.count == value.interval) {
- value.count = 0;
- final Player player = Bukkit.getPlayer(entry.getKey());
- if (player == null) {
- iter.remove();
- continue;
- }
- final double level = player.getHealth();
- if (level != value.max) {
- player.setHealth(Math.min(level + value.amount, value.max));
+ if (healRunnable.size() > 0) {
+ for (final Iterator> iter = healRunnable.entrySet().iterator(); iter.hasNext();) {
+ final Entry entry = iter.next();
+ final Interval value = entry.getValue();
+ ++value.count;
+ if (value.count == value.interval) {
+ value.count = 0;
+ final Player player = Bukkit.getPlayer(entry.getKey());
+ if (player == null) {
+ iter.remove();
+ continue;
+ }
+ final double level = player.getHealth();
+ if (level != value.max) {
+ player.setHealth(Math.min(level + value.amount, value.max));
+ }
}
}
}
- for (final Iterator> iter = feedRunnable.entrySet().iterator(); iter.hasNext();) {
- final Entry entry = iter.next();
- final Interval value = entry.getValue();
- ++value.count;
- if (value.count == value.interval) {
- value.count = 0;
- final Player player = Bukkit.getPlayer(entry.getKey());
- if (player == null) {
- iter.remove();
- continue;
- }
- final int level = player.getFoodLevel();
- if (level != value.max) {
- player.setFoodLevel(Math.min(level + value.amount, value.max));
+ if (feedRunnable.size() > 0) {
+ for (final Iterator> iter = feedRunnable.entrySet().iterator(); iter.hasNext();) {
+ final Entry entry = iter.next();
+ final Interval value = entry.getValue();
+ ++value.count;
+ if (value.count == value.interval) {
+ value.count = 0;
+ final Player player = Bukkit.getPlayer(entry.getKey());
+ if (player == null) {
+ iter.remove();
+ continue;
+ }
+ final int level = player.getFoodLevel();
+ if (level != value.max) {
+ player.setFoodLevel(Math.min(level + value.amount, value.max));
+ }
}
}
}
diff --git a/src/main/java/com/plotsquared/bukkit/object/BukkitPlayer.java b/src/main/java/com/plotsquared/bukkit/object/BukkitPlayer.java
index ad379eaf1..851e2c995 100644
--- a/src/main/java/com/plotsquared/bukkit/object/BukkitPlayer.java
+++ b/src/main/java/com/plotsquared/bukkit/object/BukkitPlayer.java
@@ -1,6 +1,5 @@
package com.plotsquared.bukkit.object;
-import java.util.HashSet;
import java.util.UUID;
import org.bukkit.Bukkit;
@@ -29,8 +28,6 @@ public class BukkitPlayer extends PlotPlayer {
private UUID uuid;
private String name;
private long last = 0;
- public HashSet hasPerm = new HashSet<>();
- public HashSet noPerm = new HashSet<>();
public boolean offline;
/**
diff --git a/target/PlotSquared-Bukkit.jar b/target/PlotSquared-Bukkit.jar
index c4711815f..1acf86e83 100644
Binary files a/target/PlotSquared-Bukkit.jar and b/target/PlotSquared-Bukkit.jar differ