diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/BukkitMain.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/BukkitMain.java index 1da734d56..0f230d246 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/BukkitMain.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/BukkitMain.java @@ -256,7 +256,7 @@ public class BukkitMain extends JavaPlugin implements Listener,IPlotMain { final Entity[] entities = chunk.getEntities(); Entity entity; for (int i = entities.length - 1; i >= 0; i--) { - if (!((entity = entities[i]) instanceof Player) && !PlotListener.isInPlot(entity.getLocation())) { + if (!((entity = entities[i]) instanceof Player) && !.isInPlot(entity.getLocation())) { entity.remove(); } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotSquared.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotSquared.java index 037d343a0..3cbc7e1ea 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotSquared.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotSquared.java @@ -118,6 +118,10 @@ public class PlotSquared { plotworlds.remove(world); } + public static HashMap> getAllPlotsRaw() { + return plots; + } + public static void setAllPlotsRaw(final LinkedHashMap> plots) { PlotSquared.plots = plots; } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlayerEvents.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlayerEvents.java index 37615c08a..8fb1f6ba2 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlayerEvents.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlayerEvents.java @@ -21,6 +21,7 @@ package com.intellectualcrafters.plot.listeners; +import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.List; @@ -82,6 +83,7 @@ import org.bukkit.event.vehicle.VehicleDestroyEvent; import org.bukkit.event.world.ChunkLoadEvent; import org.bukkit.event.world.StructureGrowEvent; import org.bukkit.event.world.WorldInitEvent; +import org.bukkit.generator.ChunkGenerator; import com.intellectualcrafters.plot.BukkitMain; import com.intellectualcrafters.plot.PlotSquared; @@ -93,6 +95,7 @@ import com.intellectualcrafters.plot.flag.Flag; import com.intellectualcrafters.plot.flag.FlagManager; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotBlock; +import com.intellectualcrafters.plot.object.PlotGenerator; import com.intellectualcrafters.plot.object.PlotId; import com.intellectualcrafters.plot.object.PlotManager; import com.intellectualcrafters.plot.object.PlotWorld; @@ -101,6 +104,7 @@ import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlotHelper; import com.intellectualcrafters.plot.util.UUIDHandler; import com.intellectualcrafters.plot.util.bukkit.BukkitTaskManager; +import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; /** * Player Events involving plots @@ -112,7 +116,14 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public static void onWorldInit(final WorldInitEvent event) { - PlotSquared.loadWorld(event.getWorld()); + World world = event.getWorld(); + ChunkGenerator gen = world.getGenerator(); + if (gen instanceof PlotGenerator) { + PlotSquared.loadWorld(world.getName(), (PlotGenerator) gen); + } + else { + PlotSquared.loadWorld(world.getName(), null); + } } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @@ -145,7 +156,7 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi // textures(event.getPlayer()); if (isInPlot(event.getPlayer().getLocation())) { if (Settings.TELEPORT_ON_LOGIN) { - event.getPlayer().teleport(PlotHelper.getPlotHomeDefault(getPlot(event.getPlayer()))); + BukkitUtil.teleportPlayer(player, PlotHelper.getPlotHomeDefault(getPlot(event.getPlayer()))); PlayerFunctions.sendMessage(event.getPlayer(), C.TELEPORTED_TO_ROAD); } else { plotEntry(event.getPlayer(), getCurrentPlot(event.getPlayer().getLocation())); @@ -225,7 +236,7 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi if (!isPlotWorld(world)) { return; } - final PlotWorld plotworld = PlotSquared.getWorldSettings(world); + final PlotWorld plotworld = PlotSquared.getWorldSettings(world.getName()); if (!plotworld.PLOT_CHAT) { return; } @@ -700,19 +711,16 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi @EventHandler public static void onLeave(final PlayerQuitEvent event) { - if (PlotSelection.currentSelection.containsKey(event.getPlayer().getName())) { - PlotSelection.currentSelection.remove(event.getPlayer().getName()); - } if (Setup.setupMap.containsKey(event.getPlayer().getName())) { Setup.setupMap.remove(event.getPlayer().getName()); } if (Settings.DELETE_PLOTS_ON_BAN && event.getPlayer().isBanned()) { - final Set plots = PlotSquared.getPlots(event.getPlayer()); + final Collection plots = PlotSquared.getPlots(event.getPlayer().getName()).values(); for (final Plot plot : plots) { PlotWorld plotworld = PlotSquared.getWorldSettings(plot.world); final PlotManager manager = PlotSquared.getPlotManager(plot.world); - manager.clearPlot(null, plotworld, plot, true, null); - DBFunc.delete(plot.world.getName(), plot); + manager.clearPlot(plotworld, plot, true, null); + DBFunc.delete(plot.world, plot); PlotSquared.log(String.format("&cPlot &6%s &cwas deleted + cleared due to &6%s&c getting banned", plot.getId(), event.getPlayer().getName())); } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlotListener.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlotListener.java index 3b0165a98..8c702e6b8 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlotListener.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlotListener.java @@ -25,15 +25,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.UUID; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.WeatherType; -import org.bukkit.World; -import org.bukkit.block.Biome; -import org.bukkit.entity.Player; - import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.Settings; @@ -41,6 +32,7 @@ import com.intellectualcrafters.plot.events.PlayerEnterPlotEvent; import com.intellectualcrafters.plot.events.PlayerLeavePlotEvent; import com.intellectualcrafters.plot.flag.Flag; import com.intellectualcrafters.plot.flag.FlagManager; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotId; import com.intellectualcrafters.plot.object.PlotWorld; @@ -56,7 +48,7 @@ import com.intellectualcrafters.plot.util.UUIDHandler; @SuppressWarnings({"unused", "deprecation"}) public class PlotListener { public static void textures(final Player p) { - if ((Settings.PLOT_SPECIFIC_RESOURCE_PACK.length() > 1) && isPlotWorld(p.getWorld())) { + if ((Settings.PLOT_SPECIFIC_RESOURCE_PACK.length() > 1) && isPlotWorld(p.getWorld().getName())) { p.setResourcePack(Settings.PLOT_SPECIFIC_RESOURCE_PACK); } } @@ -73,15 +65,11 @@ import com.intellectualcrafters.plot.util.UUIDHandler; return defaultValue; } - public static boolean isInPlot(final Player player) { - return PlayerFunctions.isInPlot(player); + public static boolean isInPlot(String world, int x, int y, int z) { + return (PlayerFunctions.getPlot(new Location(world, x, y, z)) != null); } - public static Plot getPlot(final Player player) { - return PlayerFunctions.getCurrentPlot(player); - } - - public static boolean isPlotWorld(final World world) { + public static boolean isPlotWorld(final String world) { return PlotSquared.isPlotWorld(world); } @@ -93,10 +81,6 @@ import com.intellectualcrafters.plot.util.UUIDHandler; return true; } - public static PlotWorld getPlotWorld(final World world) { - return PlotSquared.getWorldSettings(world); - } - private static String getName(final UUID id) { if (id == null) { return "none"; @@ -113,15 +97,15 @@ import com.intellectualcrafters.plot.util.UUIDHandler; } public static boolean enteredPlot(final Location l1, final Location l2) { - final PlotId p1 = PlayerFunctions.getPlot(new Location(l1.getWorld(), l1.getBlockX(), 0, l1.getBlockZ())); - final PlotId p2 = PlayerFunctions.getPlot(new Location(l2.getWorld(), l2.getBlockX(), 0, l2.getBlockZ())); + final PlotId p1 = PlayerFunctions.getPlot(new Location(l1.getWorld(), l1.getX(), 0, l1.getZ())); + final PlotId p2 = PlayerFunctions.getPlot(new Location(l2.getWorld(), l2.getX(), 0, l2.getZ())); return (p2 != null) && ((p1 == null) || !p1.equals(p2)); } public static boolean leftPlot(final Location l1, final Location l2) { - final PlotId p1 = PlayerFunctions.getPlot(new Location(l1.getWorld(), l1.getBlockX(), 0, l1.getBlockZ())); - final PlotId p2 = PlayerFunctions.getPlot(new Location(l2.getWorld(), l2.getBlockX(), 0, l2.getBlockZ())); + final PlotId p1 = PlayerFunctions.getPlot(new Location(l1.getWorld(), l1.getX(), 0, l1.getZ())); + final PlotId p2 = PlayerFunctions.getPlot(new Location(l2.getWorld(), l2.getX(), 0, l2.getZ())); return (p1 != null) && ((p2 == null) || !p1.equals(p2)); } @@ -138,11 +122,11 @@ import com.intellectualcrafters.plot.util.UUIDHandler; if (id == null) { return null; } - final World world = loc.getWorld(); + final String world = loc.getWorld(); if (PlotSquared.getPlots(world).containsKey(id)) { return PlotSquared.getPlots(world).get(id); } - return new Plot(id, null, Biome.FOREST, new ArrayList(), new ArrayList(), loc.getWorld().getName()); + return new Plot(id, null, Biome.FOREST, new ArrayList(), new ArrayList(), loc.getWorld()); } private static WeatherType getWeatherType(String str) { diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/AChunkManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/AChunkManager.java index b29fe35fc..1d0bd0ee2 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/AChunkManager.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/AChunkManager.java @@ -8,6 +8,7 @@ import java.util.List; + import com.intellectualcrafters.plot.object.ChunkLoc; import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; @@ -35,4 +36,8 @@ public abstract class AChunkManager { public abstract boolean copyRegion(final Location pos1, final Location pos2, final Location newPos, final Runnable whenDone); public abstract boolean regenerateRegion(final Location pos1, final Location pos2, final Runnable whenDone); + + public abstract void update(Location loc); + + public abstract void clearAllEntities(final Plot plot); } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ChunkManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ChunkManager.java index d0e2c9e36..0afa818da 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ChunkManager.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ChunkManager.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import org.apache.commons.lang.mutable.MutableInt; import org.bukkit.Bukkit; @@ -35,16 +36,19 @@ import org.bukkit.block.banner.Pattern; import org.bukkit.block.banner.PatternType; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.Plugin; import com.intellectualcrafters.plot.BukkitMain; import com.intellectualcrafters.plot.PlotSquared; +import com.intellectualcrafters.plot.listeners.PlotListener; import com.intellectualcrafters.plot.object.BlockLoc; import com.intellectualcrafters.plot.object.ChunkLoc; import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; +import com.intellectualcrafters.plot.object.PlotId; import com.intellectualcrafters.plot.object.RegionWrapper; import com.intellectualcrafters.plot.object.entity.EntityWrapper; import com.intellectualcrafters.plot.util.bukkit.BukkitTaskManager; @@ -741,4 +745,33 @@ public class ChunkManager extends AChunkManager { } return 0; } + + public void clearAllEntities(final Plot plot) { + final List entities = BukkitUtil.getEntities(plot.world); + for (final Entity entity : entities) { + final PlotId id = PlayerFunctions.getPlot(BukkitUtil.getLocation(entity)); + if (plot.id.equals(id)) { + if (entity instanceof Player) { + final Player player = (Player) entity; + BukkitMain.teleportPlayer(player, BukkitUtil.getLocation(entity), plot); + PlotListener.plotExit(player, plot); + } else { + entity.remove(); + } + } + } + } + + @Override + public void update(Location loc) { + ArrayList chunks = new ArrayList<>(); + final int distance = Bukkit.getViewDistance(); + for (int cx = -distance; cx < distance; cx++) { + for (int cz = -distance; cz < distance; cz++) { + Chunk chunk = BukkitUtil.getChunkAt(loc.getWorld(), loc.getX(), loc.getZ()); + chunks.add(chunk); + } + } + AbstractSetBlock.setBlockManager.update(chunks); + } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlayerFunctions.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlayerFunctions.java index 95859cc86..652698557 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlayerFunctions.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlayerFunctions.java @@ -32,10 +32,7 @@ import com.intellectualcrafters.plot.object.PlotManager; import com.intellectualcrafters.plot.object.PlotWorld; import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; -import org.bukkit.ChatColor; -import org.bukkit.World; -import org.bukkit.entity.Player; -import org.bukkit.util.ChatPaginator; +import net.milkbowl.vault.economy.Economy; import java.util.ArrayList; import java.util.HashSet; @@ -49,6 +46,99 @@ import java.util.UUID; */ @SuppressWarnings("javadoc") public class PlayerFunctions { + + /** + * Clear a plot. Use null player if no player is present + * @param player + * @param world + * @param plot + * @param isDelete + */ + public static void clear(final Player player, final String world, final Plot plot, final boolean isDelete) { + + if (runners.containsKey(plot)) { + PlayerFunctions.sendMessage(null, C.WAIT_FOR_TIMER); + return; + } + final PlotManager manager = PlotSquared.getPlotManager(world); + + final Location pos1 = PlotHelper.getPlotBottomLoc(world, plot.id).add(1, 0, 1); + + final int prime = 31; + int h = 1; + h = (prime * h) + pos1.getX(); + h = (prime * h) + pos1.getZ(); + state = h; + + final long start = System.currentTimeMillis(); + final Location location = PlotHelper.getPlotHomeDefault(plot); + PlotWorld plotworld = PlotSquared.getWorldSettings(world); + runners.put(plot, 1); + if (plotworld.TERRAIN != 0) { + final Location pos2 = PlotHelper.getPlotTopLoc(world, plot.id); + AChunkManager.manager.regenerateRegion(pos1, pos2, new Runnable() { + @Override + public void run() { + if (player != null && player.isOnline()) { + PlayerFunctions.sendMessage(player, C.CLEARING_DONE.s().replaceAll("%time%", "" + ((System.currentTimeMillis() - start)))); + } + runners.remove(plot); + } + }); + return; + } + Runnable run = new Runnable() { + @Override + public void run() { + PlotHelper.setBiome(world, plot, Biome.FOREST); + runners.remove(plot); + if (player != null && player.isOnline()) { + PlayerFunctions.sendMessage(player, C.CLEARING_DONE.s().replaceAll("%time%", "" + ((System.currentTimeMillis() - start)))); + } + update(location); + } + }; + manager.clearPlot(plotworld, plot, isDelete, run); + } + + /** + * Merges all plots in the arraylist (with cost) + * + * @param plr + * @param world + * @param plotIds + * + * @return + */ + public static boolean mergePlots(final Player plr, final String world, final ArrayList plotIds) { + + final PlotWorld plotworld = PlotSquared.getWorldSettings(world); + if ((PlotSquared.economy != null) && plotworld.USE_ECONOMY) { + final double cost = plotIds.size() * plotworld.MERGE_PRICE; + if (cost > 0d) { + final Economy economy = PlotSquared.economy; + if (economy.getBalance(plr) < cost) { + PlayerFunctions.sendMessage(plr, C.CANNOT_AFFORD_MERGE, "" + cost); + return false; + } + economy.withdrawPlayer(plr, cost); + PlayerFunctions.sendMessage(plr, C.REMOVED_BALANCE, cost + ""); + } + } + return mergePlots(world, plotIds, true); + } + + public static String getPlayerName(final UUID uuid) { + if (uuid == null) { + return "unknown"; + } + final OfflinePlayer plr = UUIDHandler.uuidWrapper.getOfflinePlayer(uuid); + if (!plr.hasPlayedBefore()) { + return "unknown"; + } + return plr.getName(); + } + /** * @param player player * @@ -58,16 +148,6 @@ import java.util.UUID; return getCurrentPlot(player) != null; } - public static ArrayList getPlotSelectionIds(PlotId pos1, final PlotId pos2) { - final ArrayList myplots = new ArrayList<>(); - for (int x = pos1.x; x <= pos2.x; x++) { - for (int y = pos1.y; y <= pos2.y; y++) { - myplots.add(new PlotId(x, y)); - } - } - return myplots; - } - public static ArrayList getMaxPlotSelectionIds(final String world, PlotId pos1, PlotId pos2) { diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlotHelper.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlotHelper.java index 282ef4ed0..cdd28e87d 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlotHelper.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlotHelper.java @@ -27,19 +27,10 @@ import java.util.HashMap; import java.util.List; import java.util.UUID; -import net.milkbowl.vault.economy.Economy; - -import org.bukkit.Bukkit; import org.bukkit.Chunk; -import org.bukkit.Material; -import org.bukkit.OfflinePlayer; -import org.bukkit.World; import org.bukkit.block.Biome; -import org.bukkit.block.Block; -import org.bukkit.block.Sign; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; + +import net.milkbowl.vault.economy.Economy; import com.intellectualcrafters.plot.BukkitMain; import com.intellectualcrafters.plot.PlotSquared; @@ -126,33 +117,16 @@ import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; return id; } - /** - * Merges all plots in the arraylist (with cost) - * - * @param plr - * @param world - * @param plotIds - * - * @return - */ - public static boolean mergePlots(final Player plr, final String world, final ArrayList plotIds) { - - final PlotWorld plotworld = PlotSquared.getWorldSettings(world); - if ((PlotSquared.economy != null) && plotworld.USE_ECONOMY) { - final double cost = plotIds.size() * plotworld.MERGE_PRICE; - if (cost > 0d) { - final Economy economy = PlotSquared.economy; - if (economy.getBalance(plr) < cost) { - PlayerFunctions.sendMessage(plr, C.CANNOT_AFFORD_MERGE, "" + cost); - return false; - } - economy.withdrawPlayer(plr, cost); - PlayerFunctions.sendMessage(plr, C.REMOVED_BALANCE, cost + ""); + public static ArrayList getPlotSelectionIds(PlotId pos1, final PlotId pos2) { + final ArrayList myplots = new ArrayList<>(); + for (int x = pos1.x; x <= pos2.x; x++) { + for (int y = pos1.y; y <= pos2.y; y++) { + myplots.add(new PlotId(x, y)); } } - return mergePlots(world, plotIds, true); + return myplots; } - + /** * Completely merges a set of plots
(There are no checks to make sure you supply the correct * arguments)
- Misuse of this method can result in unusable plots
- the set of plots must belong to one @@ -303,17 +277,6 @@ import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; BukkitUtil.setSign(p.world, loc.getX(), loc.getY(), loc.getZ(), lines); } - public static String getPlayerName(final UUID uuid) { - if (uuid == null) { - return "unknown"; - } - final OfflinePlayer plr = UUIDHandler.uuidWrapper.getOfflinePlayer(uuid); - if (!plr.hasPlayedBefore()) { - return "unknown"; - } - return plr.getName(); - } - public static String getStringSized(final int max, final String string) { if (string.length() > max) { return string.substring(0, max); @@ -321,18 +284,16 @@ import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; return string; } - public static void autoMerge(final String world, final Plot plot, final Player player) { - + public static void autoMerge(final String world, final Plot plot, final UUID uuid) { if (plot == null) { return; } if (plot.owner == null) { return; } - if (!plot.owner.equals(UUIDHandler.getUUID(player))) { + if (!plot.owner.equals(uuid)) { return; } - ArrayList plots; boolean merge = true; int count = 0; @@ -343,32 +304,32 @@ import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; count++; final PlotId bot = PlayerFunctions.getBottomPlot(world, plot).id; final PlotId top = PlayerFunctions.getTopPlot(world, plot).id; - plots = PlayerFunctions.getPlotSelectionIds(new PlotId(bot.x, bot.y - 1), new PlotId(top.x, top.y)); - if (ownsPlots(world, plots, player, 0)) { + plots = getPlotSelectionIds(new PlotId(bot.x, bot.y - 1), new PlotId(top.x, top.y)); + if (ownsPlots(world, plots, uuid, 0)) { final boolean result = mergePlots(world, plots, true); if (result) { merge = true; continue; } } - plots = PlayerFunctions.getPlotSelectionIds(new PlotId(bot.x, bot.y), new PlotId(top.x + 1, top.y)); - if (ownsPlots(world, plots, player, 1)) { + plots = getPlotSelectionIds(new PlotId(bot.x, bot.y), new PlotId(top.x + 1, top.y)); + if (ownsPlots(world, plots, uuid, 1)) { final boolean result = mergePlots(world, plots, true); if (result) { merge = true; continue; } } - plots = PlayerFunctions.getPlotSelectionIds(new PlotId(bot.x, bot.y), new PlotId(top.x, top.y + 1)); - if (ownsPlots(world, plots, player, 2)) { + plots = getPlotSelectionIds(new PlotId(bot.x, bot.y), new PlotId(top.x, top.y + 1)); + if (ownsPlots(world, plots, uuid, 2)) { final boolean result = mergePlots(world, plots, true); if (result) { merge = true; continue; } } - plots = PlayerFunctions.getPlotSelectionIds(new PlotId(bot.x - 1, bot.y), new PlotId(top.x, top.y)); - if (ownsPlots(world, plots, player, 3)) { + plots = getPlotSelectionIds(new PlotId(bot.x - 1, bot.y), new PlotId(top.x, top.y)); + if (ownsPlots(world, plots, uuid, 3)) { final boolean result = mergePlots(world, plots, true); if (result) { merge = true; @@ -377,16 +338,16 @@ import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; } merge = false; } - update(BukkitUtil.getLocation(player)); + AChunkManager.manager.update(getPlotHome(world, plot)); } - private static boolean ownsPlots(final String world, final ArrayList plots, final Player player, final int dir) { + private static boolean ownsPlots(final String world, final ArrayList plots, final UUID uuid, final int dir) { final PlotId id_min = plots.get(0); final PlotId id_max = plots.get(plots.size() - 1); for (final PlotId myid : plots) { final Plot myplot = PlotSquared.getPlots(world).get(myid); - if ((myplot == null) || !myplot.hasOwner() || !(myplot.getOwner().equals(UUIDHandler.getUUID(player)))) { + if ((myplot == null) || !myplot.hasOwner() || !(myplot.getOwner().equals(uuid))) { return false; } final PlotId top = PlayerFunctions.getTopPlot(world, myplot).id; @@ -401,18 +362,6 @@ import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; return true; } - public static void update(Location loc) { - ArrayList chunks = new ArrayList<>(); - final int distance = Bukkit.getViewDistance(); - for (int cx = -distance; cx < distance; cx++) { - for (int cz = -distance; cz < distance; cz++) { - Chunk chunk = BukkitUtil.getChunkAt(loc.getWorld(), loc.getX(), loc.getZ()); - chunks.add(chunk); - } - } - AbstractSetBlock.setBlockManager.update(chunks); - } - public static void updateWorldBorder(Plot plot) { if (!worldBorder.containsKey(plot.world)) { return; @@ -434,16 +383,14 @@ import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; /** * Create a plot and notify the world border and plot merger */ - public static boolean createPlot(final Player player, final Plot plot) { + public static boolean createPlot(final UUID uuid, final Plot plot) { if (PlotHelper.worldBorder.containsKey(plot.world)) { updateWorldBorder(plot); } - String w = BukkitUtil.getWorld(player); - UUID uuid = UUIDHandler.getUUID(player); Plot p = createPlotAbs(uuid, plot); - final PlotWorld plotworld = PlotSquared.getWorldSettings(w); + final PlotWorld plotworld = PlotSquared.getWorldSettings(plot.world); if (plotworld.AUTO_MERGE) { - autoMerge(w, p, player); + autoMerge(plot.world, p, uuid); } return true; } @@ -475,39 +422,25 @@ import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; return new short[]{Short.parseShort(block), 0}; } - public static void clearAllEntities(final String world, final Plot plot, final boolean tile) { - final List entities = BukkitUtil.getEntities(world); - for (final Entity entity : entities) { - final PlotId id = PlayerFunctions.getPlot(BukkitUtil.getLocation(entity)); - if (plot.id.equals(id)) { - if (entity instanceof Player) { - final Player player = (Player) entity; - BukkitMain.teleportPlayer(player, BukkitUtil.getLocation(entity), plot); - PlotListener.plotExit(player, plot); - } else { - entity.remove(); - } - } - } - } - /** - * Clear a plot. Use null player if no player is present - * @param player - * @param world + * Clear a plot and associated sections: [sign, entities, border] + * + * @param requester * @param plot - * @param isDelete */ - public static void clear(final Player player, final String world, final Plot plot, final boolean isDelete) { - + public static boolean clear(UUID uuid, final Plot plot, final boolean isDelete, final Runnable whenDone) { if (runners.containsKey(plot)) { - PlayerFunctions.sendMessage(null, C.WAIT_FOR_TIMER); - return; + return false; } + AChunkManager.manager.clearAllEntities(plot); + clear(plot.world, plot, isDelete, whenDone); + removeSign(plot); + return true; + } + + public static void clear(final String world, final Plot plot, final boolean isDelete, final Runnable whenDone) { final PlotManager manager = PlotSquared.getPlotManager(world); - final Location pos1 = PlotHelper.getPlotBottomLoc(world, plot.id).add(1, 0, 1); - final int prime = 31; int h = 1; h = (prime * h) + pos1.getX(); @@ -523,10 +456,8 @@ import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; AChunkManager.manager.regenerateRegion(pos1, pos2, new Runnable() { @Override public void run() { - if (player != null && player.isOnline()) { - PlayerFunctions.sendMessage(player, C.CLEARING_DONE.s().replaceAll("%time%", "" + ((System.currentTimeMillis() - start)))); - } runners.remove(plot); + TaskManager.runTask(whenDone); } }); return; @@ -536,42 +467,13 @@ import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; public void run() { PlotHelper.setBiome(world, plot, Biome.FOREST); runners.remove(plot); - if (player != null && player.isOnline()) { - PlayerFunctions.sendMessage(player, C.CLEARING_DONE.s().replaceAll("%time%", "" + ((System.currentTimeMillis() - start)))); - } - update(location); + TaskManager.runTask(whenDone); + AChunkManager.manager.update(location); } }; manager.clearPlot(plotworld, plot, isDelete, run); } - /** - * Clear a plot and associated sections: [sign, entities, border] - * - * @param requester - * @param plot - */ - public static void clear(final Player requester, final Plot plot, final boolean isDelete) { - if (requester == null) { - clearAllEntities(plot.world, plot, false); - clear(requester, plot.world, plot, isDelete); - removeSign(plot); - return; - } - if (runners.containsKey(plot)) { - PlayerFunctions.sendMessage(requester, C.WAIT_FOR_TIMER); - return; - } - - PlayerFunctions.sendMessage(requester, C.CLEARING_PLOT); - - String world = requester.getWorld().getName(); - - clearAllEntities(world, plot, false); - clear(requester, world, plot, isDelete); - removeSign(plot); - } - public static void setCuboid(final String world, final Location pos1, final Location pos2, final PlotBlock[] blocks) { if (blocks.length == 1) { setSimpleCuboid(world, pos1, pos2, blocks[0]); @@ -874,7 +776,7 @@ import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; int offset_x = newPlot.x - pos1.id.x; int offset_y = newPlot.y - pos1.id.y; - final ArrayList selection = PlayerFunctions.getPlotSelectionIds(pos1.id, pos2.id); + final ArrayList selection = getPlotSelectionIds(pos1.id, pos2.id); for (PlotId id : selection) { DBFunc.movePlot(world, new PlotId(id.x, id.y), new PlotId(id.x + offset_x, id.y + offset_y)); Plot plot = PlotSquared.getPlots(world).get(id);