From d077fafd29bdbecf72d8e798ab5bcfc4798c84c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20S=C3=B6derberg?= Date: Fri, 17 Jul 2020 22:58:10 +0200 Subject: [PATCH 1/4] Some random bukkitutil/worldutil improvements --- .../com/plotsquared/bukkit/BukkitCommand.java | 4 +- .../plotsquared/bukkit/BukkitPlatform.java | 20 +- .../bukkit/listener/EntitySpawnListener.java | 2 +- .../bukkit/listener/ForceFieldListener.java | 4 +- .../bukkit/listener/PaperListener.java | 24 +- .../bukkit/listener/PlayerEvents.java | 238 +++++----- .../bukkit/player/BukkitPlayer.java | 11 +- .../bukkit/util/BukkitRegionManager.java | 14 +- .../plotsquared/bukkit/util/BukkitUtil.java | 425 ++++++------------ .../plotsquared/bukkit/util/ContentMap.java | 4 +- .../com/plotsquared/core/PlotPlatform.java | 2 +- .../core/listener/PlotListener.java | 2 +- .../java/com/plotsquared/core/plot/Plot.java | 2 +- .../com/plotsquared/core/util/MainUtil.java | 9 +- .../com/plotsquared/core/util/WorldUtil.java | 245 ++++++++-- 15 files changed, 511 insertions(+), 495 deletions(-) diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitCommand.java b/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitCommand.java index 1f5b0de02..19a83fba8 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitCommand.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitCommand.java @@ -49,7 +49,7 @@ public class BukkitCommand implements CommandExecutor, TabCompleter { public boolean onCommand(CommandSender commandSender, Command command, String commandLabel, String[] args) { if (commandSender instanceof Player) { - return MainCommand.onCommand(BukkitUtil.getPlayer((Player) commandSender), args); + return MainCommand.onCommand(BukkitUtil.adapt((Player) commandSender), args); } if (commandSender instanceof ConsoleCommandSender || commandSender instanceof ProxiedCommandSender @@ -65,7 +65,7 @@ public class BukkitCommand implements CommandExecutor, TabCompleter { if (!(commandSender instanceof Player)) { return null; } - PlotPlayer player = BukkitUtil.getPlayer((Player) commandSender); + PlotPlayer player = BukkitUtil.adapt((Player) commandSender); if (args.length == 0) { return Collections.singletonList("plots"); } diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitPlatform.java b/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitPlatform.java index cf236b3e4..174f3e6a8 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitPlatform.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitPlatform.java @@ -226,7 +226,7 @@ import static com.plotsquared.core.util.ReflectionUtils.getRefClass; } // Stuff that needs to be created before the PlotSquared instance - PlotPlayer.registerConverter(Player.class, BukkitUtil::getPlayer); + PlotPlayer.registerConverter(Player.class, BukkitUtil::adapt); TaskManager.setPlatformImplementation(new BukkitTaskManager(this, timeConverter)); final PlotSquared plotSquared = new PlotSquared(this, "Bukkit"); @@ -772,7 +772,7 @@ import static com.plotsquared.core.util.ReflectionUtils.getRefClass; case "BOAT": if (Settings.Enabled_Components.KILL_ROAD_VEHICLES) { com.plotsquared.core.location.Location location = - BukkitUtil.getLocation(entity.getLocation()); + BukkitUtil.adapt(entity.getLocation()); Plot plot = location.getPlot(); if (plot == null) { if (location.isPlotArea()) { @@ -803,7 +803,7 @@ import static com.plotsquared.core.util.ReflectionUtils.getRefClass; case "DRAGON_FIREBALL": case "DROPPED_ITEM": if (Settings.Enabled_Components.KILL_ROAD_ITEMS && plotArea - .getOwnedPlotAbs(BukkitUtil.getLocation(entity.getLocation())) + .getOwnedPlotAbs(BukkitUtil.adapt(entity.getLocation())) == null) { entity.remove(); } @@ -829,7 +829,7 @@ import static com.plotsquared.core.util.ReflectionUtils.getRefClass; PlotId originalPlotId = (PlotId) meta.get(0).value(); if (originalPlotId != null) { com.plotsquared.core.location.Location pLoc = - BukkitUtil.getLocation(entity.getLocation()); + BukkitUtil.adapt(entity.getLocation()); PlotArea area = pLoc.getPlotArea(); if (area != null) { PlotId currentPlotId = PlotId.of(area.getPlotAbs(pLoc)); @@ -848,7 +848,7 @@ import static com.plotsquared.core.util.ReflectionUtils.getRefClass; } else { //This is to apply the metadata to already spawned shulkers (see EntitySpawnListener.java) com.plotsquared.core.location.Location pLoc = - BukkitUtil.getLocation(entity.getLocation()); + BukkitUtil.adapt(entity.getLocation()); PlotArea area = pLoc.getPlotArea(); if (area != null) { PlotId currentPlotId = PlotId.of(area.getPlotAbs(pLoc)); @@ -933,7 +933,7 @@ import static com.plotsquared.core.util.ReflectionUtils.getRefClass; default: { if (Settings.Enabled_Components.KILL_ROAD_MOBS) { Location location = entity.getLocation(); - if (BukkitUtil.getLocation(location).isPlotRoad()) { + if (BukkitUtil.adapt(location).isPlotRoad()) { if (entity instanceof LivingEntity) { LivingEntity livingEntity = (LivingEntity) entity; if (!livingEntity.isLeashed() || !entity @@ -1037,8 +1037,8 @@ import static com.plotsquared.core.util.ReflectionUtils.getRefClass; "WorldEdit")); } - @Override public void unregister(@Nonnull final PlotPlayer player) { - BukkitUtil.removePlayer(player.getUUID()); + @Override public void unregister(@Nonnull final PlotPlayer player) { + PlotSquared.platform().getPlayerManager().removePlayer(player.getUUID()); } @Override public void setGenerator(@Nonnull final String worldName) { @@ -1094,10 +1094,10 @@ import static com.plotsquared.core.util.ReflectionUtils.getRefClass; */ @Override @Nullable public PlotPlayer wrapPlayer(final Object player) { if (player instanceof Player) { - return BukkitUtil.getPlayer((Player) player); + return BukkitUtil.adapt((Player) player); } if (player instanceof OfflinePlayer) { - return BukkitUtil.getPlayer((OfflinePlayer) player); + return BukkitUtil.adapt((OfflinePlayer) player); } if (player instanceof String) { return (PlotPlayer) PlotSquared.platform().getPlayerManager() diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/EntitySpawnListener.java b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/EntitySpawnListener.java index 85903eb9a..f30f653b3 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/EntitySpawnListener.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/EntitySpawnListener.java @@ -126,7 +126,7 @@ 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()); + Location location = BukkitUtil.adapt(entity.getLocation()); PlotArea area = location.getPlotArea(); if (!location.isPlotArea()) { return; diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/ForceFieldListener.java b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/ForceFieldListener.java index 7cc0de41d..71db36343 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/ForceFieldListener.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/ForceFieldListener.java @@ -49,7 +49,7 @@ public class ForceFieldListener { for (Player nearPlayer : Iterables .filter(player.getNearbyEntities(5d, 5d, 5d), Player.class)) { PlotPlayer plotPlayer; - if ((plotPlayer = BukkitUtil.getPlayer(nearPlayer)) == null || !plot + if ((plotPlayer = BukkitUtil.adapt(nearPlayer)) == null || !plot .equals(plotPlayer.getCurrentPlot())) { continue; } @@ -64,7 +64,7 @@ public class ForceFieldListener { for (Player nearPlayer : Iterables .filter(player.getNearbyEntities(5d, 5d, 5d), Player.class)) { PlotPlayer plotPlayer; - if ((plotPlayer = BukkitUtil.getPlayer(nearPlayer)) == null || !plot + if ((plotPlayer = BukkitUtil.adapt(nearPlayer)) == null || !plot .equals(plotPlayer.getCurrentPlot())) { continue; } diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/PaperListener.java b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/PaperListener.java index 7dfe8fbcb..1be0a2115 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/PaperListener.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/PaperListener.java @@ -84,8 +84,8 @@ public class PaperListener implements Listener { if (!Settings.Paper_Components.ENTITY_PATHING) { return; } - Location toLoc = BukkitUtil.getLocation(event.getLoc()); - Location fromLoc = BukkitUtil.getLocation(event.getEntity().getLocation()); + Location toLoc = BukkitUtil.adapt(event.getLoc()); + Location fromLoc = BukkitUtil.adapt(event.getEntity().getLocation()); PlotArea tarea = toLoc.getPlotArea(); if (tarea == null) { return; @@ -124,8 +124,8 @@ public class PaperListener implements Listener { return; } - Location toLoc = BukkitUtil.getLocation(b.getLocation()); - Location fromLoc = BukkitUtil.getLocation(event.getEntity().getLocation()); + Location toLoc = BukkitUtil.adapt(b.getLocation()); + Location fromLoc = BukkitUtil.adapt(event.getEntity().getLocation()); PlotArea tarea = toLoc.getPlotArea(); if (tarea == null) { return; @@ -158,7 +158,7 @@ public class PaperListener implements Listener { if (!Settings.Paper_Components.CREATURE_SPAWN) { return; } - Location location = BukkitUtil.getLocation(event.getSpawnLocation()); + Location location = BukkitUtil.adapt(event.getSpawnLocation()); PlotArea area = location.getPlotArea(); if (!location.isPlotArea()) { return; @@ -253,7 +253,7 @@ public class PaperListener implements Listener { @EventHandler public void onPlayerNaturallySpawnCreaturesEvent(PlayerNaturallySpawnCreaturesEvent event) { if (Settings.Paper_Components.CANCEL_CHUNK_SPAWN) { - Location location = BukkitUtil.getLocation(event.getPlayer().getLocation()); + Location location = BukkitUtil.adapt(event.getPlayer().getLocation()); PlotArea area = location.getPlotArea(); if (area != null && !area.isMobSpawning()) { event.setCancelled(true); @@ -263,7 +263,7 @@ public class PaperListener implements Listener { @EventHandler public void onPreSpawnerSpawnEvent(PreSpawnerSpawnEvent event) { if (Settings.Paper_Components.SPAWNER_SPAWN) { - Location location = BukkitUtil.getLocation(event.getSpawnerLocation()); + Location location = BukkitUtil.adapt(event.getSpawnerLocation()); PlotArea area = location.getPlotArea(); if (area != null && !area.isMobSpawnerSpawning()) { event.setCancelled(true); @@ -279,14 +279,14 @@ public class PaperListener implements Listener { if (!(event.getBlock().getState(false) instanceof TileState)) { return; } - final Location location = BukkitUtil.getLocation(event.getBlock().getLocation()); + final Location location = BukkitUtil.adapt(event.getBlock().getLocation()); final PlotArea plotArea = location.getPlotArea(); if (plotArea == null) { return; } final int tileEntityCount = event.getBlock().getChunk().getTileEntities(false).length; if (tileEntityCount >= Settings.Chunk_Processor.MAX_TILES) { - final PlotPlayer plotPlayer = BukkitUtil.getPlayer(event.getPlayer()); + final PlotPlayer plotPlayer = BukkitUtil.adapt(event.getPlayer()); Captions.TILE_ENTITY_CAP_REACHED.send(plotPlayer, Settings.Chunk_Processor.MAX_TILES); event.setCancelled(true); event.setBuild(false); @@ -311,11 +311,11 @@ public class PaperListener implements Listener { if (!(shooter instanceof Player)) { return; } - Location location = BukkitUtil.getLocation(entity); + Location location = BukkitUtil.adapt(entity.getLocation()); if (!this.plotAreaManager.hasPlotArea(location.getWorldName())) { return; } - PlotPlayer pp = BukkitUtil.getPlayer((Player) shooter); + PlotPlayer pp = BukkitUtil.adapt((Player) shooter); Plot plot = location.getOwnedPlot(); if (plot != null && !plot.isAdded(pp.getUUID())) { entity.remove(); @@ -347,7 +347,7 @@ public class PaperListener implements Listener { final String[] args = new String[unprocessedArgs.length - 1]; System.arraycopy(unprocessedArgs, 1, args, 0, args.length); try { - final PlotPlayer player = BukkitUtil.getPlayer((Player) event.getSender()); + final PlotPlayer player = BukkitUtil.adapt((Player) event.getSender()); final Collection objects = MainCommand.getInstance().tab(player, args, buffer.endsWith(" ")); if (objects == null) { return; diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/PlayerEvents.java b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/PlayerEvents.java index d85afbbef..17ab8f71d 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/PlayerEvents.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/PlayerEvents.java @@ -329,10 +329,10 @@ import java.util.regex.Pattern; @EventHandler public void onVehicleEntityCollision(VehicleEntityCollisionEvent e) { if (e.getVehicle().getType() == EntityType.BOAT) { - Location location = BukkitUtil.getLocation(e.getEntity()); + Location location = BukkitUtil.adapt(e.getEntity().getLocation()); if (location.isPlotArea()) { if (e.getEntity() instanceof Player) { - PlotPlayer player = BukkitUtil.getPlayer((Player) e.getEntity()); + PlotPlayer player = BukkitUtil.adapt((Player) e.getEntity()); Plot plot = player.getCurrentPlot(); if (plot != null) { if (!plot.isAdded(player.getUUID())) { @@ -354,7 +354,7 @@ import java.util.regex.Pattern; @EventHandler public void onRedstoneEvent(BlockRedstoneEvent event) { Block block = event.getBlock(); - Location location = BukkitUtil.getLocation(block.getLocation()); + Location location = BukkitUtil.adapt(block.getLocation()); PlotArea area = location.getPlotArea(); if (area == null) { return; @@ -420,7 +420,7 @@ import java.util.regex.Pattern; switch (event.getChangedType()) { case COMPARATOR: { Block block = event.getBlock(); - Location location = BukkitUtil.getLocation(block.getLocation()); + Location location = BukkitUtil.adapt(block.getLocation()); if (location.isPlotArea()) { return; } @@ -442,7 +442,7 @@ import java.util.regex.Pattern; case TURTLE_HELMET: case TURTLE_SPAWN_EGG: { Block block = event.getBlock(); - Location location = BukkitUtil.getLocation(block.getLocation()); + Location location = BukkitUtil.adapt(block.getLocation()); PlotArea area = location.getPlotArea(); if (area == null) { return; @@ -465,7 +465,7 @@ import java.util.regex.Pattern; case STICKY_PISTON: org.bukkit.block.data.Directional piston = (org.bukkit.block.data.Directional) block.getBlockData(); - Location location = BukkitUtil.getLocation(block.getLocation()); + Location location = BukkitUtil.adapt(block.getLocation()); PlotArea area = location.getPlotArea(); if (area == null) { return; @@ -510,11 +510,11 @@ import java.util.regex.Pattern; if (!(shooter instanceof Player)) { return; } - Location location = BukkitUtil.getLocation(entity); + Location location = BukkitUtil.adapt(entity.getLocation()); if (!this.plotAreaManager.hasPlotArea(location.getWorldName())) { return; } - PlotPlayer pp = BukkitUtil.getPlayer((Player) shooter); + PlotPlayer pp = BukkitUtil.adapt((Player) shooter); Plot plot = location.getOwnedPlot(); if (plot != null && !plot.isAdded(pp.getUUID())) { entity.remove(); @@ -524,7 +524,7 @@ import java.util.regex.Pattern; @EventHandler public boolean onProjectileHit(ProjectileHitEvent event) { Projectile entity = event.getEntity(); - Location location = BukkitUtil.getLocation(entity); + Location location = BukkitUtil.adapt(entity.getLocation()); if (!this.plotAreaManager.hasPlotArea(location.getWorldName())) { return true; } @@ -535,7 +535,7 @@ import java.util.regex.Pattern; Plot plot = area.getPlot(location); ProjectileSource shooter = entity.getShooter(); if (shooter instanceof Player) { - PlotPlayer pp = BukkitUtil.getPlayer((Player) shooter); + PlotPlayer pp = BukkitUtil.adapt((Player) shooter); if (plot == null) { if (!Permissions.hasPermission(pp, Captions.PERMISSION_PROJECTILE_UNOWNED)) { entity.remove(); @@ -556,7 +556,7 @@ import java.util.regex.Pattern; return false; } Location sLoc = - BukkitUtil.getLocation(((BlockProjectileSource) shooter).getBlock().getLocation()); + BukkitUtil.adapt(((BlockProjectileSource) shooter).getBlock().getLocation()); if (!area.contains(sLoc.getX(), sLoc.getZ())) { entity.remove(); return false; @@ -577,7 +577,7 @@ import java.util.regex.Pattern; return; } Player player = event.getPlayer(); - PlotPlayer plotPlayer = BukkitUtil.getPlayer(player); + PlotPlayer plotPlayer = BukkitUtil.adapt(player); Location location = plotPlayer.getLocation(); PlotArea area = location.getPlotArea(); if (area == null) { @@ -683,8 +683,8 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onConnect(PlayerJoinEvent event) { final Player player = event.getPlayer(); - BukkitUtil.removePlayer(player.getUniqueId()); - final PlotPlayer pp = BukkitUtil.getPlayer(player); + PlotSquared.platform().getPlayerManager().removePlayer(player.getUniqueId()); + final PlotPlayer pp = BukkitUtil.adapt(player); Location location = pp.getLocation(); PlotArea area = location.getPlotArea(); @@ -723,19 +723,19 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void playerRespawn(PlayerRespawnEvent event) { Player player = event.getPlayer(); - PlotPlayer pp = BukkitUtil.getPlayer(player); + PlotPlayer pp = BukkitUtil.adapt(player); this.eventDispatcher.doRespawnTask(pp); } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onTeleport(PlayerTeleportEvent event) { Player player = event.getPlayer(); - BukkitPlayer pp = BukkitUtil.getPlayer(player); + BukkitPlayer pp = BukkitUtil.adapt(player); Plot lastPlot = pp.getMeta(PlotPlayer.META_LAST_PLOT); org.bukkit.Location to = event.getTo(); //noinspection ConstantConditions if (to != null) { - Location location = BukkitUtil.getLocation(to); + Location location = BukkitUtil.adapt(to); PlotArea area = location.getPlotArea(); if (area == null) { if (lastPlot != null) { @@ -753,7 +753,7 @@ import java.util.regex.Pattern; // i.e. untrusted-visit can override deny-teleport // this is acceptable, because otherwise it wouldn't make sense to have both flags set if (!result && !(plot.getFlag(UntrustedVisitFlag.class) && plot.getHomeSynchronous() - .equals(BukkitUtil.getLocationFull(to)))) { + .equals(BukkitUtil.adaptComplete(to)))) { MainUtil.sendMessage(pp, Captions.NO_PERMISSION_EVENT, Captions.PERMISSION_ADMIN_ENTRY_DENIED); event.setCancelled(true); @@ -816,7 +816,7 @@ import java.util.regex.Pattern; if (EntityCategories.VEHICLE.contains(entityType) && !EntityCategories.ANIMAL .contains(entityType)) { List meta = vehicle.getMetadata("plot"); - Plot toPlot = BukkitUtil.getLocation(to).getPlot(); + Plot toPlot = BukkitUtil.adapt(to).getPlot(); if (!meta.isEmpty()) { Plot origin = (Plot) meta.get(0).value(); if (origin != null && !origin.getBasePlot(false).equals(toPlot)) { @@ -840,13 +840,13 @@ import java.util.regex.Pattern; int x2; if (MathMan.roundInt(from.getX()) != (x2 = MathMan.roundInt(to.getX()))) { Player player = event.getPlayer(); - BukkitPlayer pp = BukkitUtil.getPlayer(player); + BukkitPlayer pp = BukkitUtil.adapt(player); // Cancel teleport if (TaskManager.removeFromTeleportQueue(pp.getName())) { MainUtil.sendMessage(pp, Captions.TELEPORT_FAILED); } // Set last location - Location location = BukkitUtil.getLocation(to); + Location location = BukkitUtil.adapt(to); pp.setMeta(PlotPlayer.META_LOCATION, location); PlotArea area = location.getPlotArea(); if (area == null) { @@ -861,7 +861,7 @@ import java.util.regex.Pattern; MainUtil.sendMessage(pp, Captions.NO_PERMISSION_EVENT, Captions.PERMISSION_ADMIN_EXIT_DENIED); this.tmpTeleport = false; - if (lastPlot.equals(BukkitUtil.getLocation(from).getPlot())) { + if (lastPlot.equals(BukkitUtil.adapt(from).getPlot())) { player.teleport(from); } else { player.teleport(player.getWorld().getSpawnLocation()); @@ -902,13 +902,13 @@ import java.util.regex.Pattern; int z2; if (MathMan.roundInt(from.getZ()) != (z2 = MathMan.roundInt(to.getZ()))) { Player player = event.getPlayer(); - BukkitPlayer pp = BukkitUtil.getPlayer(player); + BukkitPlayer pp = BukkitUtil.adapt(player); // Cancel teleport if (TaskManager.removeFromTeleportQueue(pp.getName())) { MainUtil.sendMessage(pp, Captions.TELEPORT_FAILED); } // Set last location - Location location = BukkitUtil.getLocation(to); + Location location = BukkitUtil.adapt(to); pp.setMeta(PlotPlayer.META_LOCATION, location); PlotArea area = location.getPlotArea(); if (area == null) { @@ -923,7 +923,7 @@ import java.util.regex.Pattern; MainUtil.sendMessage(pp, Captions.NO_PERMISSION_EVENT, Captions.PERMISSION_ADMIN_EXIT_DENIED); this.tmpTeleport = false; - if (lastPlot.equals(BukkitUtil.getLocation(from).getPlot())) { + if (lastPlot.equals(BukkitUtil.adapt(from).getPlot())) { player.teleport(from); } else { player.teleport(player.getWorld().getSpawnLocation()); @@ -968,7 +968,7 @@ import java.util.regex.Pattern; return; } - BukkitPlayer plotPlayer = BukkitUtil.getPlayer(event.getPlayer()); + BukkitPlayer plotPlayer = BukkitUtil.adapt(event.getPlayer()); Location location = plotPlayer.getLocation(); PlotArea area = location.getPlotArea(); if (area == null) { @@ -1027,14 +1027,14 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.LOWEST) public void blockDestroy(BlockBreakEvent event) { Player player = event.getPlayer(); - Location location = BukkitUtil.getLocation(event.getBlock().getLocation()); + Location location = BukkitUtil.adapt(event.getBlock().getLocation()); PlotArea area = location.getPlotArea(); if (area == null) { return; } Plot plot = area.getPlot(location); if (plot != null) { - BukkitPlayer plotPlayer = BukkitUtil.getPlayer(player); + BukkitPlayer plotPlayer = BukkitUtil.adapt(player); if (event.getBlock().getY() == 0) { if (!Permissions .hasPermission(plotPlayer, Captions.PERMISSION_ADMIN_DESTROY_GROUNDLEVEL)) { @@ -1083,7 +1083,7 @@ import java.util.regex.Pattern; } return; } - BukkitPlayer pp = BukkitUtil.getPlayer(player); + BukkitPlayer pp = BukkitUtil.adapt(player); if (Permissions.hasPermission(pp, Captions.PERMISSION_ADMIN_DESTROY_ROAD)) { return; } @@ -1100,7 +1100,7 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBigBoom(EntityExplodeEvent event) { - Location location = BukkitUtil.getLocation(event.getLocation()); + Location location = BukkitUtil.adapt(event.getLocation()); PlotArea area = location.getPlotArea(); boolean plotArea = location.isPlotArea(); if (!plotArea) { @@ -1136,7 +1136,7 @@ import java.util.regex.Pattern; Iterator iterator = event.blockList().iterator(); while (iterator.hasNext()) { Block block = iterator.next(); - location = BukkitUtil.getLocation(block.getLocation()); + location = BukkitUtil.adapt(block.getLocation()); if (!area.contains(location.getX(), location.getZ()) || !origin .equals(area.getOwnedPlot(location))) { iterator.remove(); @@ -1153,7 +1153,7 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onWorldChanged(PlayerChangedWorldEvent event) { Player player = event.getPlayer(); - BukkitPlayer pp = BukkitUtil.getPlayer(player); + BukkitPlayer pp = BukkitUtil.adapt(player); // Delete last location Plot plot = (Plot) pp.deleteMeta(PlotPlayer.META_LAST_PLOT); pp.deleteMeta(PlotPlayer.META_LOCATION); @@ -1184,7 +1184,7 @@ import java.util.regex.Pattern; public void onPeskyMobsChangeTheWorldLikeWTFEvent(EntityChangeBlockEvent event) { Entity e = event.getEntity(); if (!(e instanceof FallingBlock)) { - Location location = BukkitUtil.getLocation(event.getBlock().getLocation()); + Location location = BukkitUtil.adapt(event.getBlock().getLocation()); PlotArea area = location.getPlotArea(); if (area != null) { Plot plot = area.getOwnedPlot(location); @@ -1203,7 +1203,7 @@ import java.util.regex.Pattern; if (!this.plotAreaManager.hasPlotArea(world)) { return; } - Location location = BukkitUtil.getLocation(event.getBlock().getLocation()); + Location location = BukkitUtil.adapt(event.getBlock().getLocation()); PlotArea area = location.getPlotArea(); if (area == null) { return; @@ -1217,7 +1217,7 @@ import java.util.regex.Pattern; if (entity instanceof Player) { Player player = (Player) entity; if (!plot.hasOwner()) { - BukkitPlayer plotPlayer = BukkitUtil.getPlayer(player); + BukkitPlayer plotPlayer = BukkitUtil.adapt(player); if (plot.getFlag(IceFormFlag.class)) { plot.debug("Ice could not be formed because ice-form = false"); return; @@ -1225,7 +1225,7 @@ import java.util.regex.Pattern; event.setCancelled(true); return; } - BukkitPlayer plotPlayer = BukkitUtil.getPlayer(player); + BukkitPlayer plotPlayer = BukkitUtil.adapt(player); if (!plot.isAdded(plotPlayer.getUUID())) { if (plot.getFlag(IceFormFlag.class)) { plot.debug("Ice could not be formed because ice-form = false"); @@ -1244,7 +1244,7 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockSpread(BlockSpreadEvent event) { Block block = event.getBlock(); - Location location = BukkitUtil.getLocation(block.getLocation()); + Location location = BukkitUtil.adapt(block.getLocation()); if (location.isPlotRoad()) { event.setCancelled(true); return; @@ -1288,7 +1288,7 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockForm(BlockFormEvent event) { Block block = event.getBlock(); - Location location = BukkitUtil.getLocation(block.getLocation()); + Location location = BukkitUtil.adapt(block.getLocation()); if (location.isPlotRoad()) { event.setCancelled(true); return; @@ -1322,7 +1322,7 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockDamage(BlockDamageEvent event) { Player player = event.getPlayer(); - Location location = BukkitUtil.getLocation(event.getBlock().getLocation()); + Location location = BukkitUtil.adapt(event.getBlock().getLocation()); PlotArea area = location.getPlotArea(); if (area == null) { return; @@ -1345,7 +1345,7 @@ import java.util.regex.Pattern; return; } if (!plot.hasOwner()) { - BukkitPlayer plotPlayer = BukkitUtil.getPlayer(player); + BukkitPlayer plotPlayer = BukkitUtil.adapt(player); if (Permissions .hasPermission(plotPlayer, Captions.PERMISSION_ADMIN_DESTROY_UNOWNED)) { return; @@ -1353,7 +1353,7 @@ import java.util.regex.Pattern; event.setCancelled(true); return; } - BukkitPlayer plotPlayer = BukkitUtil.getPlayer(player); + BukkitPlayer plotPlayer = BukkitUtil.adapt(player); if (!plot.isAdded(plotPlayer.getUUID())) { List destroy = plot.getFlag(BreakFlag.class); Block block = event.getBlock(); @@ -1370,7 +1370,7 @@ import java.util.regex.Pattern; } return; } - BukkitPlayer plotPlayer = BukkitUtil.getPlayer(player); + BukkitPlayer plotPlayer = BukkitUtil.adapt(player); if (Permissions.hasPermission(plotPlayer, Captions.PERMISSION_ADMIN_DESTROY_ROAD)) { return; } @@ -1380,7 +1380,7 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onFade(BlockFadeEvent event) { Block block = event.getBlock(); - Location location = BukkitUtil.getLocation(block.getLocation()); + Location location = BukkitUtil.adapt(block.getLocation()); PlotArea area = location.getPlotArea(); if (area == null) { return; @@ -1442,7 +1442,7 @@ import java.util.regex.Pattern; Block from = event.getBlock(); // Check liquid flow flag inside of origin plot too - final Location fLocation = BukkitUtil.getLocation(from.getLocation()); + final Location fLocation = BukkitUtil.adapt(from.getLocation()); final PlotArea fromArea = fLocation.getPlotArea(); if (fromArea != null) { final Plot plot = fromArea.getOwnedPlot(fLocation); @@ -1456,7 +1456,7 @@ import java.util.regex.Pattern; } Block to = event.getToBlock(); - Location tLocation = BukkitUtil.getLocation(to.getLocation()); + Location tLocation = BukkitUtil.adapt(to.getLocation()); PlotArea area = tLocation.getPlotArea(); if (area == null) { return; @@ -1501,14 +1501,14 @@ import java.util.regex.Pattern; v <-----O-----> x */ - if (BukkitUtil.getPlot(location.clone().add(-1, 0, 1) /* A */) != null - || BukkitUtil.getPlot(location.clone().add(1, 0, 0) /* B */) != null - || BukkitUtil.getPlot(location.clone().add(1, 0, 1) /* C */) != null - || BukkitUtil.getPlot(location.clone().add(-1, 0, 0) /* D */) != null - || BukkitUtil.getPlot(location.clone().add(1, 0, 0) /* E */) != null - || BukkitUtil.getPlot(location.clone().add(-1, 0, -1) /* F */) != null - || BukkitUtil.getPlot(location.clone().add(0, 0, -1) /* G */) != null - || BukkitUtil.getPlot(location.clone().add(1, 0, 1) /* H */) != null) { + if (BukkitUtil.adapt(location.clone().add(-1, 0, 1) /* A */).getPlot() != null + || BukkitUtil.adapt(location.clone().add(1, 0, 0) /* B */).getPlot() != null + || BukkitUtil.adapt(location.clone().add(1, 0, 1) /* C */).getPlot() != null + || BukkitUtil.adapt(location.clone().add(-1, 0, 0) /* D */).getPlot() != null + || BukkitUtil.adapt(location.clone().add(1, 0, 0) /* E */).getPlot() != null + || BukkitUtil.adapt(location.clone().add(-1, 0, -1) /* F */).getPlot() != null + || BukkitUtil.adapt(location.clone().add(0, 0, -1) /* G */).getPlot() != null + || BukkitUtil.adapt(location.clone().add(1, 0, 1) /* H */).getPlot() != null) { event.setCancelled(true); } } @@ -1517,7 +1517,7 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onGrow(BlockGrowEvent event) { Block block = event.getBlock(); - Location location = BukkitUtil.getLocation(block.getLocation()); + Location location = BukkitUtil.adapt(block.getLocation()); if (location.isUnownedPlotArea()) { event.setCancelled(true); } @@ -1526,7 +1526,7 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockPistonExtend(BlockPistonExtendEvent event) { Block block = event.getBlock(); - Location location = BukkitUtil.getLocation(block.getLocation()); + Location location = BukkitUtil.adapt(block.getLocation()); BlockFace face = event.getDirection(); Vector relative = new Vector(face.getModX(), face.getModY(), face.getModZ()); PlotArea area = location.getPlotArea(); @@ -1535,7 +1535,7 @@ import java.util.regex.Pattern; return; } for (Block block1 : event.getBlocks()) { - Location bloc = BukkitUtil.getLocation(block1.getLocation()); + Location bloc = BukkitUtil.adapt(block1.getLocation()); if (bloc.isPlotArea() || bloc .add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ()) .isPlotArea()) { @@ -1557,7 +1557,7 @@ import java.util.regex.Pattern; return; } for (Block block1 : event.getBlocks()) { - Location bloc = BukkitUtil.getLocation(block1.getLocation()); + Location bloc = BukkitUtil.adapt(block1.getLocation()); if (!area.contains(bloc.getX(), bloc.getZ()) || !area .contains(bloc.getX() + relative.getBlockX(), bloc.getZ() + relative.getBlockZ())) { event.setCancelled(true); @@ -1581,7 +1581,7 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockPistonRetract(BlockPistonRetractEvent event) { Block block = event.getBlock(); - Location location = BukkitUtil.getLocation(block.getLocation()); + Location location = BukkitUtil.adapt(block.getLocation()); BlockFace face = event.getDirection(); Vector relative = new Vector(face.getModX(), face.getModY(), face.getModZ()); PlotArea area = location.getPlotArea(); @@ -1590,7 +1590,7 @@ import java.util.regex.Pattern; return; } for (Block block1 : event.getBlocks()) { - Location bloc = BukkitUtil.getLocation(block1.getLocation()); + Location bloc = BukkitUtil.adapt(block1.getLocation()); if (bloc.isPlotArea() || bloc .add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ()) .isPlotArea()) { @@ -1606,7 +1606,7 @@ import java.util.regex.Pattern; return; } for (Block block1 : event.getBlocks()) { - Location bloc = BukkitUtil.getLocation(block1.getLocation()); + Location bloc = BukkitUtil.adapt(block1.getLocation()); if (!area.contains(bloc.getX(), bloc.getZ()) || !area .contains(bloc.getX() + relative.getBlockX(), bloc.getZ() + relative.getBlockZ())) { event.setCancelled(true); @@ -1661,7 +1661,7 @@ import java.util.regex.Pattern; BlockFace targetFace = ((Directional) event.getBlock().getState().getData()).getFacing(); Location location = - BukkitUtil.getLocation(event.getBlock().getRelative(targetFace).getLocation()); + BukkitUtil.adapt(event.getBlock().getRelative(targetFace).getLocation()); if (location.isPlotRoad()) { event.setCancelled(true); } @@ -1678,11 +1678,11 @@ import java.util.regex.Pattern; if (blocks.isEmpty()) { return; } - Location location = BukkitUtil.getLocation(blocks.get(0).getLocation()); + Location location = BukkitUtil.adapt(blocks.get(0).getLocation()); PlotArea area = location.getPlotArea(); if (area == null) { for (int i = blocks.size() - 1; i >= 0; i--) { - location = BukkitUtil.getLocation(blocks.get(i).getLocation()); + location = BukkitUtil.adapt(blocks.get(i).getLocation()); if (location.isPlotArea()) { blocks.remove(i); } @@ -1695,7 +1695,7 @@ import java.util.regex.Pattern; return; } for (int i = blocks.size() - 1; i >= 0; i--) { - location = BukkitUtil.getLocation(blocks.get(i).getLocation()); + location = BukkitUtil.adapt(blocks.get(i).getLocation()); if (!area.contains(location.getX(), location.getZ())) { blocks.remove(i); continue; @@ -1712,7 +1712,7 @@ import java.util.regex.Pattern; return; } for (int i = blocks.size() - 1; i >= 0; i--) { - location = BukkitUtil.getLocation(blocks.get(i).getLocation()); + location = BukkitUtil.adapt(blocks.get(i).getLocation()); Plot plot = area.getOwnedPlot(location); /* * plot → the base plot of the merged area @@ -1744,7 +1744,7 @@ import java.util.regex.Pattern; return; } Player player = (Player) clicker; - BukkitPlayer pp = BukkitUtil.getPlayer(player); + BukkitPlayer pp = BukkitUtil.adapt(player); final PlotInventory inventory = PlotInventory.getOpenPlotInventory(pp); if (inventory != null && event.getRawSlot() == event.getSlot()) { if (!inventory.onClick(event.getSlot())) { @@ -1831,7 +1831,7 @@ import java.util.regex.Pattern; return; } } - Location location = BukkitUtil.getLocation(state.getLocation()); + Location location = BukkitUtil.adapt(state.getLocation()); PlotArea area = location.getPlotArea(); if (area == null) { return; @@ -1875,7 +1875,7 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onPotionSplash(LingeringPotionSplashEvent event) { Projectile entity = event.getEntity(); - Location location = BukkitUtil.getLocation(entity); + Location location = BukkitUtil.adapt(entity.getLocation()); if (!this.plotAreaManager.hasPlotArea(location.getWorldName())) { return; } @@ -1890,14 +1890,14 @@ import java.util.regex.Pattern; if (!(entity instanceof ArmorStand) && !(entity instanceof ItemFrame)) { return; } - Location location = BukkitUtil.getLocation(e.getRightClicked().getLocation()); + Location location = BukkitUtil.adapt(e.getRightClicked().getLocation()); PlotArea area = location.getPlotArea(); if (area == null) { return; } EntitySpawnListener.testNether(entity); Plot plot = location.getPlotAbs(); - BukkitPlayer pp = BukkitUtil.getPlayer(e.getPlayer()); + BukkitPlayer pp = BukkitUtil.adapt(e.getPlayer()); if (plot == null) { if (!area.isRoadFlags() && !area.getRoadFlag(MiscInteractFlag.class) && !Permissions .hasPermission(pp, "plots.admin.interact.road")) { @@ -1941,7 +1941,7 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBigBoom(BlockExplodeEvent event) { Block block = event.getBlock(); - Location location = BukkitUtil.getLocation(block.getLocation()); + Location location = BukkitUtil.adapt(block.getLocation()); String world = location.getWorldName(); if (!this.plotAreaManager.hasPlotArea(world)) { return; @@ -1950,7 +1950,7 @@ import java.util.regex.Pattern; if (area == null) { Iterator iterator = event.blockList().iterator(); while (iterator.hasNext()) { - location = BukkitUtil.getLocation(iterator.next().getLocation()); + location = BukkitUtil.adapt(iterator.next().getLocation()); if (location.isPlotArea()) { iterator.remove(); } @@ -1965,14 +1965,14 @@ import java.util.regex.Pattern; } } event.blockList().removeIf( - blox -> !plot.equals(area.getOwnedPlot(BukkitUtil.getLocation(blox.getLocation())))); + blox -> !plot.equals(area.getOwnedPlot(BukkitUtil.adapt(blox.getLocation())))); } @EventHandler(priority = EventPriority.LOW) public void onCancelledInteract(PlayerInteractEvent event) { if (event.isCancelled() && event.getAction() == Action.RIGHT_CLICK_AIR) { Player player = event.getPlayer(); - BukkitPlayer pp = BukkitUtil.getPlayer(player); + BukkitPlayer pp = BukkitUtil.adapt(player); PlotArea area = pp.getPlotAreaAbs(); if (area == null) { return; @@ -1994,7 +1994,7 @@ import java.util.regex.Pattern; if (type.toString().toLowerCase().endsWith("_egg")) { Block block = player.getTargetBlockExact(5, FluidCollisionMode.SOURCE_ONLY); if (block != null && block.getType() != Material.AIR) { - Location location = BukkitUtil.getLocation(block.getLocation()); + Location location = BukkitUtil.adapt(block.getLocation()); if (!this.eventDispatcher .checkPlayerBlockEvent(pp, PlayerBlockEventType.SPAWN_MOB, location, null, true)) { @@ -2009,7 +2009,7 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onInteract(PlayerInteractEvent event) { Player player = event.getPlayer(); - BukkitPlayer pp = BukkitUtil.getPlayer(player); + BukkitPlayer pp = BukkitUtil.adapt(player); PlotArea area = pp.getPlotAreaAbs(); if (area == null) { return; @@ -2017,7 +2017,7 @@ import java.util.regex.Pattern; PlayerBlockEventType eventType = null; BlockType blocktype1; Block block = event.getClickedBlock(); - Location location = BukkitUtil.getLocation(block.getLocation()); + Location location = BukkitUtil.adapt(block.getLocation()); Action action = event.getAction(); outer: switch (action) { @@ -2106,14 +2106,14 @@ import java.util.regex.Pattern; break outer; case ARMOR_STAND: location = BukkitUtil - .getLocation(block.getRelative(event.getBlockFace()).getLocation()); + .adapt(block.getRelative(event.getBlockFace()).getLocation()); eventType = PlayerBlockEventType.PLACE_MISC; break outer; } break; } case LEFT_CLICK_BLOCK: { - location = BukkitUtil.getLocation(block.getLocation()); + location = BukkitUtil.adapt(block.getLocation()); //eventType = PlayerBlockEventType.BREAK_BLOCK; blocktype1 = BukkitAdapter.asBlockType(block.getType()); if (block.getType() == Material.DRAGON_EGG) { @@ -2142,7 +2142,7 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void creatureSpawnEvent(CreatureSpawnEvent event) { Entity entity = event.getEntity(); - Location location = BukkitUtil.getLocation(entity.getLocation()); + Location location = BukkitUtil.adapt(entity.getLocation()); PlotArea area = location.getPlotArea(); if (area == null) { return; @@ -2220,7 +2220,7 @@ import java.util.regex.Pattern; if (!this.plotAreaManager.hasPlotArea(worldName)) { return; } - Location location = BukkitUtil.getLocation(block.getLocation()); + Location location = BukkitUtil.adapt(block.getLocation()); PlotArea area = location.getPlotArea(); if (area == null) { return; @@ -2255,7 +2255,7 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockBurn(BlockBurnEvent event) { Block block = event.getBlock(); - Location location = BukkitUtil.getLocation(block.getLocation()); + Location location = BukkitUtil.adapt(block.getLocation()); PlotArea area = location.getPlotArea(); if (area == null) { @@ -2278,7 +2278,7 @@ import java.util.regex.Pattern; Entity ignitingEntity = event.getIgnitingEntity(); Block block = event.getBlock(); BlockIgniteEvent.IgniteCause igniteCause = event.getCause(); - Location location1 = BukkitUtil.getLocation(block.getLocation()); + Location location1 = BukkitUtil.adapt(block.getLocation()); PlotArea area = location1.getPlotArea(); if (area == null) { return; @@ -2290,7 +2290,7 @@ import java.util.regex.Pattern; Plot plot = area.getOwnedPlot(location1); if (player != null) { - BukkitPlayer pp = BukkitUtil.getPlayer(player); + BukkitPlayer pp = BukkitUtil.adapt(player); if (plot == null) { if (!Permissions.hasPermission(pp, Captions.PERMISSION_ADMIN_BUILD_ROAD)) { MainUtil.sendMessage(pp, Captions.NO_PERMISSION_EVENT, @@ -2329,11 +2329,11 @@ import java.util.regex.Pattern; Location location = null; if (fireball.getShooter() instanceof Entity) { Entity shooter = (Entity) fireball.getShooter(); - location = BukkitUtil.getLocation(shooter.getLocation()); + location = BukkitUtil.adapt(shooter.getLocation()); } else if (fireball.getShooter() instanceof BlockProjectileSource) { Block shooter = ((BlockProjectileSource) fireball.getShooter()).getBlock(); - location = BukkitUtil.getLocation(shooter.getLocation()); + location = BukkitUtil.adapt(shooter.getLocation()); } if (location != null && !plot.equals(location.getPlot())) { event.setCancelled(true); @@ -2343,7 +2343,7 @@ import java.util.regex.Pattern; } else if (event.getIgnitingBlock() != null) { Block ignitingBlock = event.getIgnitingBlock(); - Plot plotIgnited = BukkitUtil.getLocation(ignitingBlock.getLocation()).getPlot(); + Plot plotIgnited = BukkitUtil.adapt(ignitingBlock.getLocation()).getPlot(); if (igniteCause == BlockIgniteEvent.IgniteCause.FLINT_AND_STEEL && ( !plot.getFlag(BlockIgnitionFlag.class) || plotIgnited == null || !plotIgnited .equals(plot)) || (igniteCause == BlockIgniteEvent.IgniteCause.SPREAD @@ -2362,12 +2362,12 @@ import java.util.regex.Pattern; Block block = event.getBlockClicked().getLocation().add(bf.getModX(), bf.getModY(), bf.getModZ()) .getBlock(); - Location location = BukkitUtil.getLocation(block.getLocation()); + Location location = BukkitUtil.adapt(block.getLocation()); PlotArea area = location.getPlotArea(); if (area == null) { return; } - BukkitPlayer pp = BukkitUtil.getPlayer(event.getPlayer()); + BukkitPlayer pp = BukkitUtil.adapt(event.getPlayer()); Plot plot = area.getPlot(location); if (plot == null) { if (Permissions.hasPermission(pp, Captions.PERMISSION_ADMIN_BUILD_ROAD)) { @@ -2413,12 +2413,12 @@ import java.util.regex.Pattern; return; } Player player = (Player) closer; - PlotInventory.removePlotInventoryOpen(BukkitUtil.getPlayer(player)); + PlotInventory.removePlotInventoryOpen(BukkitUtil.adapt(player)); } @EventHandler(priority = EventPriority.MONITOR) public void onLeave(PlayerQuitEvent event) { TaskManager.removeFromTeleportQueue(event.getPlayer().getName()); - BukkitPlayer pp = BukkitUtil.getPlayer(event.getPlayer()); + BukkitPlayer pp = BukkitUtil.adapt(event.getPlayer()); pp.unregister(); this.logout(pp.getUUID()); } @@ -2426,13 +2426,13 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBucketFill(PlayerBucketFillEvent event) { Block blockClicked = event.getBlockClicked(); - Location location = BukkitUtil.getLocation(blockClicked.getLocation()); + Location location = BukkitUtil.adapt(blockClicked.getLocation()); PlotArea area = location.getPlotArea(); if (area == null) { return; } Player player = event.getPlayer(); - BukkitPlayer plotPlayer = BukkitUtil.getPlayer(player); + BukkitPlayer plotPlayer = BukkitUtil.adapt(player); Plot plot = area.getPlot(location); if (plot == null) { if (Permissions.hasPermission(plotPlayer, Captions.PERMISSION_ADMIN_BUILD_ROAD)) { @@ -2475,7 +2475,7 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onVehicleCreate(VehicleCreateEvent event) { Vehicle entity = event.getVehicle(); - Location location = BukkitUtil.getLocation(entity); + Location location = BukkitUtil.adapt(entity.getLocation()); PlotArea area = location.getPlotArea(); if (area == null) { return; @@ -2494,7 +2494,7 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onHangingPlace(HangingPlaceEvent event) { Block block = event.getBlock().getRelative(event.getBlockFace()); - Location location = BukkitUtil.getLocation(block.getLocation()); + Location location = BukkitUtil.adapt(block.getLocation()); PlotArea area = location.getPlotArea(); if (area == null) { return; @@ -2504,7 +2504,7 @@ import java.util.regex.Pattern; event.setCancelled(true); return; } - BukkitPlayer pp = BukkitUtil.getPlayer(p); + BukkitPlayer pp = BukkitUtil.adapt(p); Plot plot = area.getPlot(location); if (plot == null) { if (!Permissions.hasPermission(pp, Captions.PERMISSION_ADMIN_BUILD_ROAD)) { @@ -2543,12 +2543,12 @@ import java.util.regex.Pattern; Entity remover = event.getRemover(); if (remover instanceof Player) { Player p = (Player) remover; - Location location = BukkitUtil.getLocation(event.getEntity()); + Location location = BukkitUtil.adapt(event.getEntity().getLocation()); PlotArea area = location.getPlotArea(); if (area == null) { return; } - BukkitPlayer pp = BukkitUtil.getPlayer(p); + BukkitPlayer pp = BukkitUtil.adapt(p); Plot plot = area.getPlot(location); if (plot == null) { if (!Permissions.hasPermission(pp, Captions.PERMISSION_ADMIN_DESTROY_ROAD)) { @@ -2578,13 +2578,13 @@ import java.util.regex.Pattern; Projectile p = (Projectile) remover; if (p.getShooter() instanceof Player) { Player shooter = (Player) p.getShooter(); - Location location = BukkitUtil.getLocation(event.getEntity()); + Location location = BukkitUtil.adapt(event.getEntity().getLocation()); PlotArea area = location.getPlotArea(); if (area == null) { return; } - BukkitPlayer player = BukkitUtil.getPlayer(shooter); - Plot plot = area.getPlot(BukkitUtil.getLocation(event.getEntity())); + BukkitPlayer player = BukkitUtil.adapt(shooter); + Plot plot = area.getPlot(BukkitUtil.adapt(event.getEntity().getLocation())); if (plot != null) { if (!plot.hasOwner()) { if (!Permissions @@ -2614,13 +2614,13 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onPlayerInteractEntity(PlayerInteractEntityEvent event) { - Location location = BukkitUtil.getLocation(event.getRightClicked().getLocation()); + Location location = BukkitUtil.adapt(event.getRightClicked().getLocation()); PlotArea area = location.getPlotArea(); if (area == null) { return; } Player p = event.getPlayer(); - BukkitPlayer pp = BukkitUtil.getPlayer(p); + BukkitPlayer pp = BukkitUtil.adapt(p); Plot plot = area.getPlot(location); if (plot == null && !area.isRoadFlags()) { if (!Permissions.hasPermission(pp, Captions.PERMISSION_ADMIN_INTERACT_ROAD)) { @@ -2695,7 +2695,7 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onVehicleDestroy(VehicleDestroyEvent event) { - Location location = BukkitUtil.getLocation(event.getVehicle()); + Location location = BukkitUtil.adapt(event.getVehicle().getLocation()); PlotArea area = location.getPlotArea(); if (area == null) { return; @@ -2703,7 +2703,7 @@ import java.util.regex.Pattern; Entity attacker = event.getAttacker(); if (attacker instanceof Player) { Player p = (Player) attacker; - BukkitPlayer pp = BukkitUtil.getPlayer(p); + BukkitPlayer pp = BukkitUtil.adapt(p); Plot plot = area.getPlot(location); if (plot == null) { if (!Permissions.hasPermission(pp, "plots.admin.vehicle.break.road")) { @@ -2740,7 +2740,7 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onPotionSplash(PotionSplashEvent event) { ThrownPotion damager = event.getPotion(); - Location location = BukkitUtil.getLocation(damager); + Location location = BukkitUtil.adapt(damager.getLocation()); if (!this.plotAreaManager.hasPlotArea(location.getWorldName())) { return; } @@ -2770,7 +2770,7 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.HIGHEST) public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { Entity damager = event.getDamager(); - Location location = BukkitUtil.getLocation(damager); + Location location = BukkitUtil.adapt(damager.getLocation()); if (!this.plotAreaManager.hasPlotArea(location.getWorldName())) { return; } @@ -2804,8 +2804,8 @@ import java.util.regex.Pattern; private boolean entityDamage(Entity damager, Entity victim, EntityDamageEvent.DamageCause cause) { - Location dloc = BukkitUtil.getLocation(damager); - Location vloc = BukkitUtil.getLocation(victim); + Location dloc = BukkitUtil.adapt(damager.getLocation()); + Location vloc = BukkitUtil.adapt(victim.getLocation()); PlotArea dArea = dloc.getPlotArea(); PlotArea vArea; if (dArea != null && dArea.contains(vloc.getX(), vloc.getZ())) { @@ -2883,7 +2883,7 @@ import java.util.regex.Pattern; } else { // shooter is not player if (shooter instanceof BlockProjectileSource) { Location sLoc = BukkitUtil - .getLocation(((BlockProjectileSource) shooter).getBlock().getLocation()); + .adapt(((BlockProjectileSource) shooter).getBlock().getLocation()); dplot = dArea.getPlot(sLoc); } player = null; @@ -2892,7 +2892,7 @@ import java.util.regex.Pattern; player = null; } if (player != null) { - BukkitPlayer plotPlayer = BukkitUtil.getPlayer(player); + BukkitPlayer plotPlayer = BukkitUtil.adapt(player); final com.sk89q.worldedit.world.entity.EntityType entityType; @@ -3051,13 +3051,13 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onPlayerEggThrow(PlayerEggThrowEvent event) { - Location location = BukkitUtil.getLocation(event.getEgg().getLocation()); + Location location = BukkitUtil.adapt(event.getEgg().getLocation()); PlotArea area = location.getPlotArea(); if (area == null) { return; } Player player = event.getPlayer(); - BukkitPlayer plotPlayer = BukkitUtil.getPlayer(player); + BukkitPlayer plotPlayer = BukkitUtil.adapt(player); Plot plot = area.getPlot(location); if (plot == null) { if (!Permissions.hasPermission(plotPlayer, "plots.admin.projectile.road")) { @@ -3082,13 +3082,13 @@ import java.util.regex.Pattern; @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void blockCreate(BlockPlaceEvent event) { - Location location = BukkitUtil.getLocation(event.getBlock().getLocation()); + Location location = BukkitUtil.adapt(event.getBlock().getLocation()); PlotArea area = location.getPlotArea(); if (area == null) { return; } Player player = event.getPlayer(); - BukkitPlayer pp = BukkitUtil.getPlayer(player); + BukkitPlayer pp = BukkitUtil.adapt(player); Plot plot = area.getPlot(location); if (plot != null) { if ((location.getY() > area.getMaxBuildHeight() || location.getY() < area @@ -3149,7 +3149,7 @@ import java.util.regex.Pattern; if (event.getEntityType() != EntityType.PLAYER) { return; } - Location location = BukkitUtil.getLocation(event.getEntity()); + Location location = BukkitUtil.adapt(event.getEntity().getLocation()); PlotArea area = location.getPlotArea(); if (area == null) { return; @@ -3170,7 +3170,7 @@ import java.util.regex.Pattern; @EventHandler public void onItemDrop(PlayerDropItemEvent event) { Player player = event.getPlayer(); - BukkitPlayer pp = BukkitUtil.getPlayer(player); + BukkitPlayer pp = BukkitUtil.adapt(player); Location location = pp.getLocation(); PlotArea area = location.getPlotArea(); if (area == null) { @@ -3196,7 +3196,7 @@ import java.util.regex.Pattern; LivingEntity ent = event.getEntity(); if (ent instanceof Player) { Player player = (Player) ent; - BukkitPlayer pp = BukkitUtil.getPlayer(player); + BukkitPlayer pp = BukkitUtil.adapt(player); Location location = pp.getLocation(); PlotArea area = location.getPlotArea(); if (area == null) { @@ -3219,7 +3219,7 @@ import java.util.regex.Pattern; } @EventHandler public void onDeath(final PlayerDeathEvent event) { - Location location = BukkitUtil.getLocation(event.getEntity()); + Location location = BukkitUtil.adapt(event.getEntity().getLocation()); PlotArea area = location.getPlotArea(); if (area == null) { return; diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/player/BukkitPlayer.java b/Bukkit/src/main/java/com/plotsquared/bukkit/player/BukkitPlayer.java index 8ee58b2f5..15d9bacf8 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/player/BukkitPlayer.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/player/BukkitPlayer.java @@ -112,11 +112,6 @@ public class BukkitPlayer extends PlotPlayer { return this.player; } - @Nonnull @Override public Location getLocation() { - final Location location = super.getLocation(); - return location == null ? BukkitUtil.getLocation(this.player) : location; - } - @Nonnull @Override public UUID getUUID() { if (Settings.UUID.OFFLINE) { if (Settings.UUID.FORCE_LOWERCASE) { @@ -135,7 +130,7 @@ public class BukkitPlayer extends PlotPlayer { } @Override public boolean canTeleport(@Nonnull final Location location) { - final org.bukkit.Location to = BukkitUtil.getLocation(location); + final org.bukkit.Location to = BukkitUtil.adapt(location); final org.bukkit.Location from = player.getLocation(); PlayerTeleportEvent event = new PlayerTeleportEvent(player, from, to); callEvent(event); @@ -276,7 +271,7 @@ public class BukkitPlayer extends PlotPlayer { } @Override public Location getLocationFull() { - return BukkitUtil.getLocationFull(this.player); + return BukkitUtil.adaptComplete(this.player.getLocation()); } @Override public void setWeather(@Nonnull final PlotWeather weather) { @@ -347,7 +342,7 @@ public class BukkitPlayer extends PlotPlayer { // this.player.playEffect(BukkitUtil.getLocation(location), Effect.RECORD_PLAY, Material.AIR); } else { // this.player.playEffect(BukkitUtil.getLocation(location), Effect.RECORD_PLAY, id.to(Material.class)); - this.player.playSound(BukkitUtil.getLocation(location), + this.player.playSound(BukkitUtil.adapt(location), Sound.valueOf(BukkitAdapter.adapt(id).name()), Float.MAX_VALUE, 1f); } } diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/util/BukkitRegionManager.java b/Bukkit/src/main/java/com/plotsquared/bukkit/util/BukkitRegionManager.java index f9b0eb563..660a42148 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/util/BukkitRegionManager.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/util/BukkitRegionManager.java @@ -171,7 +171,7 @@ import static com.plotsquared.core.util.entity.EntityCategories.CAP_VEHICLE; if (X > bx && X < tx && Z > bz && Z < tz) { count(count, entity); } else { - Plot other = area.getPlot(BukkitUtil.getLocation(location)); + Plot other = area.getPlot(BukkitUtil.adapt(location)); if (plot.equals(other)) { count(count, entity); } @@ -186,7 +186,7 @@ import static com.plotsquared.core.util.entity.EntityCategories.CAP_VEHICLE; Entity[] entities1 = chunk.getEntities(); for (Entity entity : entities1) { if (X == bx || X == tx || Z == bz || Z == tz) { - Plot other = area.getPlot(BukkitUtil.getLocation(entity)); + Plot other = area.getPlot(BukkitUtil.adapt(entity.getLocation())); if (plot.equals(other)) { count(count, entity); } @@ -411,7 +411,15 @@ import static com.plotsquared.core.util.entity.EntityCategories.CAP_VEHICLE; @Override public void clearAllEntities(Location pos1, Location pos2) { String world = pos1.getWorldName(); - List entities = BukkitUtil.getEntities(world); + + final World bukkitWorld = BukkitUtil.getWorld(world); + final List entities; + if (bukkitWorld != null) { + entities = new ArrayList<>(bukkitWorld.getEntities()); + } else { + entities = new ArrayList<>(); + } + int bx = pos1.getX(); int bz = pos1.getZ(); int tx = pos2.getX(); diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/util/BukkitUtil.java b/Bukkit/src/main/java/com/plotsquared/bukkit/util/BukkitUtil.java index 75ac9a1be..5cbbf6cfc 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/util/BukkitUtil.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/util/BukkitUtil.java @@ -31,12 +31,9 @@ import com.plotsquared.bukkit.BukkitPlatform; import com.plotsquared.bukkit.player.BukkitPlayer; import com.plotsquared.bukkit.player.BukkitPlayerManager; import com.plotsquared.core.PlotSquared; -import com.plotsquared.core.configuration.Captions; import com.plotsquared.core.location.Location; import com.plotsquared.core.player.PlotPlayer; -import com.plotsquared.core.plot.Plot; import com.plotsquared.core.util.BlockUtil; -import com.plotsquared.core.util.MainUtil; import com.plotsquared.core.util.MathMan; import com.plotsquared.core.util.PlayerManager; import com.plotsquared.core.util.RegionManager; @@ -97,12 +94,11 @@ import org.bukkit.entity.WaterMob; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Nonnegative; import javax.annotation.Nonnull; import javax.annotation.Nullable; -import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; -import java.util.List; import java.util.Objects; import java.util.Set; import java.util.UUID; @@ -114,27 +110,23 @@ import java.util.stream.Stream; @Singleton public class BukkitUtil extends WorldUtil { private static final Logger logger = LoggerFactory.getLogger("P2/" + BukkitUtil.class.getSimpleName()); - - private static String lastString = null; - private static World lastWorld = null; - - private static Player lastPlayer = null; - private static BukkitPlayer lastPlotPlayer = null; + private final Collection tileEntityTypes = new HashSet<>(); @Inject public BukkitUtil(@Nonnull final RegionManager regionManager) { super(regionManager); } - public static void removePlayer(UUID uuid) { - lastPlayer = null; - lastPlotPlayer = null; - // Make sure that it's removed internally - PlotSquared.platform().getPlayerManager().removePlayer(uuid); - } - - public static PlotPlayer getPlayer(@Nonnull final OfflinePlayer op) { + /** + * Get a {@link PlotPlayer} from an {@link OfflinePlayer}. If the player is + * online, it returns a complete player. If the player is offline, it creates + * a fake player + * + * @param op Offline player + * @return Plot player instance + */ + @Nonnull public static PlotPlayer adapt(@Nonnull final OfflinePlayer op) { if (op.isOnline()) { - return getPlayer(op.getPlayer()); + return adapt(Objects.requireNonNull(op.getPlayer())); } final Player player = OfflinePlayerUtil.loadPlayer(op); player.loadData(); @@ -143,55 +135,83 @@ import java.util.stream.Stream; } /** - * Get a plot based on the location. + * Turn a Bukkit {@link Player} into a PlotSquared {@link PlotPlayer} * - * @param location the location to check - * @return plot if found, otherwise it creates a temporary plot - * @see Plot + * @param player Bukkit player + * @return PlotSquared player */ - public static Plot getPlot(org.bukkit.Location location) { - if (location == null) { - return null; + @Nonnull public static BukkitPlayer adapt(@Nonnull final Player player) { + final PlayerManager playerManager = PlotSquared.platform().getPlayerManager(); + return ((BukkitPlayerManager) playerManager).getPlayer(player); + } + + /** + * Turn a Bukkit {@link org.bukkit.Location} into a PlotSquared {@link Location}. + * This only copies the 4-tuple (world,x,y,z) and does not include the yaw and the pitch + * + * @param location Bukkit location + * @return PlotSquared location + */ + @Nonnull public static Location adapt(@Nonnull final org.bukkit.Location location) { + return Location.at(com.plotsquared.bukkit.util.BukkitWorld.of(location.getWorld()), + MathMan.roundInt(location.getX()), MathMan.roundInt(location.getY()), MathMan.roundInt(location.getZ())); + } + + /** + * Turn a Bukkit {@link org.bukkit.Location} into a PlotSquared {@link Location}. + * This copies the entire 6-tuple (world,x,y,z,yaw,pitch). + * + * @param location Bukkit location + * @return PlotSquared location + */ + @Nonnull public static Location adaptComplete(@Nonnull final org.bukkit.Location location) { + return Location.at(com.plotsquared.bukkit.util.BukkitWorld.of(location.getWorld()), + MathMan.roundInt(location.getX()), MathMan.roundInt(location.getY()), MathMan.roundInt(location.getZ()), location.getYaw(), + location.getPitch()); + } + + /** + * Turn a PlotSquared {@link Location} into a Bukkit {@link org.bukkit.Location}. + * This only copies the 4-tuple (world,x,y,z) and does not include the yaw and the pitch + * + * @param location PlotSquared location + * @return Bukkit location + */ + @Nonnull public static org.bukkit.Location adapt(@Nonnull final Location location) { + return new org.bukkit.Location((World) location.getWorld().getPlatformWorld(), location.getX(), + location.getY(), location.getZ()); + } + + /** + * Get a Bukkit {@link World} from its name + * + * @param string World name + * @return World if it exists, or {@code null} + */ + @Nullable public static World getWorld(@Nonnull final String string) { + return Bukkit.getWorld(string); + } + + private static void ensureLoaded(@Nonnull final String world, final int x, final int z, + @Nonnull final Consumer chunkConsumer) { + PaperLib.getChunkAtAsync(Objects.requireNonNull(getWorld(world)), + x >> 4, z >> 4, true) + .thenAccept(chunk -> ensureMainThread(chunkConsumer, chunk)); + } + + private static void ensureLoaded(@Nonnull final Location location, @Nonnull final Consumer chunkConsumer) { + PaperLib.getChunkAtAsync(adapt(location), true) + .thenAccept(chunk -> ensureMainThread(chunkConsumer, chunk)); + } + + private static void ensureMainThread(@Nonnull final Consumer consumer, + @Nonnull final T value) { + if (Bukkit.isPrimaryThread()) { + consumer.accept(value); + } else { + Bukkit.getScheduler() + .runTask(BukkitPlatform.getPlugin(BukkitPlatform.class), () -> consumer.accept(value)); } - return getLocation(location).getPlot(); - } - - /** - * Get a plot based on the player location. - * - * @param player the player to check - * @return plot if found, otherwise it creates a temporary plot - * @see #getPlot(org.bukkit.Location) - * @see Plot - */ - public static Plot getPlot(Player player) { - return getPlot(player.getLocation()); - } - - /** - * Get the PlotPlayer for an offline player. - * - *

Note that this will work if the player is offline, however not all - * functionality will work. - * - * @param player the player to wrap - * @return a {@code PlotPlayer} - * @see PlotPlayer#wrap(Object) - */ - public static PlotPlayer wrapPlayer(OfflinePlayer player) { - return PlotPlayer.wrap(player); - } - - /** - * Gets the PlotPlayer for a player. The PlotPlayer is usually cached and - * will provide useful functions relating to players. - * - * @param player the player to wrap - * @return a {@code PlotPlayer} - * @see PlotPlayer#wrap(Object) - */ - public static PlotPlayer wrapPlayer(Player player) { - return PlotPlayer.wrap(player); } /** @@ -202,145 +222,17 @@ import java.util.stream.Stream; * @return a {@code PlotPlayer} * @see PlotPlayer#wrap(Object) */ - @Override public PlotPlayer wrapPlayer(UUID uuid) { + @Override @Nonnull public PlotPlayer getPlayer(@Nonnull final UUID uuid) { return PlotPlayer.wrap(Bukkit.getOfflinePlayer(uuid)); } - /** - * Gets the number of plots, which the player is able to build in. - * - * @param player player, for whom we're getting the plots - * @return the number of allowed plots - */ - public static int getAllowedPlots(Player player) { - PlotPlayer plotPlayer = PlotPlayer.wrap(player); - return plotPlayer.getAllowedPlots(); - } - - /** - * Check whether or not a player is in a plot. - * - * @param player who we're checking for - * @return true if the player is in a plot, false if not- - */ - public static boolean isInPlot(Player player) { - return getPlot(player) != null; - } - - /** - * Gets a collection containing the players plots. - * - * @param world Specify the world we want to select the plots from - * @param player Player, for whom we're getting the plots - * @return a set containing the players plots - * @see Plot - */ - public static Set getPlayerPlots(String world, Player player) { - if (world == null) { - return new HashSet<>(); - } - return BukkitPlayer.wrap(player).getPlots(world); - } - - /** - * Send a message to a player. The message supports color codes. - * - * @param player the recipient of the message - * @param string the message - * @see MainUtil#sendMessage(PlotPlayer, String) - */ - public static void sendMessage(Player player, String string) { - MainUtil.sendMessage(BukkitUtil.getPlayer(player), string); - } - - /** - * Gets the player plot count. - * - * @param world Specify the world we want to select the plots from - * @param player Player, for whom we're getting the plot count - * @return the number of plots the player has - */ - public static int getPlayerPlotCount(String world, Player player) { - if (world == null) { - return 0; - } - return BukkitUtil.getPlayer(player).getPlotCount(world); - } - - /** - * Send a message to a player. - * - * @param player the recipient of the message - * @param caption the message - */ - public static void sendMessage(Player player, Captions caption) { - MainUtil.sendMessage(BukkitUtil.getPlayer(player), caption); - } - - public static BukkitPlayer getPlayer(@Nonnull final Player player) { - if (player == lastPlayer) { - return lastPlotPlayer; - } - final PlayerManager playerManager = PlotSquared.platform().getPlayerManager(); - return ((BukkitPlayerManager) playerManager).getPlayer(player); - } - - public static Location getLocation(final org.bukkit.Location location) { - return Location.at(com.plotsquared.bukkit.util.BukkitWorld.of(location.getWorld()), - MathMan.roundInt(location.getX()), MathMan.roundInt(location.getY()), MathMan.roundInt(location.getZ())); - } - - public static Location getLocationFull(final org.bukkit.Location location) { - return Location.at(com.plotsquared.bukkit.util.BukkitWorld.of(location.getWorld()), - MathMan.roundInt(location.getX()), MathMan.roundInt(location.getY()), MathMan.roundInt(location.getZ()), location.getYaw(), - location.getPitch()); - } - - public static org.bukkit.Location getLocation(@Nonnull final Location location) { - return new org.bukkit.Location((World) location.getWorld().getPlatformWorld(), location.getX(), - location.getY(), location.getZ()); - } - - public static World getWorld(@Nonnull final String string) { - return Bukkit.getWorld(string); - } - - public static String getWorld(@Nonnull final Entity entity) { - return entity.getWorld().getName(); - } - - public static List getEntities(@Nonnull final String worldName) { - World world = getWorld(worldName); - if (world != null) { - return world.getEntities(); - } else { - return new ArrayList<>(); - } - } - - public static Location getLocation(@Nonnull final Entity entity) { - final org.bukkit.Location location = entity.getLocation(); - String world = location.getWorld().getName(); - return Location.at(world, location.getBlockX(), location.getBlockY(), - location.getBlockZ()); - } - - @Nonnull public static Location getLocationFull(@Nonnull final Entity entity) { - final org.bukkit.Location location = entity.getLocation(); - return Location.at(location.getWorld().getName(), MathMan.roundInt(location.getX()), - MathMan.roundInt(location.getY()), MathMan.roundInt(location.getZ()), location.getYaw(), - location.getPitch()); - } - - public static Material getMaterial(@Nonnull final BlockState plotBlock) { - return BukkitAdapter.adapt(plotBlock.getBlockType()); - } - - @Override public boolean isBlockSame(BlockState block1, BlockState block2) { + @Override public boolean isBlockSame(@Nonnull final BlockState block1, + @Nonnull final BlockState block2) { if (block1.equals(block2)) { return true; } - Material mat1 = getMaterial(block1), mat2 = getMaterial(block2); + final Material mat1 = BukkitAdapter.adapt(block1.getBlockType()); + final Material mat2 = BukkitAdapter.adapt(block2.getBlockType()); return mat1 == mat2; } @@ -348,20 +240,22 @@ import java.util.stream.Stream; return getWorld(worldName) != null; } - @Override public void getBiome(String world, int x, int z, final Consumer result) { + @Override public void getBiome(@Nonnull final String world, final int x, + final int z, @Nonnull final Consumer result) { ensureLoaded(world, x, z, chunk -> result.accept(BukkitAdapter.adapt(getWorld(world).getBiome(x, z)))); } - @Override public BiomeType getBiomeSynchronous(String world, int x, int z) { - return BukkitAdapter.adapt(getWorld(world).getBiome(x, z)); + @Override @Nonnull public BiomeType getBiomeSynchronous(@Nonnull final String world, + final int x, final int z) { + return BukkitAdapter.adapt(Objects.requireNonNull(getWorld(world)).getBiome(x, z)); } @Override public void getHighestBlock(@Nonnull final String world, final int x, final int z, - final IntConsumer result) { + @Nonnull final IntConsumer result) { ensureLoaded(world, x, z, chunk -> { - final World bukkitWorld = getWorld(world); + final World bukkitWorld = Objects.requireNonNull(getWorld(world)); // Skip top and bottom block int air = 1; for (int y = bukkitWorld.getMaxHeight() - 1; y >= 0; y--) { @@ -385,8 +279,10 @@ import java.util.stream.Stream; }); } - @Override public int getHighestBlockSynchronous(String world, int x, int z) { - final World bukkitWorld = getWorld(world); + @Override @Nonnegative + public int getHighestBlockSynchronous(@Nonnull final String world, + final int x, final int z) { + final World bukkitWorld = Objects.requireNonNull(getWorld(world)); // Skip top and bottom block int air = 1; for (int y = bukkitWorld.getMaxHeight() - 1; y >= 0; y--) { @@ -407,19 +303,9 @@ import java.util.stream.Stream; return bukkitWorld.getMaxHeight() - 1; } - @Override - public void getSign(@Nonnull final Location location, final Consumer result) { - ensureLoaded(location, chunk -> { - final Block block = chunk.getWorld().getBlockAt(getLocation(location)); - if (block.getState() instanceof Sign) { - Sign sign = (Sign) block.getState(); - result.accept(sign.getLines()); - } - }); - } - - @Override @Nullable public String[] getSignSynchronous(@Nonnull final Location location) { - Block block = getWorld(location.getWorldName()) + @Override @Nonnull + public String[] getSignSynchronous(@Nonnull final Location location) { + Block block = Objects.requireNonNull(getWorld(location.getWorldName())) .getBlockAt(location.getX(), location.getY(), location.getZ()); try { return TaskManager.getPlatformImplementation().sync(() -> { @@ -435,7 +321,8 @@ import java.util.stream.Stream; return new String[0]; } - @Override public Location getSpawn(@Nonnull final String world) { + @Override @Nonnull + public Location getSpawn(@Nonnull final String world) { final org.bukkit.Location temp = getWorld(world).getSpawnLocation(); return Location.at(world, temp.getBlockX(), temp.getBlockY(), temp.getBlockZ(), temp.getYaw(), temp.getPitch()); @@ -495,27 +382,16 @@ import java.util.stream.Stream; }); } - @Override public boolean isBlockSolid(@Nonnull final BlockState block) { - return block.getBlockType().getMaterial().isSolid(); - } - - @Override public String getClosestMatchingName(@Nonnull final BlockState block) { - try { - return getMaterial(block).name(); - } catch (Exception ignored) { - return null; - } - } - - @Override @Nullable - public StringComparison.ComparisonResult getClosestBlock(String name) { + @Override @Nonnull + public StringComparison.ComparisonResult getClosestBlock(@Nonnull String name) { BlockState state = BlockUtil.get(name); return new StringComparison().new ComparisonResult(1, state); } @Override - public void setBiomes(@Nonnull final String worldName, @Nonnull final CuboidRegion region, - @Nonnull final BiomeType biomeType) { + public void setBiomes(@Nonnull final String worldName, + @Nonnull final CuboidRegion region, + @Nonnull final BiomeType biomeType) { final World world = getWorld(worldName); if (world == null) { logger.warn("[P2] An error occured while setting the biome because the world was null", new RuntimeException()); @@ -532,48 +408,54 @@ import java.util.stream.Stream; } } - public com.sk89q.worldedit.world.World getWeWorld(String world) { + @Override @Nonnull public com.sk89q.worldedit.world.World getWeWorld(@Nonnull final String world) { return new BukkitWorld(Bukkit.getWorld(world)); } @Override - public void getBlock(@Nonnull final Location location, final Consumer result) { + public void getBlock(@Nonnull final Location location, + @Nonnull final Consumer result) { ensureLoaded(location, chunk -> { final World world = getWorld(location.getWorldName()); - final Block block = world.getBlockAt(location.getX(), location.getY(), location.getZ()); - result.accept(BukkitAdapter.asBlockType(block.getType()).getDefaultState()); + final Block block = Objects.requireNonNull(world) + .getBlockAt(location.getX(), location.getY(), location.getZ()); + result.accept(Objects.requireNonNull(BukkitAdapter + .asBlockType(block.getType())).getDefaultState()); }); } - @Override public BlockState getBlockSynchronous(@Nonnull final Location location) { + @Override @Nonnull public BlockState getBlockSynchronous(@Nonnull final Location location) { final World world = getWorld(location.getWorldName()); - final Block block = world.getBlockAt(location.getX(), location.getY(), location.getZ()); - return BukkitAdapter.asBlockType(block.getType()).getDefaultState(); + final Block block = Objects.requireNonNull(world) + .getBlockAt(location.getX(), location.getY(), location.getZ()); + return Objects.requireNonNull(BukkitAdapter + .asBlockType(block.getType())).getDefaultState(); } - @Override public String getMainWorld() { - return Bukkit.getWorlds().get(0).getName(); + @Override @Nonnegative public double getHealth(@Nonnull final PlotPlayer player) { + return Objects.requireNonNull(Bukkit + .getPlayer(player.getUUID())).getHealth(); } - @Override public double getHealth(PlotPlayer player) { - return Bukkit.getPlayer(player.getUUID()).getHealth(); + @Override @Nonnegative public int getFoodLevel(@Nonnull final PlotPlayer player) { + return Objects.requireNonNull(Bukkit.getPlayer(player.getUUID())) + .getFoodLevel(); } - @Override public int getFoodLevel(PlotPlayer player) { - return Bukkit.getPlayer(player.getUUID()).getFoodLevel(); + @Override public void setHealth(@Nonnull final PlotPlayer player, + @Nonnegative final double health) { + Objects.requireNonNull(Bukkit.getPlayer(player.getUUID())) + .setHealth(health); } - @Override public void setHealth(PlotPlayer player, double health) { - Bukkit.getPlayer(player.getUUID()).setHealth(health); - } - - @Override public void setFoodLevel(PlotPlayer player, int foodLevel) { + @Override public void setFoodLevel(@Nonnull final PlotPlayer player, + @Nonnegative final int foodLevel) { Bukkit.getPlayer(player.getUUID()).setFoodLevel(foodLevel); } - @Override + @Override @Nonnull public Set getTypesInCategory( - final String category) { + @Nonnull final String category) { final Collection> allowedInterfaces = new HashSet<>(); switch (category) { case "animal": { @@ -653,8 +535,7 @@ import java.util.stream.Stream; return types; } - private final Collection tileEntityTypes = new HashSet<>(); - @Override public Collection getTileEntityTypes() { + @Override @Nonnull public Collection getTileEntityTypes() { if (this.tileEntityTypes.isEmpty()) { // Categories tileEntityTypes.addAll(BlockCategories.BANNERS.getAll()); @@ -679,30 +560,12 @@ import java.util.stream.Stream; return this.tileEntityTypes; } - @Override - public int getTileEntityCount(String world, BlockVector2 chunk) { - return Bukkit.getWorld(world).getChunkAt(chunk.getBlockX(), chunk.getBlockZ()) + @Override @Nonnegative + public int getTileEntityCount(@Nonnull final String world, + @Nonnull final BlockVector2 chunk) { + return Objects.requireNonNull(getWorld(world)). + getChunkAt(chunk.getBlockX(), chunk.getBlockZ()) .getTileEntities().length; } - private static void ensureLoaded(final String world, final int x, final int z, - final Consumer chunkConsumer) { - PaperLib.getChunkAtAsync(getWorld(world), x >> 4, z >> 4, true) - .thenAccept(chunk -> ensureMainThread(chunkConsumer, chunk)); - } - - private static void ensureLoaded(final Location location, final Consumer chunkConsumer) { - PaperLib.getChunkAtAsync(getLocation(location), true) - .thenAccept(chunk -> ensureMainThread(chunkConsumer, chunk)); - } - - private static void ensureMainThread(final Consumer consumer, final T value) { - if (Bukkit.isPrimaryThread()) { - consumer.accept(value); - } else { - Bukkit.getScheduler() - .runTask(BukkitPlatform.getPlugin(BukkitPlatform.class), () -> consumer.accept(value)); - } - } - } diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/util/ContentMap.java b/Bukkit/src/main/java/com/plotsquared/bukkit/util/ContentMap.java index 47d6d23ec..03e46582f 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/util/ContentMap.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/util/ContentMap.java @@ -77,7 +77,7 @@ public class ContentMap { void saveEntitiesOut(Chunk chunk, CuboidRegion region) { for (Entity entity : chunk.getEntities()) { - Location location = BukkitUtil.getLocation(entity); + Location location = BukkitUtil.adapt(entity.getLocation()); int x = location.getX(); int z = location.getZ(); if (BukkitChunkManager.isIn(region, x, z)) { @@ -99,7 +99,7 @@ public class ContentMap { void saveEntitiesIn(Chunk chunk, CuboidRegion region, int offsetX, int offsetZ, boolean delete) { for (Entity entity : chunk.getEntities()) { - Location location = BukkitUtil.getLocation(entity); + Location location = BukkitUtil.adapt(entity.getLocation()); int x = location.getX(); int z = location.getZ(); if (!BukkitChunkManager.isIn(region, x, z)) { diff --git a/Core/src/main/java/com/plotsquared/core/PlotPlatform.java b/Core/src/main/java/com/plotsquared/core/PlotPlatform.java index 9a8ff4211..dc3136372 100644 --- a/Core/src/main/java/com/plotsquared/core/PlotPlatform.java +++ b/Core/src/main/java/com/plotsquared/core/PlotPlatform.java @@ -137,7 +137,7 @@ public interface PlotPlatform

extends ILogger { * * @param player the player to remove */ - void unregister(PlotPlayer player); + void unregister(PlotPlayer player); /** * Gets the generator wrapper for a world (world) and generator (name). diff --git a/Core/src/main/java/com/plotsquared/core/listener/PlotListener.java b/Core/src/main/java/com/plotsquared/core/listener/PlotListener.java index d534dfa4b..911f65286 100644 --- a/Core/src/main/java/com/plotsquared/core/listener/PlotListener.java +++ b/Core/src/main/java/com/plotsquared/core/listener/PlotListener.java @@ -114,7 +114,7 @@ public class PlotListener { ++value.count; if (value.count == value.interval) { value.count = 0; - PlotPlayer player = PlotSquared.platform().getWorldUtil().wrapPlayer(entry.getKey()); + PlotPlayer player = PlotSquared.platform().getWorldUtil().getPlayer(entry.getKey()); if (player == null) { iterator.remove(); continue; diff --git a/Core/src/main/java/com/plotsquared/core/plot/Plot.java b/Core/src/main/java/com/plotsquared/core/plot/Plot.java index 93084adee..ba2384661 100644 --- a/Core/src/main/java/com/plotsquared/core/plot/Plot.java +++ b/Core/src/main/java/com/plotsquared/core/plot/Plot.java @@ -1827,7 +1827,7 @@ public class Plot { DBFunc.createPlotAndSettings(this, () -> { PlotArea plotworld = Plot.this.area; if (notify && plotworld.isAutoMerge()) { - PlotPlayer player = this.worldUtil.wrapPlayer(uuid); + PlotPlayer player = this.worldUtil.getPlayer(uuid); PlotMergeEvent event = this.eventDispatcher .callMerge(this, Direction.ALL, Integer.MAX_VALUE, player); if (event.getEventResult() == Result.DENY) { diff --git a/Core/src/main/java/com/plotsquared/core/util/MainUtil.java b/Core/src/main/java/com/plotsquared/core/util/MainUtil.java index 22e09bf9c..edfa3f902 100644 --- a/Core/src/main/java/com/plotsquared/core/util/MainUtil.java +++ b/Core/src/main/java/com/plotsquared/core/util/MainUtil.java @@ -55,11 +55,11 @@ import com.sk89q.worldedit.math.BlockVector2; import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.world.biome.BiomeType; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.io.File; import java.io.IOException; import java.io.OutputStream; @@ -154,8 +154,9 @@ public class MainUtil { } } - public static void upload(UUID uuid, String file, String extension, - final RunnableVal writeTask, final RunnableVal whenDone) { + public static void upload(@Nullable UUID uuid, @Nullable final String file, + @Nonnull final String extension, @Nullable final RunnableVal writeTask, + @Nonnull final RunnableVal whenDone) { if (writeTask == null) { TaskManager.runTask(whenDone); return; diff --git a/Core/src/main/java/com/plotsquared/core/util/WorldUtil.java b/Core/src/main/java/com/plotsquared/core/util/WorldUtil.java index 5d58c1c19..c8c7a6662 100644 --- a/Core/src/main/java/com/plotsquared/core/util/WorldUtil.java +++ b/Core/src/main/java/com/plotsquared/core/util/WorldUtil.java @@ -41,8 +41,10 @@ import com.sk89q.worldedit.world.biome.BiomeType; import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockType; import com.sk89q.worldedit.world.entity.EntityType; -import javax.annotation.Nonnull; +import javax.annotation.Nonnegative; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; @@ -68,58 +70,149 @@ public abstract class WorldUtil { this.regionManager = regionManager; } - public abstract String getMainWorld(); - - public abstract boolean isWorld(String worldName); - - public abstract void getSign(Location location, Consumer result); + /** + * Check if a given world name corresponds to a real world + * + * @param worldName World name + * @return {@code true} if there exists a world with the given world name, + * {@code false} if not + */ + public abstract boolean isWorld(@Nonnull String worldName); /** + * @param location Sign location + * @return Sign content (or an empty string array if the block is not a sign) * @deprecated May result in synchronous chunk loading */ - @Deprecated public abstract String[] getSignSynchronous(Location location); - - public abstract Location getSpawn(String world); - - public abstract void setSpawn(Location location); - - public abstract void saveWorld(String world); - - public abstract String getClosestMatchingName(BlockState plotBlock); - - public abstract boolean isBlockSolid(BlockState block); - - public abstract StringComparison.ComparisonResult getClosestBlock(String name); - - public abstract void getBiome(String world, int x, int z, Consumer result); + @Deprecated @Nonnull public abstract String[] getSignSynchronous(@Nonnull Location location); /** - * @deprecated May result in synchronous chunk loading + * Get the world spawn location + * + * @param world World name + * @return World spawn location */ - @Deprecated public abstract BiomeType getBiomeSynchronous(String world, int x, int z); - - public abstract void getBlock(Location location, Consumer result); + @Nonnull public abstract Location getSpawn(@Nonnull String world); /** - * @deprecated May result in synchronous chunk loading + * Set the world spawn location + * + * @param location New spawn */ - @Deprecated public abstract BlockState getBlockSynchronous(Location location); - - public abstract void getHighestBlock(String world, int x, int z, final IntConsumer result); + public abstract void setSpawn(@Nonnull Location location); /** - * @deprecated May result in synchronous chunk loading + * Save a world + * + * @param world World name */ - @Deprecated public abstract int getHighestBlockSynchronous(String world, int x, int z); + public abstract void saveWorld(@Nonnull String world); - public abstract void setSign(String world, int x, int y, int z, String[] lines); + /** + * Get a string comparison with the closets block state matching a given string + * + * @param name Block name + * @return Comparison result containing the closets matching block + */ + @Nonnull public abstract StringComparison.ComparisonResult getClosestBlock( + @Nonnull String name); - public abstract void setBiomes(String world, CuboidRegion region, BiomeType biome); + /** + * Get the biome in a given chunk, asynchronously + * + * @param world World + * @param x Chunk X coordinate + * @param z Chunk Z coordinate + * @param result Result consumer + */ + public abstract void getBiome(@Nonnull String world, int x, int z, + @Nonnull Consumer result); - public abstract com.sk89q.worldedit.world.World getWeWorld(String world); + /** + * Get the biome in a given chunk, asynchronously + * + * @param world World + * @param x Chunk X coordinate + * @param z Chunk Z coordinate + * @return Biome + * @deprecated Use {@link #getBiome(String, int, int, Consumer)} + */ + @Deprecated @Nonnull public abstract BiomeType getBiomeSynchronous(@Nonnull String world, int x, + int z); - public void upload(@Nonnull final Plot plot, UUID uuid, String file, - RunnableVal whenDone) { + /** + * Get the block at a given location (asynchronously) + * + * @param location Block location + * @param result Result consumer + */ + public abstract void getBlock(@Nonnull Location location, @Nonnull Consumer result); + + /** + * Get the block at a given location (synchronously) + * + * @param location Block location + * @return Result + * @deprecated Use {@link #getBlock(Location, Consumer)} + */ + @Deprecated @Nonnull public abstract BlockState getBlockSynchronous(@Nonnull Location location); + + /** + * Get the Y coordinate of the highest non-air block in the world, asynchronously + * + * @param world World name + * @param x X coordinate + * @param z Z coordinate + * @param result Result consumer + */ + public abstract void getHighestBlock(@Nonnull String world, int x, int z, + @Nonnull IntConsumer result); + + + /** + * Get the Y coordinate of the highest non-air block in the world, synchronously + * + * @param world World name + * @param x X coordinate + * @param z Z coordinate + * @return Result + * @deprecated Use {@link #getHighestBlock(String, int, int, IntConsumer)} + */ + @Deprecated @Nonnegative + public abstract int getHighestBlockSynchronous(@Nonnull String world, int x, int z); + + /** + * Set the text in a sign + * + * @param world World name + * @param x X coordinate + * @param y Y coordinate + * @param z Z coordinate + * @param lines Sign text + */ + public abstract void setSign(@Nonnull String world, int x, int y, int z, + @Nonnull String[] lines); + + /** + * Set the biome in a region + * + * @param world World name + * @param region Region + * @param biome New biome + */ + public abstract void setBiomes(@Nonnull String world, @Nonnull CuboidRegion region, + @Nonnull BiomeType biome); + + /** + * Get the WorldEdit {@link com.sk89q.worldedit.world.World} corresponding to a world name + * + * @param world World name + * @return World object + */ + @Nonnull public abstract com.sk89q.worldedit.world.World getWeWorld(@Nonnull String world); + + public void upload(@Nonnull final Plot plot, @Nullable final UUID uuid, + @Nullable final String file, @Nonnull final RunnableVal whenDone) { plot.getHome(home -> MainUtil.upload(uuid, file, "zip", new RunnableVal() { @Override public void run(OutputStream output) { try (final ZipOutputStream zos = new ZipOutputStream(output)) { @@ -189,7 +282,7 @@ public abstract class WorldUtil { }, whenDone)); } - public File getDat(String world) { + @Nullable final File getDat(@Nonnull final String world) { File file = new File( PlotSquared.platform().getWorldContainer() + File.separator + world + File.separator + "level.dat"); @@ -199,8 +292,8 @@ public abstract class WorldUtil { return null; } - public File getMcr(String world, int x, int z) { - File file = new File(PlotSquared.platform().getWorldContainer(), + @Nullable private File getMcr(@Nonnull final String world, final int x, final int z) { + final File file = new File(PlotSquared.platform().getWorldContainer(), world + File.separator + "region" + File.separator + "r." + x + '.' + z + ".mca"); if (file.exists()) { return file; @@ -208,22 +301,78 @@ public abstract class WorldUtil { return null; } - public abstract boolean isBlockSame(BlockState block1, BlockState block2); + /** + * Check if two blocks are the same type) + * + * @param block1 First block + * @param block2 Second block + * @return {@code true} if the blocks have the same type, {@code false} if not + */ + public abstract boolean isBlockSame(@Nonnull BlockState block1, @Nonnull BlockState block2); - public abstract PlotPlayer wrapPlayer(UUID uuid); + /** + * Get a player object for the player with the given UUID + * + * @param uuid Player UUID + * @return Player object + */ + @Nonnull public abstract PlotPlayer getPlayer(@Nonnull UUID uuid); - public abstract double getHealth(PlotPlayer player); + /** + * Get the player health + * + * @param player Player + * @return Non-negative health + */ + @Nonnegative public abstract double getHealth(@Nonnull PlotPlayer player); - public abstract void setHealth(PlotPlayer player, double health); + /** + * Set the player health + * + * @param player Player health + * @param health Non-negative health + */ + public abstract void setHealth(@Nonnull PlotPlayer player, @Nonnegative double health); - public abstract int getFoodLevel(PlotPlayer player); + /** + * Get the player food level + * + * @param player Player + * @return Non-negative food level + */ + @Nonnegative public abstract int getFoodLevel(@Nonnull PlotPlayer player); - public abstract void setFoodLevel(PlotPlayer player, int foodLevel); + /** + * Set the player food level + * + * @param player Player food level + * @param foodLevel Non-negative food level + */ + public abstract void setFoodLevel(@Nonnull PlotPlayer player, @Nonnegative int foodLevel); - public abstract Set getTypesInCategory(final String category); + /** + * Get all entity types belonging to an entity category + * + * @param category Entity category + * @return Set containing all entities belonging to the given category + */ + @Nonnull public abstract Set getTypesInCategory(@Nonnull String category); - public abstract Collection getTileEntityTypes(); + /** + * Get all recognized tile entity types + * + * @return Collection containing all known tile entity types + */ + @Nonnull public abstract Collection getTileEntityTypes(); - public abstract int getTileEntityCount(String world, BlockVector2 chunk); + /** + * Get the tile entity count in a chunk + * + * @param world World + * @param chunk Chunk coordinates + * @return Tile entity count + */ + @Nonnegative public abstract int getTileEntityCount(@Nonnull String world, + @Nonnull BlockVector2 chunk); } From e80ade65c7a942945f448c7bc30a23040d456a35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20S=C3=B6derberg?= Date: Sat, 18 Jul 2020 11:05:16 +0200 Subject: [PATCH 2/4] Clean up PlotId --- .../plotsquared/bukkit/BukkitPlatform.java | 4 +- .../entity/ReplicatingEntityWrapper.java | 14 +- .../bukkit/entity/TeleportEntityWrapper.java | 4 +- .../bukkit/listener/PlayerEvents.java | 4 +- .../com/plotsquared/core/PlotSquared.java | 8 +- .../com/plotsquared/core/command/Area.java | 10 +- .../plotsquared/core/command/Argument.java | 2 +- .../com/plotsquared/core/command/Auto.java | 16 +- .../com/plotsquared/core/command/Cluster.java | 18 +- .../plotsquared/core/command/Condense.java | 10 +- .../core/command/DatabaseCommand.java | 4 +- .../core/command/DebugImportWorlds.java | 4 +- .../com/plotsquared/core/command/Info.java | 2 +- .../com/plotsquared/core/command/Save.java | 2 +- .../plotsquared/core/database/SQLManager.java | 92 ++++----- .../core/generator/HybridPlotManager.java | 6 +- .../core/generator/SquarePlotManager.java | 14 +- .../core/listener/PlotListener.java | 4 +- .../plotsquared/core/location/BlockLoc.java | 1 + .../plotsquared/core/location/Location.java | 29 ++- .../plotsquared/core/location/PlotLoc.java | 12 +- .../plotsquared/core/player/PlotPlayer.java | 6 +- .../java/com/plotsquared/core/plot/Plot.java | 131 ++++++------- .../com/plotsquared/core/plot/PlotArea.java | 81 ++++---- .../plotsquared/core/plot/PlotCluster.java | 27 +-- .../com/plotsquared/core/plot/PlotId.java | 182 ++++++++++-------- .../core/plot/schematic/PlotItem.java | 47 ----- .../core/plot/world/SinglePlotManager.java | 4 +- .../core/util/EventDispatcher.java | 2 +- .../com/plotsquared/core/util/MainUtil.java | 6 +- .../core/util/SchematicHandler.java | 6 +- Core/src/main/resources/furthest.js | 16 +- .../com/plotsquared/core/plot/FlagTest.java | 2 +- 33 files changed, 378 insertions(+), 392 deletions(-) delete mode 100644 Core/src/main/java/com/plotsquared/core/plot/schematic/PlotItem.java diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitPlatform.java b/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitPlatform.java index 174f3e6a8..b7d87ec59 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitPlatform.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitPlatform.java @@ -832,7 +832,7 @@ import static com.plotsquared.core.util.ReflectionUtils.getRefClass; BukkitUtil.adapt(entity.getLocation()); PlotArea area = pLoc.getPlotArea(); if (area != null) { - PlotId currentPlotId = PlotId.of(area.getPlotAbs(pLoc)); + PlotId currentPlotId = area.getPlotAbs(pLoc).getId(); if (!originalPlotId.equals(currentPlotId) && ( currentPlotId == null || !area .getPlot(originalPlotId) @@ -851,7 +851,7 @@ import static com.plotsquared.core.util.ReflectionUtils.getRefClass; BukkitUtil.adapt(entity.getLocation()); PlotArea area = pLoc.getPlotArea(); if (area != null) { - PlotId currentPlotId = PlotId.of(area.getPlotAbs(pLoc)); + PlotId currentPlotId = area.getPlotAbs(pLoc).getId(); if (currentPlotId != null) { entity.setMetadata("shulkerPlot", new FixedMetadataValue( diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/entity/ReplicatingEntityWrapper.java b/Bukkit/src/main/java/com/plotsquared/bukkit/entity/ReplicatingEntityWrapper.java index 3522863ae..8cae4cef4 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/entity/ReplicatingEntityWrapper.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/entity/ReplicatingEntityWrapper.java @@ -152,16 +152,16 @@ public final class ReplicatingEntityWrapper extends EntityWrapper { this.stack = item.getItemStack(); return; case "ITEM_FRAME": - this.x = Math.floor(this.x); - this.y = Math.floor(this.y); + this.x = Math.floor(this.getX()); + this.y = Math.floor(this.getY()); this.z = Math.floor(this.z); ItemFrame itemFrame = (ItemFrame) entity; this.dataByte = getOrdinal(Rotation.values(), itemFrame.getRotation()); this.stack = itemFrame.getItem().clone(); return; case "PAINTING": - this.x = Math.floor(this.x); - this.y = Math.floor(this.y); + this.x = Math.floor(this.getX()); + this.y = Math.floor(this.getY()); this.z = Math.floor(this.z); Painting painting = (Painting) entity; Art art = painting.getArt(); @@ -407,8 +407,8 @@ public final class ReplicatingEntityWrapper extends EntityWrapper { this.lived.leashed = lived.isLeashed(); if (this.lived.leashed) { Location location = lived.getLeashHolder().getLocation(); - this.lived.leashX = (short) (this.x - location.getBlockX()); - this.lived.leashY = (short) (this.y - location.getBlockY()); + this.lived.leashX = (short) (this.getX() - location.getBlockX()); + this.lived.leashY = (short) (this.getY() - location.getBlockY()); this.lived.leashZ = (short) (this.z - location.getBlockZ()); } EntityEquipment equipment = lived.getEquipment(); @@ -460,7 +460,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper { } @Override public Entity spawn(World world, int xOffset, int zOffset) { - Location location = new Location(world, this.x + xOffset, this.y, this.z + zOffset); + Location location = new Location(world, this.getX() + xOffset, this.getY(), this.z + zOffset); location.setYaw(this.yaw); location.setPitch(this.pitch); if (!this.getType().isSpawnable()) { diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/entity/TeleportEntityWrapper.java b/Bukkit/src/main/java/com/plotsquared/bukkit/entity/TeleportEntityWrapper.java index 6a37571a3..dfa918c0b 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/entity/TeleportEntityWrapper.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/entity/TeleportEntityWrapper.java @@ -67,8 +67,8 @@ public class TeleportEntityWrapper extends EntityWrapper { // To account for offsets in the chunk manager this.oldLocation = oldLocation.clone(); - this.oldLocation.setX(this.x); - this.oldLocation.setY(this.y); + this.oldLocation.setX(this.getX()); + this.oldLocation.setY(this.getY()); this.oldLocation.setZ(this.z); this.gravityOld = this.getEntity().hasGravity(); diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/PlayerEvents.java b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/PlayerEvents.java index 17ab8f71d..f334e055b 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/PlayerEvents.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/PlayerEvents.java @@ -1005,7 +1005,7 @@ import java.util.regex.Pattern; } } String partial = ChatColor.translateAlternateColorCodes('&', - format.replace("%plot_id%", id.x + ";" + id.y).replace("%sender%", sender)); + format.replace("%plot_id%", id.getX() + ";" + id.getY()).replace("%sender%", sender)); if (plotPlayer.hasPermission("plots.chat.color")) { message = Captions.color(message); } @@ -1015,7 +1015,7 @@ import java.util.regex.Pattern; } if (!spies.isEmpty()) { String spyMessage = Captions.PLOT_CHAT_SPY_FORMAT.getTranslated() - .replace("%plot_id%", id.x + ";" + id.y).replace("%sender%", sender) + .replace("%plot_id%", id.getX() + ";" + id.getY()).replace("%sender%", sender) .replace("%msg%", message); for (Player player : spies) { player.sendMessage(spyMessage); diff --git a/Core/src/main/java/com/plotsquared/core/PlotSquared.java b/Core/src/main/java/com/plotsquared/core/PlotSquared.java index 9a3220f79..70ea59417 100644 --- a/Core/src/main/java/com/plotsquared/core/PlotSquared.java +++ b/Core/src/main/java/com/plotsquared/core/PlotSquared.java @@ -503,7 +503,7 @@ public class PlotSquared { } else { extra.add(plot); } - } else if (Math.abs(plot.getId().x) > 15446 || Math.abs(plot.getId().y) > 15446) { + } else if (Math.abs(plot.getId().getX()) > 15446 || Math.abs(plot.getId().getY()) > 15446) { extra.add(plot); } else { overflow.add(plot); @@ -578,7 +578,7 @@ public class PlotSquared { } else { extra.add(plot); } - } else if (Math.abs(plot.getId().x) > 15446 || Math.abs(plot.getId().y) > 15446) { + } else if (Math.abs(plot.getId().getX()) > 15446 || Math.abs(plot.getId().getY()) > 15446) { extra.add(plot); } else { overflow.add(plot); @@ -718,8 +718,8 @@ public class PlotSquared { } if (plot.getArea().removePlot(plot.getId())) { PlotId last = (PlotId) plot.getArea().getMeta("lastPlot"); - int last_max = Math.max(Math.abs(last.x), Math.abs(last.y)); - int this_max = Math.max(Math.abs(plot.getId().x), Math.abs(plot.getId().y)); + int last_max = Math.max(Math.abs(last.getX()), Math.abs(last.getY())); + int this_max = Math.max(Math.abs(plot.getId().getX()), Math.abs(plot.getId().getY())); if (this_max < last_max) { plot.getArea().setMeta("lastPlot", plot.getId()); } diff --git a/Core/src/main/java/com/plotsquared/core/command/Area.java b/Core/src/main/java/com/plotsquared/core/command/Area.java index 18f71b00f..969737766 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Area.java +++ b/Core/src/main/java/com/plotsquared/core/command/Area.java @@ -169,7 +169,7 @@ public class Area extends SubCommand { BlockVector3.at(playerSelectionMin.getX(), 0, playerSelectionMin.getZ()), BlockVector3.at(playerSelectionMax.getX(), 255, playerSelectionMax.getZ())); // There's only one plot in the area... - final PlotId plotId = new PlotId(1, 1); + final PlotId plotId = PlotId.of(1, 1); final HybridPlotWorld hybridPlotWorld = this.hybridPlotWorldFactory.create(player.getLocation().getWorldName(), args[1], Objects.requireNonNull(PlotSquared.platform()).getDefaultGenerator(), plotId, plotId); // Plot size is the same as the region width @@ -315,8 +315,8 @@ public class Area extends SubCommand { PlotAreaBuilder builder = PlotAreaBuilder.ofPlotArea(area) .plotManager(PlotSquared.platform().getPluginName()) .generatorName(PlotSquared.platform().getPluginName()) - .minimumId(new PlotId(1, 1)) - .maximumId(new PlotId(numX, numZ)); + .minimumId(PlotId.of(1, 1)) + .maximumId(PlotId.of(numX, numZ)); final String path = "worlds." + area.getWorldName() + ".areas." + area.getId() + '-' + builder.minimumId() + '-' + builder.maximumId(); @@ -542,7 +542,7 @@ public class Area extends SubCommand { PlotId min = area.getMin(); PlotId max = area.getMax(); name = area.getWorldName() + ';' + area.getId() + ';' + min + ';' + max; - int size = (max.x - min.x + 1) * (max.y - min.y + 1); + int size = (max.getX() - min.getX() + 1) * (max.getY() - min.getY() + 1); percent = claimed == 0 ? 0 : size / (double) claimed; region = area.getRegion().toString(); } else { @@ -595,7 +595,7 @@ public class Area extends SubCommand { PlotId max = area.getMax(); name = area.getWorldName() + ';' + area.getId() + ';' + min + ';' + max; - int size = (max.x - min.x + 1) * (max.y - min.y + 1); + int size = (max.getX() - min.getX() + 1) * (max.getY() - min.getY() + 1); percent = claimed == 0 ? 0 : size / (double) claimed; region = area.getRegion().toString(); } else { diff --git a/Core/src/main/java/com/plotsquared/core/command/Argument.java b/Core/src/main/java/com/plotsquared/core/command/Argument.java index 2bb203ac8..42a9858c8 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Argument.java +++ b/Core/src/main/java/com/plotsquared/core/command/Argument.java @@ -64,7 +64,7 @@ public abstract class Argument { } }; public static final Argument PlotID = - new Argument("PlotID", new PlotId(-6, 3)) { + new Argument("PlotID", PlotId.of(-6, 3)) { @Override public PlotId parse(String in) { return PlotId.fromString(in); } diff --git a/Core/src/main/java/com/plotsquared/core/command/Auto.java b/Core/src/main/java/com/plotsquared/core/command/Auto.java index 2c2f051e9..cfc7cd94d 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Auto.java +++ b/Core/src/main/java/com/plotsquared/core/command/Auto.java @@ -76,10 +76,6 @@ public class Auto extends SubCommand { this.eventDispatcher = eventDispatcher; this.econHandler = econHandler; } - - @Deprecated public static PlotId getNextPlotId(PlotId id, int step) { - return id.getNextId(step); - } public static boolean checkAllowedPlots(PlotPlayer player, PlotArea plotarea, @Nullable Integer allowedPlots, int sizeX, int sizeZ) { @@ -298,14 +294,14 @@ public class Auto extends SubCommand { return false; } while (true) { - PlotId start = plotarea.getMeta("lastPlot", new PlotId(0, 0)).getNextId(1); - PlotId end = new PlotId(start.x + size_x - 1, start.y + size_z - 1); + PlotId start = plotarea.getMeta("lastPlot", PlotId.of(0, 0)).getNextId(); + PlotId end = PlotId.of(start.getX() + size_x - 1, start.getY() + size_z - 1); if (plotarea.canClaim(player, start, end)) { plotarea.setMeta("lastPlot", start); - for (int i = start.x; i <= end.x; i++) { - for (int j = start.y; j <= end.y; j++) { - Plot plot = plotarea.getPlotAbs(new PlotId(i, j)); - boolean teleport = i == end.x && j == end.y; + for (int i = start.getX(); i <= end.getX(); i++) { + for (int j = start.getY(); j <= end.getY(); j++) { + Plot plot = plotarea.getPlotAbs(PlotId.of(i, j)); + boolean teleport = i == end.getX() && j == end.getY(); if (plot == null) { return false; } diff --git a/Core/src/main/java/com/plotsquared/core/command/Cluster.java b/Core/src/main/java/com/plotsquared/core/command/Cluster.java index 0902170bf..793225cf7 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Cluster.java +++ b/Core/src/main/java/com/plotsquared/core/command/Cluster.java @@ -137,9 +137,9 @@ public class Cluster extends SubCommand { MainUtil.sendMessage(player, Captions.ALIAS_IS_TAKEN); return false; } - if (pos2.x < pos1.x || pos2.y < pos1.y) { - PlotId tmp = new PlotId(Math.min(pos1.x, pos2.x), Math.min(pos1.y, pos2.y)); - pos2 = new PlotId(Math.max(pos1.x, pos2.x), Math.max(pos1.y, pos2.y)); + if (pos2.getX() < pos1.getX() || pos2.getY() < pos1.getY()) { + PlotId tmp = PlotId.of(Math.min(pos1.getX(), pos2.getX()), Math.min(pos1.getY(), pos2.getY())); + pos2 = PlotId.of(Math.max(pos1.getX(), pos2.getX()), Math.max(pos1.getY(), pos2.getY())); pos1 = tmp; } //check if overlap @@ -265,9 +265,9 @@ public class Cluster extends SubCommand { MainUtil.sendMessage(player, Captions.NOT_VALID_PLOT_ID); return false; } - if (pos2.x < pos1.x || pos2.y < pos1.y) { - pos1 = new PlotId(Math.min(pos1.x, pos2.x), Math.min(pos1.y, pos2.y)); - pos2 = new PlotId(Math.max(pos1.x, pos2.x), Math.max(pos1.y, pos2.y)); + if (pos2.getX() < pos1.getX() || pos2.getY() < pos1.getY()) { + pos1 = PlotId.of(Math.min(pos1.getX(), pos2.getX()), Math.min(pos1.getY(), pos2.getY())); + pos2 = PlotId.of(Math.max(pos1.getX(), pos2.getX()), Math.max(pos1.getY(), pos2.getY())); } // check if in cluster PlotArea area = player.getApplicablePlotArea(); @@ -326,7 +326,7 @@ public class Cluster extends SubCommand { } else { current = player.getPlayerClusterCount(player.getLocation().getWorldName()); } - current -= cluster.getArea() + (1 + pos2.x - pos1.x) * (1 + pos2.y - pos1.y); + current -= cluster.getArea() + (1 + pos2.getX() - pos1.getX()) * (1 + pos2.getY() - pos1.getY()); int allowed = Permissions.hasPermissionRange(player, Captions.PERMISSION_CLUSTER, Settings.Limit.MAX_PLOTS); if (current + cluster.getArea() > allowed) { @@ -648,8 +648,8 @@ public class Cluster extends SubCommand { owner = username; } String name = cluster.getName(); - String size = (cluster.getP2().x - cluster.getP1().x + 1) + "x" + ( - cluster.getP2().y - cluster.getP1().y + 1); + String size = (cluster.getP2().getX() - cluster.getP1().getX() + 1) + "x" + ( + cluster.getP2().getY() - cluster.getP1().getY() + 1); String rights = cluster.isAdded(player.getUUID()) + ""; String message = Captions.CLUSTER_INFO.getTranslated(); message = message.replaceAll("%id%", id); diff --git a/Core/src/main/java/com/plotsquared/core/command/Condense.java b/Core/src/main/java/com/plotsquared/core/command/Condense.java index 2b93b6839..c8168e41b 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Condense.java +++ b/Core/src/main/java/com/plotsquared/core/command/Condense.java @@ -138,13 +138,13 @@ public class Condense extends SubCommand { } List toMove = new ArrayList<>(getPlots(allPlots, radius)); final List free = new ArrayList<>(); - PlotId start = new PlotId(0, 0); - while (start.x <= minimumRadius && start.y <= minimumRadius) { + PlotId start = PlotId.of(0, 0); + while (start.getX() <= minimumRadius && start.getY() <= minimumRadius) { Plot plot = area.getPlotAbs(start); if (plot != null && !plot.hasOwner()) { free.add(plot.getId()); } - start = Auto.getNextPlotId(start, 1); + start = start.getNextId(); } if (free.isEmpty() || toMove.isEmpty()) { MainUtil.sendMessage(player, "NO FREE PLOTS FOUND"); @@ -249,8 +249,8 @@ public class Condense extends SubCommand { public Set getPlots(Collection plots, int radius) { HashSet outside = new HashSet<>(); for (Plot plot : plots) { - if (plot.getId().x > radius || plot.getId().x < -radius || plot.getId().y > radius - || plot.getId().y < -radius) { + if (plot.getId().getX() > radius || plot.getId().getX() < -radius || plot.getId().getY() > radius + || plot.getId().getY() < -radius) { outside.add(plot.getId()); } } diff --git a/Core/src/main/java/com/plotsquared/core/command/DatabaseCommand.java b/Core/src/main/java/com/plotsquared/core/command/DatabaseCommand.java index 424363e3f..96a0592d9 100644 --- a/Core/src/main/java/com/plotsquared/core/command/DatabaseCommand.java +++ b/Core/src/main/java/com/plotsquared/core/command/DatabaseCommand.java @@ -158,9 +158,7 @@ public class DatabaseCommand extends SubCommand { newId.toCommaSeparatedString()); worldFile.renameTo(newFile); } - id.x = newId.x; - id.y = newId.y; - id.recalculateHash(); + plot.setId(newId.copy()); plot.setArea(pa); plots.add(plot); continue; diff --git a/Core/src/main/java/com/plotsquared/core/command/DebugImportWorlds.java b/Core/src/main/java/com/plotsquared/core/command/DebugImportWorlds.java index 0f15c1528..203779679 100644 --- a/Core/src/main/java/com/plotsquared/core/command/DebugImportWorlds.java +++ b/Core/src/main/java/com/plotsquared/core/command/DebugImportWorlds.java @@ -70,7 +70,7 @@ public class DebugImportWorlds extends Command { return CompletableFuture.completedFuture(false); } SinglePlotArea area = ((SinglePlotAreaManager) this.plotAreaManager).getArea(); - PlotId id = new PlotId(0, 0); + PlotId id = PlotId.of(0, 0); File container = PlotSquared.platform().getWorldContainer(); if (container.equals(new File("."))) { player.sendMessage( @@ -92,7 +92,7 @@ public class DebugImportWorlds extends Command { UUID.nameUUIDFromBytes(("OfflinePlayer:" + name).getBytes(Charsets.UTF_8)); } while (new File(container, id.toCommaSeparatedString()).exists()) { - id = Auto.getNextPlotId(id, 1); + id = id.getNextId(); } File newDir = new File(container, id.toCommaSeparatedString()); if (folder.renameTo(newDir)) { diff --git a/Core/src/main/java/com/plotsquared/core/command/Info.java b/Core/src/main/java/com/plotsquared/core/command/Info.java index 125d0008d..fab3d412f 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Info.java +++ b/Core/src/main/java/com/plotsquared/core/command/Info.java @@ -118,7 +118,7 @@ public class Info extends SubCommand { // Unclaimed? if (!hasOwner && !containsEveryone && !trustedEveryone) { MainUtil.sendMessage(player, Captions.PLOT_INFO_UNCLAIMED, - plot.getId().x + ";" + plot.getId().y); + plot.getId().getX() + ";" + plot.getId().getY()); return true; } String info = Captions.PLOT_INFO_FORMAT.getTranslated(); diff --git a/Core/src/main/java/com/plotsquared/core/command/Save.java b/Core/src/main/java/com/plotsquared/core/command/Save.java index 3c814c655..bde167dd9 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Save.java +++ b/Core/src/main/java/com/plotsquared/core/command/Save.java @@ -94,7 +94,7 @@ public class Save extends SubCommand { PlotId id = plot.getId(); String world1 = plot.getArea().toString().replaceAll(";", "-") .replaceAll("[^A-Za-z0-9]", ""); - final String file = time + '_' + world1 + '_' + id.x + '_' + id.y + '_' + size; + final String file = time + '_' + world1 + '_' + id.getX() + '_' + id.getY() + '_' + size; UUID uuid = player.getUUID(); schematicHandler.upload(value, uuid, file, new RunnableVal() { @Override public void run(URL url) { diff --git a/Core/src/main/java/com/plotsquared/core/database/SQLManager.java b/Core/src/main/java/com/plotsquared/core/database/SQLManager.java index 051e4ac3b..cac8497dd 100644 --- a/Core/src/main/java/com/plotsquared/core/database/SQLManager.java +++ b/Core/src/main/java/com/plotsquared/core/database/SQLManager.java @@ -573,8 +573,8 @@ public class SQLManager implements AbstractDB { addPlotTask(plot, new UniqueStatement("setOwner") { @Override public void set(PreparedStatement statement) throws SQLException { statement.setString(1, uuid.toString()); - statement.setInt(2, plot.getId().x); - statement.setInt(3, plot.getId().y); + statement.setInt(2, plot.getId().getX()); + statement.setInt(3, plot.getId().getY()); statement.setString(4, plot.getArea().toString()); } @@ -610,7 +610,7 @@ public class SQLManager implements AbstractDB { int id = result.getInt("id"); int x = result.getInt("plot_id_x"); int y = result.getInt("plot_id_z"); - PlotId plotId = new PlotId(x, y); + PlotId plotId = PlotId.of(x, y); Plot plot = plotMap.get(plotId); idMap.put(plotId, id); if (plot != null) { @@ -759,8 +759,8 @@ public class SQLManager implements AbstractDB { @Override public void setMySQL(PreparedStatement stmt, int i, Plot plot) throws SQLException { - stmt.setInt(i * 5 + 1, plot.getId().x); - stmt.setInt(i * 5 + 2, plot.getId().y); + stmt.setInt(i * 5 + 1, plot.getId().getX()); + stmt.setInt(i * 5 + 2, plot.getId().getY()); try { stmt.setString(i * 5 + 3, plot.getOwnerAbs().toString()); } catch (SQLException ignored) { @@ -773,8 +773,8 @@ public class SQLManager implements AbstractDB { @Override public void setSQLite(PreparedStatement stmt, int i, Plot plot) throws SQLException { stmt.setNull(i * 6 + 1, 4); - stmt.setInt(i * 6 + 2, plot.getId().x); - stmt.setInt(i * 6 + 3, plot.getId().y); + stmt.setInt(i * 6 + 2, plot.getId().getX()); + stmt.setInt(i * 6 + 3, plot.getId().getY()); try { stmt.setString(i * 6 + 4, plot.getOwnerAbs().toString()); } catch (SQLException ignored) { @@ -785,8 +785,8 @@ public class SQLManager implements AbstractDB { } @Override public void setSQL(PreparedStatement stmt, Plot plot) throws SQLException { - stmt.setInt(1, plot.getId().x); - stmt.setInt(2, plot.getId().y); + stmt.setInt(1, plot.getId().getX()); + stmt.setInt(2, plot.getId().getY()); stmt.setString(3, plot.getOwnerAbs().toString()); stmt.setString(4, plot.getArea().toString()); stmt.setTimestamp(5, new Timestamp(plot.getTimestamp())); @@ -1016,14 +1016,14 @@ public class SQLManager implements AbstractDB { public void createPlotSafe(final Plot plot, final Runnable success, final Runnable failure) { addPlotTask(plot, new UniqueStatement("createPlotSafe_" + plot.hashCode()) { @Override public void set(PreparedStatement statement) throws SQLException { - statement.setInt(1, plot.getId().x); - statement.setInt(2, plot.getId().y); + statement.setInt(1, plot.getId().getX()); + statement.setInt(2, plot.getId().getY()); statement.setString(3, plot.getOwnerAbs().toString()); statement.setString(4, plot.getArea().toString()); statement.setTimestamp(5, new Timestamp(plot.getTimestamp())); statement.setString(6, plot.getArea().toString()); - statement.setInt(7, plot.getId().x); - statement.setInt(8, plot.getId().y); + statement.setInt(7, plot.getId().getX()); + statement.setInt(8, plot.getId().getY()); } @Override public PreparedStatement get() throws SQLException { @@ -1085,8 +1085,8 @@ public class SQLManager implements AbstractDB { @Override public void createPlotAndSettings(final Plot plot, Runnable whenDone) { addPlotTask(plot, new UniqueStatement("createPlotAndSettings_" + plot.hashCode()) { @Override public void set(PreparedStatement statement) throws SQLException { - statement.setInt(1, plot.getId().x); - statement.setInt(2, plot.getId().y); + statement.setInt(1, plot.getId().getX()); + statement.setInt(2, plot.getId().getY()); statement.setString(3, plot.getOwnerAbs().toString()); statement.setString(4, plot.getArea().toString()); statement.setTimestamp(5, new Timestamp(plot.getTimestamp())); @@ -1436,10 +1436,10 @@ public class SQLManager implements AbstractDB { try (PreparedStatement stmt = this.connection.prepareStatement( "SELECT `id` FROM `" + this.prefix + "cluster` WHERE `pos1_x` = ? AND `pos1_z` = ? AND `pos2_x` = ? AND `pos2_z` = ? AND `world` = ? ORDER BY `timestamp` ASC")) { - stmt.setInt(1, cluster.getP1().x); - stmt.setInt(2, cluster.getP1().y); - stmt.setInt(3, cluster.getP2().x); - stmt.setInt(4, cluster.getP2().y); + stmt.setInt(1, cluster.getP1().getX()); + stmt.setInt(2, cluster.getP1().getY()); + stmt.setInt(3, cluster.getP2().getX()); + stmt.setInt(4, cluster.getP2().getY()); stmt.setString(5, cluster.area.toString()); try (ResultSet resultSet = stmt.executeQuery()) { c_id = Integer.MAX_VALUE; @@ -1475,8 +1475,8 @@ public class SQLManager implements AbstractDB { try (PreparedStatement statement = this.connection.prepareStatement( "SELECT `id` FROM `" + this.prefix + "plot` WHERE `plot_id_x` = ? AND `plot_id_z` = ? AND world = ? ORDER BY `timestamp` ASC")) { - statement.setInt(1, plot.getId().x); - statement.setInt(2, plot.getId().y); + statement.setInt(1, plot.getId().getX()); + statement.setInt(2, plot.getId().getY()); statement.setString(3, plot.getArea().toString()); try (ResultSet resultSet = statement.executeQuery()) { id = Integer.MAX_VALUE; @@ -1745,7 +1745,7 @@ public class SQLManager implements AbstractDB { + this.prefix + "plot`")) { ArrayList toDelete = new ArrayList<>(); while (resultSet.next()) { - PlotId plot_id = new PlotId(resultSet.getInt("plot_id_x"), + PlotId plot_id = PlotId.of(resultSet.getInt("plot_id_x"), resultSet.getInt("plot_id_z")); id = resultSet.getInt("id"); String areaID = resultSet.getString("world"); @@ -2094,8 +2094,8 @@ public class SQLManager implements AbstractDB { @Override public void movePlot(final Plot original, final Plot newPlot) { addPlotTask(original, new UniqueStatement("movePlot") { @Override public void set(PreparedStatement statement) throws SQLException { - statement.setInt(1, newPlot.getId().x); - statement.setInt(2, newPlot.getId().y); + statement.setInt(1, newPlot.getId().getX()); + statement.setInt(2, newPlot.getId().getY()); statement.setString(3, newPlot.getArea().toString()); statement.setInt(4, getId(original)); } @@ -2245,7 +2245,7 @@ public class SQLManager implements AbstractDB { try (ResultSet r = stmt.executeQuery()) { ids = new HashSet<>(); while (r.next()) { - PlotId plot_id = new PlotId(r.getInt("plot_id_x"), r.getInt("plot_id_z")); + PlotId plot_id = PlotId.of(r.getInt("plot_id_x"), r.getInt("plot_id_z")); if (plots.contains(plot_id)) { ids.add(r.getInt("id")); } @@ -2259,7 +2259,7 @@ public class SQLManager implements AbstractDB { for (Iterator iterator = plots.iterator(); iterator.hasNext(); ) { PlotId plotId = iterator.next(); iterator.remove(); - PlotId id = new PlotId(plotId.x, plotId.y); + PlotId id = PlotId.of(plotId.getX(), plotId.getY()); area.removePlot(id); } }); @@ -2695,9 +2695,9 @@ public class SQLManager implements AbstractDB { int id; while (resultSet.next()) { PlotId pos1 = - new PlotId(resultSet.getInt("pos1_x"), resultSet.getInt("pos1_z")); + PlotId.of(resultSet.getInt("pos1_x"), resultSet.getInt("pos1_z")); PlotId pos2 = - new PlotId(resultSet.getInt("pos2_x"), resultSet.getInt("pos2_z")); + PlotId.of(resultSet.getInt("pos2_x"), resultSet.getInt("pos2_z")); id = resultSet.getInt("id"); String areaid = resultSet.getString("world"); if (!areas.contains(areaid)) { @@ -2854,10 +2854,10 @@ public class SQLManager implements AbstractDB { @Override public void createCluster(final PlotCluster cluster) { addClusterTask(cluster, new UniqueStatement("createCluster_" + cluster.hashCode()) { @Override public void set(PreparedStatement statement) throws SQLException { - statement.setInt(1, cluster.getP1().x); - statement.setInt(2, cluster.getP1().y); - statement.setInt(3, cluster.getP2().x); - statement.setInt(4, cluster.getP2().y); + statement.setInt(1, cluster.getP1().getX()); + statement.setInt(2, cluster.getP1().getY()); + statement.setInt(3, cluster.getP2().getX()); + statement.setInt(4, cluster.getP2().getY()); statement.setString(5, cluster.owner.toString()); statement.setString(6, cluster.area.toString()); } @@ -2895,17 +2895,17 @@ public class SQLManager implements AbstractDB { } @Override public void resizeCluster(final PlotCluster current, PlotId min, PlotId max) { - final PlotId pos1 = new PlotId(current.getP1().x, current.getP1().y); - final PlotId pos2 = new PlotId(current.getP2().x, current.getP2().y); + final PlotId pos1 = PlotId.of(current.getP1().getX(), current.getP1().getY()); + final PlotId pos2 = PlotId.of(current.getP2().getX(), current.getP2().getY()); current.setP1(min); current.setP2(max); addClusterTask(current, new UniqueStatement("resizeCluster") { @Override public void set(PreparedStatement statement) throws SQLException { - statement.setInt(1, pos1.x); - statement.setInt(2, pos1.y); - statement.setInt(3, pos2.x); - statement.setInt(4, pos2.y); + statement.setInt(1, pos1.getX()); + statement.setInt(2, pos1.getY()); + statement.setInt(3, pos2.getX()); + statement.setInt(4, pos2.getY()); statement.setInt(5, getClusterId(current)); } @@ -3141,10 +3141,10 @@ public class SQLManager implements AbstractDB { + "plot` SET `world` = ? WHERE `world` = ? AND `plot_id_x` BETWEEN ? AND ? AND `plot_id_z` BETWEEN ? AND ?")) { stmt.setString(1, newWorld); stmt.setString(2, oldWorld); - stmt.setInt(3, min.x); - stmt.setInt(4, max.x); - stmt.setInt(5, min.y); - stmt.setInt(6, max.y); + stmt.setInt(3, min.getX()); + stmt.setInt(4, max.getX()); + stmt.setInt(5, min.getY()); + stmt.setInt(6, max.getY()); stmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); @@ -3154,10 +3154,10 @@ public class SQLManager implements AbstractDB { + "cluster` SET `world` = ? WHERE `world` = ? AND `pos1_x` <= ? AND `pos1_z` <= ? AND `pos2_x` >= ? AND `pos2_z` >= ?")) { stmt.setString(1, newWorld); stmt.setString(2, oldWorld); - stmt.setInt(3, max.x); - stmt.setInt(4, max.y); - stmt.setInt(5, min.x); - stmt.setInt(6, min.y); + stmt.setInt(3, max.getX()); + stmt.setInt(4, max.getY()); + stmt.setInt(5, min.getX()); + stmt.setInt(6, min.getY()); stmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); diff --git a/Core/src/main/java/com/plotsquared/core/generator/HybridPlotManager.java b/Core/src/main/java/com/plotsquared/core/generator/HybridPlotManager.java index e7fd298a0..c23c63b6c 100644 --- a/Core/src/main/java/com/plotsquared/core/generator/HybridPlotManager.java +++ b/Core/src/main/java/com/plotsquared/core/generator/HybridPlotManager.java @@ -103,7 +103,7 @@ public class HybridPlotManager extends ClassicPlotManager { @Override public boolean createRoadEast(Plot plot) { super.createRoadEast(plot); PlotId id = plot.getId(); - PlotId id2 = new PlotId(id.x + 1, id.y); + PlotId id2 = PlotId.of(id.getX() + 1, id.getY()); Location bot = getPlotBottomLocAbs(id2); Location top = getPlotTopLocAbs(id); Location pos1 = Location.at(hybridPlotWorld.getWorldName(), top.getX() + 1, 0, bot.getZ() - 1); @@ -164,7 +164,7 @@ public class HybridPlotManager extends ClassicPlotManager { @Override public boolean createRoadSouth(Plot plot) { super.createRoadSouth(plot); PlotId id = plot.getId(); - PlotId id2 = new PlotId(id.x, id.y + 1); + PlotId id2 = PlotId.of(id.getX(), id.getY() + 1); Location bot = getPlotBottomLocAbs(id2); Location top = getPlotTopLocAbs(id); Location pos1 = Location.at(hybridPlotWorld.getWorldName(), bot.getX() - 1, 0, top.getZ() + 1); @@ -183,7 +183,7 @@ public class HybridPlotManager extends ClassicPlotManager { @Override public boolean createRoadSouthEast(Plot plot) { super.createRoadSouthEast(plot); PlotId id = plot.getId(); - PlotId id2 = new PlotId(id.x + 1, id.y + 1); + PlotId id2 = PlotId.of(id.getX() + 1, id.getY() + 1); Location pos1 = getPlotTopLocAbs(id).add(1, 0, 1).withY(0); Location pos2 = getPlotBottomLocAbs(id2).withY(Math.min(getWorldHeight(), 255)); LocalBlockQueue queue = hybridPlotWorld.getQueue(false); diff --git a/Core/src/main/java/com/plotsquared/core/generator/SquarePlotManager.java b/Core/src/main/java/com/plotsquared/core/generator/SquarePlotManager.java index 27e093f1b..be5380cce 100644 --- a/Core/src/main/java/com/plotsquared/core/generator/SquarePlotManager.java +++ b/Core/src/main/java/com/plotsquared/core/generator/SquarePlotManager.java @@ -77,8 +77,8 @@ public abstract class SquarePlotManager extends GridPlotManager { } @Override public Location getPlotTopLocAbs(PlotId plotId) { - int px = plotId.x; - int pz = plotId.y; + int px = plotId.getX(); + int pz = plotId.getY(); int x = (squarePlotWorld.ROAD_OFFSET_X + (px * (squarePlotWorld.ROAD_WIDTH + squarePlotWorld.PLOT_WIDTH))) - (int) Math.floor(squarePlotWorld.ROAD_WIDTH / 2) - 1; int z = (squarePlotWorld.ROAD_OFFSET_Z + (pz * (squarePlotWorld.ROAD_WIDTH @@ -126,7 +126,7 @@ public abstract class SquarePlotManager extends GridPlotManager { if (z <= pathWidthLower || z > end || x <= pathWidthLower || x > end) { return null; } else { - return new PlotId(idx, idz); + return PlotId.of(idx, idz); } } @@ -151,7 +151,7 @@ public abstract class SquarePlotManager extends GridPlotManager { } else { idz = (z / size) + 1; } - return new PlotId(idx, idz); + return PlotId.of(idx, idz); } @Override public PlotId getPlotId(int x, int y, int z) { @@ -190,7 +190,7 @@ public abstract class SquarePlotManager extends GridPlotManager { dz = (z / size) + 1; rz = z % size; } - PlotId id = new PlotId(dx, dz); + PlotId id = PlotId.of(dx, dz); boolean[] merged = new boolean[] {rz <= pathWidthLower, rx > end, rz > end, rx <= pathWidthLower}; int hash = MainUtil.hash(merged); @@ -240,8 +240,8 @@ public abstract class SquarePlotManager extends GridPlotManager { * Get the bottom plot loc (some basic math). */ @Override public Location getPlotBottomLocAbs(PlotId plotId) { - int px = plotId.x; - int pz = plotId.y; + int px = plotId.getX(); + int pz = plotId.getY(); int x = (squarePlotWorld.ROAD_OFFSET_X + (px * (squarePlotWorld.ROAD_WIDTH + squarePlotWorld.PLOT_WIDTH))) - squarePlotWorld.PLOT_WIDTH - (int) Math .floor(squarePlotWorld.ROAD_WIDTH / 2); diff --git a/Core/src/main/java/com/plotsquared/core/listener/PlotListener.java b/Core/src/main/java/com/plotsquared/core/listener/PlotListener.java index 911f65286..49610c8cb 100644 --- a/Core/src/main/java/com/plotsquared/core/listener/PlotListener.java +++ b/Core/src/main/java/com/plotsquared/core/listener/PlotListener.java @@ -266,8 +266,8 @@ public class PlotListener { Plot lastPlot = player.getMeta(PlotPlayer.META_LAST_PLOT); if ((lastPlot != null) && plot.getId().equals(lastPlot.getId())) { Map replacements = new HashMap<>(); - replacements.put("%x%", String.valueOf(lastPlot.getId().x)); - replacements.put("%z%", lastPlot.getId().y + ""); + replacements.put("%x%", String.valueOf(lastPlot.getId().getX())); + replacements.put("%z%", lastPlot.getId().getY() + ""); replacements.put("%world%", plot.getArea().toString()); replacements.put("%greeting%", greeting); replacements.put("%alias", plot.toString()); diff --git a/Core/src/main/java/com/plotsquared/core/location/BlockLoc.java b/Core/src/main/java/com/plotsquared/core/location/BlockLoc.java index 0fd25c48b..34ab4750d 100644 --- a/Core/src/main/java/com/plotsquared/core/location/BlockLoc.java +++ b/Core/src/main/java/com/plotsquared/core/location/BlockLoc.java @@ -117,4 +117,5 @@ public class BlockLoc { public float getPitch() { return pitch; } + } diff --git a/Core/src/main/java/com/plotsquared/core/location/Location.java b/Core/src/main/java/com/plotsquared/core/location/Location.java index 53db29ed7..60ba99f1d 100644 --- a/Core/src/main/java/com/plotsquared/core/location/Location.java +++ b/Core/src/main/java/com/plotsquared/core/location/Location.java @@ -25,13 +25,13 @@ */ package com.plotsquared.core.location; +import com.google.common.base.Objects; import com.google.common.base.Preconditions; import com.plotsquared.core.PlotSquared; import com.plotsquared.core.plot.Plot; import com.plotsquared.core.plot.PlotArea; import com.sk89q.worldedit.math.BlockVector2; import com.sk89q.worldedit.math.BlockVector3; -import lombok.EqualsAndHashCode; import lombok.Getter; import org.khelekore.prtree.MBR; import org.khelekore.prtree.SimpleMBR; @@ -42,8 +42,7 @@ import javax.annotation.Nullable; /** * An unmodifiable 6-tuple (world,x,y,z,yaw,pitch) */ -@EqualsAndHashCode @SuppressWarnings("unused") -public final class Location implements Comparable { +public final class Location extends BlockLoc implements Comparable { @Getter private final float yaw; @Getter private final float pitch; @@ -52,6 +51,7 @@ public final class Location implements Comparable { private Location(@Nonnull final World world, @Nonnull final BlockVector3 blockVector3, final float yaw, final float pitch) { + super(blockVector3.getX(), blockVector3.getY(), blockVector3.getZ(), yaw, pitch); this.world = Preconditions.checkNotNull(world, "World may not be null"); this.blockVector3 = Preconditions.checkNotNull(blockVector3, "Vector may not be null"); this.yaw = yaw; @@ -60,6 +60,7 @@ public final class Location implements Comparable { private Location(@Nonnull final String worldName, @Nonnull final BlockVector3 blockVector3, final float yaw, final float pitch) { + super(blockVector3.getX(), blockVector3.getY(), blockVector3.getZ(), yaw, pitch); Preconditions.checkNotNull(worldName, "World name may not be null"); if (worldName.isEmpty()) { this.world = World.nullWorld(); @@ -446,6 +447,28 @@ public final class Location implements Comparable { return 1; } + @Override public boolean equals(final Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + if (!super.equals(o)) { + return false; + } + final Location location = (Location) o; + return Float.compare(location.getYaw(), getYaw()) == 0 + && Float.compare(location.getPitch(), getPitch()) == 0 && Objects + .equal(getBlockVector3(), location.getBlockVector3()) && Objects + .equal(getWorld(), location.getWorld()); + } + + @Override public int hashCode() { + return Objects + .hashCode(super.hashCode(), getYaw(), getPitch(), getBlockVector3(), getWorld()); + } + @Override public String toString() { return "\"plotsquaredlocation\":{\"x\":" + this.getX() + ",\"y\":" + this.getY() + ",\"z\":" + this.getZ() + ",\"yaw\":" + this.yaw + ",\"pitch\":" + this.pitch + ",\"world\":\"" diff --git a/Core/src/main/java/com/plotsquared/core/location/PlotLoc.java b/Core/src/main/java/com/plotsquared/core/location/PlotLoc.java index 8301f23a7..76135262d 100644 --- a/Core/src/main/java/com/plotsquared/core/location/PlotLoc.java +++ b/Core/src/main/java/com/plotsquared/core/location/PlotLoc.java @@ -76,11 +76,11 @@ public final class PlotLoc { } public int getX() { - return this.x; + return this.getX(); } public int getY() { - return this.y; + return this.getY(); } public int getZ() { @@ -90,14 +90,14 @@ public final class PlotLoc { @Override public int hashCode() { final int prime = 31; int result = 1; - result = (prime * result) + this.x; - result = (prime * result) + this.y; + result = (prime * result) + this.getX(); + result = (prime * result) + this.getY(); result = (prime * result) + this.z; return result; } @Override public String toString() { - if (this.y == -1) { + if (this.getY() == -1) { return String.format("%d,%d", x, z); } return String.format("%d,%d,%d", x, y, z); @@ -111,6 +111,6 @@ public final class PlotLoc { return false; } final PlotLoc other = (PlotLoc) obj; - return (this.x == other.x) && (this.y == other.y) && (this.z == other.z); + return (this.getX() == other.getX()) && (this.getY() == other.getY()) && (this.z == other.z); } } diff --git a/Core/src/main/java/com/plotsquared/core/player/PlotPlayer.java b/Core/src/main/java/com/plotsquared/core/player/PlotPlayer.java index 7b4c8f530..6d2428d05 100644 --- a/Core/src/main/java/com/plotsquared/core/player/PlotPlayer.java +++ b/Core/src/main/java/com/plotsquared/core/player/PlotPlayer.java @@ -576,8 +576,8 @@ public abstract class PlotPlayer

implements CommandCaller, OfflinePlotPlayer if (plot != null && Settings.Enabled_Components.PERSISTENT_META && plot .getArea() instanceof SinglePlotArea) { PlotId id = plot.getId(); - int x = id.x; - int z = id.y; + int x = id.getX(); + int z = id.getY(); ByteBuffer buffer = ByteBuffer.allocate(13); buffer.putShort((short) x); buffer.putShort((short) z); @@ -677,7 +677,7 @@ public abstract class PlotPlayer

implements CommandCaller, OfflinePlotPlayer ByteBuffer quitWorld = ByteBuffer.wrap(arr); final int plotX = quitWorld.getShort(); final int plotZ = quitWorld.getShort(); - PlotId id = new PlotId(plotX, plotZ); + PlotId id = PlotId.of(plotX, plotZ); int x = quitWorld.getInt(); int y = quitWorld.get() & 0xFF; int z = quitWorld.getInt(); diff --git a/Core/src/main/java/com/plotsquared/core/plot/Plot.java b/Core/src/main/java/com/plotsquared/core/plot/Plot.java index ba2384661..ba18a5649 100644 --- a/Core/src/main/java/com/plotsquared/core/plot/Plot.java +++ b/Core/src/main/java/com/plotsquared/core/plot/Plot.java @@ -76,11 +76,11 @@ import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.world.biome.BiomeType; import com.sk89q.worldedit.world.block.BlockTypes; import lombok.Getter; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.awt.geom.Area; import java.awt.geom.PathIterator; import java.awt.geom.Rectangle2D; @@ -131,7 +131,7 @@ public class Plot { private static Set connected_cache; private static Set regions_cache; - @Nonnull private final PlotId id; + @Nonnull private PlotId id; // These will be injected @Inject private EventDispatcher eventDispatcher; @@ -664,7 +664,7 @@ public class Plot { this.origin = this; PlotId min = this.id; for (Plot plot : this.getConnectedPlots()) { - if (plot.id.y < min.y || plot.id.y == min.y && plot.id.x < min.x) { + if (plot.id.getY() < min.getY() || plot.id.getY() == min.getY() && plot.id.getX() < min.getX()) { this.origin = plot; min = plot.id; } @@ -733,8 +733,10 @@ public class Plot { int i2 = 0; if (this.getSettings().getMerged(i2)) { if (this.getSettings().getMerged(i)) { - if (this.area.getPlotAbs(this.id.getRelative(i)).getMerged(i2)) { - return this.area.getPlotAbs(this.id.getRelative(i2)).getMerged(i); + if (this.area.getPlotAbs(this.id.getRelative(Direction.getFromIndex(i))) + .getMerged(i2)) { + return this.area.getPlotAbs(this.id.getRelative(Direction.getFromIndex(i2))) + .getMerged(i); } } } @@ -745,8 +747,9 @@ public class Plot { i = dir - 4; i2 = dir - 3; return this.getSettings().getMerged(i2) && this.getSettings().getMerged(i) - && this.area.getPlotAbs(this.id.getRelative(i)).getMerged(i2) && this.area - .getPlotAbs(this.id.getRelative(i2)).getMerged(i); + && this.area.getPlotAbs(this.id.getRelative(Direction.getFromIndex(i))) + .getMerged(i2) && this.area + .getPlotAbs(this.id.getRelative(Direction.getFromIndex(i2))).getMerged(i); } return false; @@ -1910,15 +1913,11 @@ public class Plot { return CompletableFuture.completedFuture(true); } // Swap cached - PlotId temp = new PlotId(this.getId().x, this.getId().y); - this.getId().x = plot.getId().x; - this.getId().y = plot.getId().y; - plot.getId().x = temp.x; - plot.getId().y = temp.y; + final PlotId temp = PlotId.of(this.getId().getX(), this.getId().getY()); + this.id = plot.getId().copy(); + plot.id = temp.copy(); this.area.removePlot(this.getId()); plot.area.removePlot(plot.getId()); - this.getId().recalculateHash(); - plot.getId().recalculateHash(); this.area.addPlotAbs(this); plot.area.addPlotAbs(plot); // Swap database @@ -1942,9 +1941,7 @@ public class Plot { return false; } this.area.removePlot(this.id); - this.getId().x = plot.getId().x; - this.getId().y = plot.getId().y; - this.getId().recalculateHash(); + this.id = plot.getId().copy(); this.area.addPlotAbs(this); DBFunc.movePlot(this, plot); TaskManager.runTaskLater(whenDone, TaskTime.ticks(1L)); @@ -2078,7 +2075,7 @@ public class Plot { if (this.settings != null && this.settings.getAlias().length() > 1) { return this.settings.getAlias(); } - return this.area + ";" + this.id.x + ";" + this.id.y; + return this.area + ";" + this.id.toString(); } @@ -2293,8 +2290,8 @@ public class Plot { if (value) { Plot other = this.getRelative(direction).getBasePlot(false); if (!other.equals(this.getBasePlot(false))) { - Plot base = other.id.y < this.id.y - || other.id.y == this.id.y && other.id.x < this.id.x ? other : this.origin; + Plot base = other.id.getY() < this.id.getY() + || other.id.getY() == this.id.getY() && other.id.getX() < this.id.getX() ? other : this.origin; this.origin.origin = base; other.origin = base; this.origin = base; @@ -2583,36 +2580,21 @@ public class Plot { * @return Plot */ public Plot getRelative(int x, int y) { - return this.area.getPlotAbs(this.id.getRelative(x, y)); + return this.area.getPlotAbs(PlotId.of(this.id.getX() + x, this.id.getY() + y)); } public Plot getRelative(PlotArea area, int x, int y) { - return area.getPlotAbs(this.id.getRelative(x, y)); - } - - /** - * Gets the plot in a relative direction
- * 0 = north
- * 1 = east
- * 2 = south
- * 3 = west
- * Note: May be null if the partial plot area does not include the relative location - * - * @param direction - * @return - */ - @Deprecated public Plot getRelative(int direction) { - return this.area.getPlotAbs(this.id.getRelative(direction)); + return area.getPlotAbs(PlotId.of(this.id.getX() + x, this.id.getY() + y)); } /** * Gets the plot in a relative direction * Note: May be null if the partial plot area does not include the relative location * - * @param direction + * @param direction Direction * @return the plot relative to this one */ - public Plot getRelative(Direction direction) { + @Nullable public Plot getRelative(@Nonnull Direction direction) { return this.area.getPlotAbs(this.id.getRelative(direction)); } @@ -2768,12 +2750,12 @@ public class Plot { continue; } boolean merge = true; - PlotId bot = new PlotId(current.getId().x, current.getId().y); - PlotId top = new PlotId(current.getId().x, current.getId().y); + PlotId bot = PlotId.of(current.getId().getX(), current.getId().getY()); + PlotId top = PlotId.of(current.getId().getX(), current.getId().getY()); while (merge) { merge = false; - ArrayList ids = MainUtil.getPlotSelectionIds(new PlotId(bot.x, bot.y - 1), - new PlotId(top.x, bot.y - 1)); + ArrayList ids = MainUtil.getPlotSelectionIds(PlotId.of(bot.getX(), bot.getY() - 1), + PlotId.of(top.getX(), bot.getY() - 1)); boolean tmp = true; for (PlotId id : ids) { Plot plot = this.area.getPlotAbs(id); @@ -2784,10 +2766,10 @@ public class Plot { } if (tmp) { merge = true; - bot.y--; + bot = PlotId.of(bot.getX(), bot.getY() - 1); } - ids = MainUtil.getPlotSelectionIds(new PlotId(top.x + 1, bot.y), - new PlotId(top.x + 1, top.y)); + ids = MainUtil.getPlotSelectionIds(PlotId.of(top.getX() + 1, bot.getY()), + PlotId.of(top.getX() + 1, top.getY())); tmp = true; for (PlotId id : ids) { Plot plot = this.area.getPlotAbs(id); @@ -2798,10 +2780,10 @@ public class Plot { } if (tmp) { merge = true; - top.x++; + top = PlotId.of(top.getX() + 1, top.getY()); } - ids = MainUtil.getPlotSelectionIds(new PlotId(bot.x, top.y + 1), - new PlotId(top.x, top.y + 1)); + ids = MainUtil.getPlotSelectionIds(PlotId.of(bot.getX(), top.getY() + 1), + PlotId.of(top.getX(), top.getY() + 1)); tmp = true; for (PlotId id : ids) { Plot plot = this.area.getPlotAbs(id); @@ -2812,10 +2794,10 @@ public class Plot { } if (tmp) { merge = true; - top.y++; + top = PlotId.of(top.getX(), top.getY() + 1); } - ids = MainUtil.getPlotSelectionIds(new PlotId(bot.x - 1, bot.y), - new PlotId(bot.x - 1, top.y)); + ids = MainUtil.getPlotSelectionIds(PlotId.of(bot.getX() - 1, bot.getY()), + PlotId.of(bot.getX() - 1, top.getY())); tmp = true; for (PlotId id : ids) { Plot plot = this.area.getPlotAbs(id); @@ -2826,14 +2808,14 @@ public class Plot { } if (tmp) { merge = true; - bot.x--; + bot = PlotId.of(bot.getX() - 1, bot.getX()); } } Location gtopabs = this.area.getPlotAbs(top).getTopAbs(); Location gbotabs = this.area.getPlotAbs(bot).getBottomAbs(); visited.addAll(MainUtil.getPlotSelectionIds(bot, top)); - for (int x = bot.x; x <= top.x; x++) { - Plot plot = this.area.getPlotAbs(new PlotId(x, top.y)); + for (int x = bot.getX(); x <= top.getX(); x++) { + Plot plot = this.area.getPlotAbs(PlotId.of(x, top.getY())); if (plot.getMerged(Direction.SOUTH)) { // south wedge Location toploc = plot.getExtendedTopAbs(); @@ -2852,8 +2834,8 @@ public class Plot { } } - for (int y = bot.y; y <= top.y; y++) { - Plot plot = this.area.getPlotAbs(new PlotId(top.x, y)); + for (int y = bot.getY(); y <= top.getY(); y++) { + Plot plot = this.area.getPlotAbs(PlotId.of(top.getX(), y)); if (plot.getMerged(Direction.EAST)) { // east wedge Location toploc = plot.getExtendedTopAbs(); @@ -3084,8 +3066,8 @@ public class Plot { public void mergePlot(Plot lesserPlot, boolean removeRoads) { Plot greaterPlot = this; lesserPlot.removeSign(); - if (lesserPlot.getId().x == greaterPlot.getId().x) { - if (lesserPlot.getId().y > greaterPlot.getId().y) { + if (lesserPlot.getId().getX() == greaterPlot.getId().getX()) { + if (lesserPlot.getId().getY() > greaterPlot.getId().getY()) { Plot tmp = lesserPlot; lesserPlot = greaterPlot; greaterPlot = tmp; @@ -3110,7 +3092,7 @@ public class Plot { } } } else { - if (lesserPlot.getId().x > greaterPlot.getId().x) { + if (lesserPlot.getId().getX() > greaterPlot.getId().getX()) { Plot tmp = lesserPlot; lesserPlot = greaterPlot; greaterPlot = tmp; @@ -3148,8 +3130,8 @@ public class Plot { */ public CompletableFuture move(final Plot destination, final Runnable whenDone, boolean allowSwap) { - final PlotId offset = new PlotId(destination.getId().x - this.getId().x, - destination.getId().y - this.getId().y); + final PlotId offset = PlotId.of(destination.getId().getX() - this.getId().getX(), + destination.getId().getY() - this.getId().getY()); Location db = destination.getBottomAbs(); Location ob = this.getBottomAbs(); final int offsetX = db.getX() - ob.getX(); @@ -3161,7 +3143,7 @@ public class Plot { AtomicBoolean occupied = new AtomicBoolean(false); Set plots = this.getConnectedPlots(); for (Plot plot : plots) { - Plot other = plot.getRelative(destination.getArea(), offset.x, offset.y); + Plot other = plot.getRelative(destination.getArea(), offset.getX(), offset.getY()); if (other.hasOwner()) { if (!allowSwap) { TaskManager.runTaskLater(whenDone, TaskTime.ticks(1L)); @@ -3184,7 +3166,7 @@ public class Plot { if (plotIterator.hasNext()) { while (plotIterator.hasNext()) { final Plot plot = plotIterator.next(); - final Plot other = plot.getRelative(destination.getArea(), offset.x, offset.y); + final Plot other = plot.getRelative(destination.getArea(), offset.getX(), offset.getY()); final CompletableFuture swapResult = plot.swapData(other); if (future == null) { future = swapResult; @@ -3227,7 +3209,7 @@ public class Plot { if (regions.isEmpty()) { Plot plot = destination.getRelative(0, 0); Plot originPlot = originArea - .getPlotAbs(new PlotId(plot.id.x - offset.x, plot.id.y - offset.y)); + .getPlotAbs(PlotId.of(plot.id.getX() - offset.getX(), plot.id.getY() - offset.getY())); final Runnable clearDone = () -> { for (final Plot current : plot.getConnectedPlots()) { getManager().claimPlot(current); @@ -3264,8 +3246,8 @@ public class Plot { * @return */ public boolean copy(final Plot destination, final Runnable whenDone) { - PlotId offset = new PlotId(destination.getId().x - this.getId().x, - destination.getId().y - this.getId().y); + PlotId offset = PlotId.of(destination.getId().getX() - this.getId().getX(), + destination.getId().getY() - this.getId().getY()); Location db = destination.getBottomAbs(); Location ob = this.getBottomAbs(); final int offsetX = db.getX() - ob.getX(); @@ -3276,7 +3258,7 @@ public class Plot { } Set plots = this.getConnectedPlots(); for (Plot plot : plots) { - Plot other = plot.getRelative(destination.getArea(), offset.x, offset.y); + Plot other = plot.getRelative(destination.getArea(), offset.getX(), offset.getY()); if (other.hasOwner()) { TaskManager.runTaskLater(whenDone, TaskTime.ticks(1L)); return false; @@ -3286,7 +3268,7 @@ public class Plot { destination.updateWorldBorder(); // copy data for (Plot plot : plots) { - Plot other = plot.getRelative(destination.getArea(), offset.x, offset.y); + Plot other = plot.getRelative(destination.getArea(), offset.getX(), offset.getY()); other.create(plot.getOwner(), false); if (!plot.getFlagContainer().getFlagMap().isEmpty()) { final Collection> existingFlags = other.getFlags(); @@ -3399,4 +3381,13 @@ public class Plot { return FlagContainer.castUnsafe(flagInstance).getValue(); } + /** + * Change the plot ID + * + * @param id new plot ID + */ + public void setId(@Nonnull final PlotId id) { + this.id = id; + } + } diff --git a/Core/src/main/java/com/plotsquared/core/plot/PlotArea.java b/Core/src/main/java/com/plotsquared/core/plot/PlotArea.java index 9ad26c0aa..027e73e0b 100644 --- a/Core/src/main/java/com/plotsquared/core/plot/PlotArea.java +++ b/Core/src/main/java/com/plotsquared/core/plot/PlotArea.java @@ -27,7 +27,6 @@ package com.plotsquared.core.plot; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; -import com.plotsquared.core.PlotSquared; import com.plotsquared.core.collection.QuadMap; import com.plotsquared.core.configuration.CaptionUtility; import com.plotsquared.core.configuration.Captions; @@ -66,11 +65,11 @@ import com.sk89q.worldedit.world.gamemode.GameModes; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -215,8 +214,8 @@ public abstract class PlotArea { * * @return the minimum value for a {@link PlotId} */ - public PlotId getMin() { - return this.min == null ? new PlotId(Integer.MIN_VALUE, Integer.MIN_VALUE) : this.min; + @Nonnull public PlotId getMin() { + return this.min == null ? PlotId.of(Integer.MIN_VALUE, Integer.MIN_VALUE) : this.min; } /** @@ -224,8 +223,8 @@ public abstract class PlotArea { * * @return the maximum value for a {@link PlotId} */ - public PlotId getMax() { - return this.max == null ? new PlotId(Integer.MAX_VALUE, Integer.MAX_VALUE) : this.max; + @Nonnull public PlotId getMax() { + return this.max == null ? PlotId.of(Integer.MAX_VALUE, Integer.MAX_VALUE) : this.max; } @Override public boolean equals(Object obj) { @@ -596,8 +595,8 @@ public abstract class PlotArea { } public boolean contains(@Nonnull final PlotId id) { - return this.min == null || (id.x >= this.min.x && id.x <= this.max.x && id.y >= this.min.y - && id.y <= this.max.y); + return this.min == null || (id.getX() >= this.min.getX() && id.getX() <= this.max.getX() && + id.getY() >= this.min.getY() && id.getY() <= this.max.getY()); } public boolean contains(@Nonnull final Location location) { @@ -661,8 +660,8 @@ public abstract class PlotArea { @Nullable public Plot getPlotAbs(@Nonnull final PlotId id) { Plot plot = getOwnedPlotAbs(id); if (plot == null) { - if (this.min != null && (id.x < this.min.x || id.x > this.max.x || id.y < this.min.y - || id.y > this.max.y)) { + if (this.min != null && (id.getX() < this.min.getX() || id.getX() > this.max.getX() || id.getY() < this.min.getY() + || id.getY() > this.max.getY())) { return null; } return new Plot(this, id); @@ -673,8 +672,8 @@ public abstract class PlotArea { @Nullable public Plot getPlot(@Nonnull final PlotId id) { final Plot plot = getOwnedPlotAbs(id); if (plot == null) { - if (this.min != null && (id.x < this.min.x || id.x > this.max.x || id.y < this.min.y - || id.y > this.max.y)) { + if (this.min != null && (id.getX() < this.min.getX() || id.getX() > this.max.getX() || id.getY() < this.min.getY() + || id.getY() > this.max.getY())) { return null; } return new Plot(this, id); @@ -696,7 +695,7 @@ public abstract class PlotArea { if (plot == null) { return null; } - return this.clusters != null ? this.clusters.get(plot.getId().x, plot.getId().y) : null; + return this.clusters != null ? this.clusters.get(plot.getId().getX(), plot.getId().getY()) : null; } @Nullable @@ -714,7 +713,7 @@ public abstract class PlotArea { } @Nullable PlotCluster getCluster(@Nonnull final PlotId id) { - return this.clusters != null ? this.clusters.get(id.x, id.y) : null; + return this.clusters != null ? this.clusters.get(id.getX(), id.getY()) : null; } /** @@ -800,22 +799,22 @@ public abstract class PlotArea { PlotId min = getMin(); PlotId max = getMax(); if (getType() == PlotAreaType.PARTIAL) { - center = new PlotId(MathMan.average(min.x, max.x), MathMan.average(min.y, max.y)); - plots = Math.max(max.x - min.x + 1, max.y - min.y + 1) + 1; + center = PlotId.of(MathMan.average(min.getX(), max.getX()), MathMan.average(min.getY(), max.getY())); + plots = Math.max(max.getX() - min.getX() + 1, max.getY() - min.getY() + 1) + 1; if (start != null) { - start = new PlotId(start.x - center.x, start.y - center.y); + start = PlotId.of(start.getX() - center.getX(), start.getY() - center.getY()); } } else { - center = new PlotId(0, 0); + center = PlotId.of(0, 0); plots = Integer.MAX_VALUE; } for (int i = 0; i < plots; i++) { if (start == null) { - start = getMeta("lastPlot", new PlotId(0, 0)); + start = getMeta("lastPlot", PlotId.of(0, 0)); } else { - start = start.getNextId(1); + start = start.getNextId(); } - PlotId currentId = new PlotId(center.x + start.x, center.y + start.y); + PlotId currentId = PlotId.of(center.getX() + start.getX(), center.getY() + start.getY()); Plot plot = getPlotAbs(currentId); if (plot != null && plot.canClaim(player)) { setMeta("lastPlot", start); @@ -888,7 +887,7 @@ public abstract class PlotArea { public boolean canClaim(@Nullable final PlotPlayer player, @Nonnull final PlotId pos1, @Nonnull final PlotId pos2) { - if (pos1.x == pos2.x && pos1.y == pos2.y) { + if (pos1.getX() == pos2.getX() && pos1.getY() == pos2.getY()) { if (getOwnedPlot(pos1) != null) { return false; } @@ -898,9 +897,9 @@ public abstract class PlotArea { } return plot.canClaim(player); } - for (int x = pos1.x; x <= pos2.x; x++) { - for (int y = pos1.y; y <= pos2.y; y++) { - final PlotId id = new PlotId(x, y); + for (int x = pos1.getX(); x <= pos2.getX(); x++) { + for (int y = pos1.getY(); y <= pos2.getY(); y++) { + final PlotId id = PlotId.of(x, y); final Plot plot = getPlotAbs(id); if (plot == null) { return false; @@ -930,9 +929,9 @@ public abstract class PlotArea { final Set trusted = new HashSet<>(); final Set members = new HashSet<>(); final Set denied = new HashSet<>(); - for (int x = pos1.x; x <= pos2.x; x++) { - for (int y = pos1.y; y <= pos2.y; y++) { - PlotId id = new PlotId(x, y); + for (int x = pos1.getX(); x <= pos2.getX(); x++) { + for (int y = pos1.getY(); y <= pos2.getY(); y++) { + PlotId id = PlotId.of(x, y); Plot plot = getPlotAbs(id); trusted.addAll(plot.getTrusted()); members.addAll(plot.getMembers()); @@ -945,11 +944,11 @@ public abstract class PlotArea { members.removeAll(trusted); denied.removeAll(trusted); denied.removeAll(members); - for (int x = pos1.x; x <= pos2.x; x++) { - for (int y = pos1.y; y <= pos2.y; y++) { - final boolean lx = x < pos2.x; - final boolean ly = y < pos2.y; - final PlotId id = new PlotId(x, y); + for (int x = pos1.getX(); x <= pos2.getX(); x++) { + for (int y = pos1.getY(); y <= pos2.getY(); y++) { + final boolean lx = x < pos2.getX(); + final boolean ly = y < pos2.getY(); + final PlotId id = PlotId.of(x, y); final Plot plot = getPlotAbs(id); plot.setTrusted(trusted); @@ -991,22 +990,22 @@ public abstract class PlotArea { * @return the plots in the selection which are owned */ public Set getPlotSelectionOwned(@Nonnull final PlotId pos1, @Nonnull final PlotId pos2) { - final int size = (1 + pos2.x - pos1.x) * (1 + pos2.y - pos1.y); + final int size = (1 + pos2.getX() - pos1.getX()) * (1 + pos2.getY() - pos1.getY()); final Set result = new HashSet<>(); if (size < 16 || size < getPlotCount()) { for (final PlotId pid : MainUtil.getPlotSelectionIds(pos1, pos2)) { final Plot plot = getPlotAbs(pid); if (plot.hasOwner()) { - if (plot.getId().x > pos1.x || plot.getId().y > pos1.y - || plot.getId().x < pos2.x || plot.getId().y < pos2.y) { + if (plot.getId().getX() > pos1.getX() || plot.getId().getY() > pos1.getY() + || plot.getId().getX() < pos2.getX() || plot.getId().getY() < pos2.getY()) { result.add(plot); } } } } else { for (final Plot plot : getPlots()) { - if (plot.getId().x > pos1.x || plot.getId().y > pos1.y || plot.getId().x < pos2.x - || plot.getId().y < pos2.y) { + if (plot.getId().getX() > pos1.getX() || plot.getId().getY() > pos1.getY() || plot.getId().getX() < pos2.getX() + || plot.getId().getY() < pos2.getY()) { result.add(plot); } } @@ -1026,8 +1025,8 @@ public abstract class PlotArea { if (this.clusters == null) { this.clusters = new QuadMap(Integer.MAX_VALUE, 0, 0, 62) { @Override public CuboidRegion getRegion(PlotCluster value) { - BlockVector2 pos1 = BlockVector2.at(value.getP1().x, value.getP1().y); - BlockVector2 pos2 = BlockVector2.at(value.getP2().x, value.getP2().y); + BlockVector2 pos1 = BlockVector2.at(value.getP1().getX(), value.getP1().getY()); + BlockVector2 pos2 = BlockVector2.at(value.getP2().getX(), value.getP2().getY()); return new CuboidRegion(pos1.toBlockVector3(), pos2.toBlockVector3(Plot.MAX_HEIGHT - 1)); } diff --git a/Core/src/main/java/com/plotsquared/core/plot/PlotCluster.java b/Core/src/main/java/com/plotsquared/core/plot/PlotCluster.java index ea7484129..f5ec63146 100644 --- a/Core/src/main/java/com/plotsquared/core/plot/PlotCluster.java +++ b/Core/src/main/java/com/plotsquared/core/plot/PlotCluster.java @@ -32,6 +32,7 @@ import com.plotsquared.core.util.MainUtil; import com.plotsquared.core.util.RegionUtil; import com.sk89q.worldedit.regions.CuboidRegion; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.util.HashSet; import java.util.UUID; @@ -87,7 +88,8 @@ public class PlotCluster { } private void setRegion() { - this.region = RegionUtil.createRegion(this.pos1.x, this.pos2.x, this.pos1.y, this.pos2.y); + this.region = RegionUtil.createRegion(this.pos1.getX(), this.pos2.getX(), + this.pos1.getY(), this.pos2.getY()); } public CuboidRegion getRegion() { @@ -117,7 +119,7 @@ public class PlotCluster { * Get the area (in plots). */ public int getArea() { - return (1 + this.pos2.x - this.pos1.x) * (1 + this.pos2.y - this.pos1.y); + return (1 + this.pos2.getX() - this.pos1.getX()) * (1 + this.pos2.getY() - this.pos1.getY()); } public void setArea(PlotArea plotArea) { @@ -148,8 +150,7 @@ public class PlotCluster { } @Override public String toString() { - return this.area + ";" + this.pos1.x + ";" + this.pos1.y + ";" + this.pos2.x + ";" - + this.pos2.y; + return this.area + ";" + this.pos1.toString() + ";" + this.pos2.toString(); } public void getHome(@Nonnull final Consumer result) { @@ -180,13 +181,13 @@ public class PlotCluster { } } - public PlotId getCenterPlotId() { - PlotId bot = getP1(); - PlotId top = getP2(); - return new PlotId((bot.x + top.x) / 2, (bot.y + top.y) / 2); + @Nonnull public PlotId getCenterPlotId() { + final PlotId bot = getP1(); + final PlotId top = getP2(); + return PlotId.of((bot.getX() + top.getX()) / 2, (bot.getY() + top.getY()) / 2); } - public Plot getCenterPlot() { + @Nullable public Plot getCenterPlot() { return this.area.getPlotAbs(getCenterPlotId()); } @@ -201,12 +202,12 @@ public class PlotCluster { } public boolean intersects(PlotId pos1, PlotId pos2) { - return pos1.x <= this.pos2.x && pos2.x >= this.pos1.x && pos1.y <= this.pos2.y - && pos2.y >= this.pos1.y; + return pos1.getX() <= this.pos2.getX() && pos2.getX() >= this.pos1.getX() && + pos1.getY() <= this.pos2.getY() && pos2.getY() >= this.pos1.getY(); } public boolean contains(PlotId id) { - return this.pos1.x <= id.x && this.pos1.y <= id.y && this.pos2.x >= id.x - && this.pos2.y >= id.y; + return this.pos1.getX() <= id.getX() && this.pos1.getY() <= id.getY() && + this.pos2.getX() >= id.getX() && this.pos2.getY() >= id.getY(); } } diff --git a/Core/src/main/java/com/plotsquared/core/plot/PlotId.java b/Core/src/main/java/com/plotsquared/core/plot/PlotId.java index 3327c1473..64c28a2d5 100644 --- a/Core/src/main/java/com/plotsquared/core/plot/PlotId.java +++ b/Core/src/main/java/com/plotsquared/core/plot/PlotId.java @@ -26,14 +26,20 @@ package com.plotsquared.core.plot; import com.plotsquared.core.location.Direction; +import org.jetbrains.annotations.NotNull; + import javax.annotation.Nonnull; import javax.annotation.Nullable; +/** + * Plot (X,Y) tuples for plot locations + * within a plot area + */ public class PlotId { - @Deprecated public int x; - @Deprecated public int y; - private int hash; + private final int x; + private final int y; + private final int hash; /** * PlotId class (PlotId x,y values do not correspond to Block locations) @@ -41,9 +47,20 @@ public class PlotId { * @param x The plot x coordinate * @param y The plot y coordinate */ - public PlotId(int x, int y) { + private PlotId(int x, int y) { this.x = x; this.y = y; + this.hash = (this.getX() << 16) | (this.getY() & 0xFFFF); + } + + /** + * Create a new plot ID instance + * + * @param x The plot x coordinate + * @param y The plot y coordinate + */ + @Nonnull public static PlotId of(final int x, final int y) { + return PlotId.of(x, y); } /** @@ -60,6 +77,12 @@ public class PlotId { return plot; } + /** + * Attempt to parse a plot ID from a string + * + * @param string ID string + * @return Plot ID, or {@code null} if none could be parsed + */ @Nullable public static PlotId fromStringOrNull(@Nonnull String string) { String[] parts = string.split("[;,.]"); if (parts.length < 2) { @@ -73,101 +96,102 @@ public class PlotId { } catch (NumberFormatException ignored) { return null; } - return new PlotId(x, y); - } - - public static PlotId of(@Nullable Plot plot) { - return plot != null ? plot.getId() : null; + return of(x, y); } /** * Gets the PlotId from the HashCode
* Note: Only accurate for small x,z values (short) * - * @param hash - * @return + * @param hash ID hash + * @return Plot ID */ - public static PlotId unpair(int hash) { - return new PlotId(hash >> 16, hash & 0xFFFF); + @Nonnull public static PlotId unpair(final int hash) { + return PlotId.of(hash >> 16, hash & 0xFFFF); } + /** + * Get a copy of the plot ID + * + * @return Plot ID copy + */ + @NotNull public PlotId copy() { + return of(this.getX(), this.getY()); + } + + /** + * Get the ID X component + * + * @return X component + */ public int getX() { - return x; + return this.getX(); } + /** + * Get the ID Y component + * + * @return Y component + */ public int getY() { - return y; + return this.getY(); } - public PlotId getNextId(int step) { + /** + * Get the next plot ID for claiming purposes + * + * @return Next plot ID + */ + @Nonnull public PlotId getNextId() { int absX = Math.abs(x); int absY = Math.abs(y); if (absX > absY) { if (x > 0) { - return new PlotId(x, y + 1); + return PlotId.of(x, y + 1); } else { - return new PlotId(x, y - 1); + return PlotId.of(x, y - 1); } } else if (absY > absX) { if (y > 0) { - return new PlotId(x - 1, y); + return PlotId.of(x - 1, y); } else { - return new PlotId(x + 1, y); + return PlotId.of(x + 1, y); } } else { if (x == y && x > 0) { - return new PlotId(x, y + step); + return PlotId.of(x, y + 1); } if (x == absX) { - return new PlotId(x, y + 1); + return PlotId.of(x, y + 1); } if (y == absY) { - return new PlotId(x, y - 1); + return PlotId.of(x, y - 1); } - return new PlotId(x + 1, y); + return PlotId.of(x + 1, y); } } - public PlotId getRelative(Direction direction) { - return getRelative(direction.getIndex()); - } - /** * Get the PlotId in a relative direction - * 0 = north
- * 1 = east
- * 2 = south
- * 3 = west
* - * @param direction - * @return PlotId + * @param direction Direction + * @return Relative plot ID */ - public PlotId getRelative(int direction) { + @Nonnull public PlotId getRelative(@Nonnull final Direction direction) { switch (direction) { - case 0: - return new PlotId(this.x, this.y - 1); - case 1: - return new PlotId(this.x + 1, this.y); - case 2: - return new PlotId(this.x, this.y + 1); - case 3: - return new PlotId(this.x - 1, this.y); + case NORTH: + return PlotId.of(this.getX(), this.getY() - 1); + case EAST: + return PlotId.of(this.getX() + 1, this.getY()); + case SOUTH: + return PlotId.of(this.getX(), this.getY() + 1); + case WEST: + return PlotId.of(this.getX() - 1, this.getY()); } return this; } - /** - * Get the PlotId in a relative location - * - * @param x - * @param y - * @return PlotId - */ - public PlotId getRelative(int x, int y) { - return new PlotId(this.x + x, this.y + y); - } - - @Override public boolean equals(Object obj) { + @Override public boolean equals(final Object obj) { if (this == obj) { return true; } @@ -180,42 +204,42 @@ public class PlotId { if (getClass() != obj.getClass()) { return false; } - PlotId other = (PlotId) obj; - return this.x == other.x && this.y == other.y; + final PlotId other = (PlotId) obj; + return this.getX() == other.getX() && this.getY() == other.getY(); } /** - * e.g. - * 5;-6 + * Get a String representation of the plot ID where the + * components are separated by ";" * - * @return + * @return {@code x + ";" + y} */ - @Override public String toString() { - return this.x + ";" + this.y; - } - - public String toCommaSeparatedString() { - return this.x + "," + this.y; - } - - public String toDashSeparatedString() { - return this.x + "-" + this.y; + @Override @Nonnull public String toString() { + return this.getX() + ";" + this.getY(); } /** - * The PlotId object caches the hashcode for faster mapping/fetching/sorting
- * - Recalculation is required if the x/y values change - * TODO maybe make x/y values private and add this to the mutators + * Get a String representation of the plot ID where the + * components are separated by "," + * + * @return {@code x + "," + y} */ - public void recalculateHash() { - this.hash = 0; - hashCode(); + @Nonnull public String toCommaSeparatedString() { + return this.getX() + "," + this.getY(); + } + + /** + * Get a String representation of the plot ID where the + * components are separated by "-" + * + * @return {@code x + "-" + y} + */ + @Nonnull public String toDashSeparatedString() { + return this.getX() + "-" + this.getY(); } @Override public int hashCode() { - if (this.hash == 0) { - this.hash = (this.x << 16) | (this.y & 0xFFFF); - } return this.hash; } + } diff --git a/Core/src/main/java/com/plotsquared/core/plot/schematic/PlotItem.java b/Core/src/main/java/com/plotsquared/core/plot/schematic/PlotItem.java deleted file mode 100644 index c8e614c71..000000000 --- a/Core/src/main/java/com/plotsquared/core/plot/schematic/PlotItem.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * _____ _ _ _____ _ - * | __ \| | | | / ____| | | - * | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | - * | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` | - * | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| | - * |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_| - * | | - * |_| - * PlotSquared plot management system for Minecraft - * Copyright (C) 2020 IntellectualSites - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.plotsquared.core.plot.schematic; - -import com.sk89q.worldedit.world.item.ItemType; - -public class PlotItem { - - public final int x; - public final int y; - public final int z; - // public final short[] id; - // public final byte[] data; - public final ItemType[] types; - public final byte[] amount; - - public PlotItem(short x, short y, short z, ItemType[] types, byte[] amount) { - this.x = x; - this.y = y; - this.z = z; - this.types = types; - this.amount = amount; - } -} diff --git a/Core/src/main/java/com/plotsquared/core/plot/world/SinglePlotManager.java b/Core/src/main/java/com/plotsquared/core/plot/world/SinglePlotManager.java index a386022a3..2335735fd 100644 --- a/Core/src/main/java/com/plotsquared/core/plot/world/SinglePlotManager.java +++ b/Core/src/main/java/com/plotsquared/core/plot/world/SinglePlotManager.java @@ -46,11 +46,11 @@ public class SinglePlotManager extends PlotManager { } @Override public PlotId getPlotIdAbs(int x, int y, int z) { - return new PlotId(0, 0); + return PlotId.of(0, 0); } @Override public PlotId getPlotId(int x, int y, int z) { - return new PlotId(0, 0); + return PlotId.of(0, 0); } @Override public Location getPlotBottomLocAbs(@Nonnull final PlotId plotId) { diff --git a/Core/src/main/java/com/plotsquared/core/util/EventDispatcher.java b/Core/src/main/java/com/plotsquared/core/util/EventDispatcher.java index 2dc715a09..47ae83d29 100644 --- a/Core/src/main/java/com/plotsquared/core/util/EventDispatcher.java +++ b/Core/src/main/java/com/plotsquared/core/util/EventDispatcher.java @@ -250,7 +250,7 @@ public class EventDispatcher { })); MainUtil.sendMessage(player, CaptionUtility.format(player, Captions.TELEPORTED_TO_ROAD.getTranslated()) - + " (on-login) " + "(" + plot.getId().x + ";" + plot.getId().y + ")"); + + " (on-login) " + "(" + plot.getId().getX() + ";" + plot.getId().getY() + ")"); } } diff --git a/Core/src/main/java/com/plotsquared/core/util/MainUtil.java b/Core/src/main/java/com/plotsquared/core/util/MainUtil.java index edfa3f902..793643907 100644 --- a/Core/src/main/java/com/plotsquared/core/util/MainUtil.java +++ b/Core/src/main/java/com/plotsquared/core/util/MainUtil.java @@ -363,9 +363,9 @@ public class MainUtil { */ public static ArrayList getPlotSelectionIds(PlotId pos1, PlotId pos2) { 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)); + for (int x = pos1.getX(); x <= pos2.getX(); x++) { + for (int y = pos1.getY(); y <= pos2.getY(); y++) { + myPlots.add(PlotId.of(x, y)); } } return myPlots; diff --git a/Core/src/main/java/com/plotsquared/core/util/SchematicHandler.java b/Core/src/main/java/com/plotsquared/core/util/SchematicHandler.java index fde4a7008..83ac22219 100644 --- a/Core/src/main/java/com/plotsquared/core/util/SchematicHandler.java +++ b/Core/src/main/java/com/plotsquared/core/util/SchematicHandler.java @@ -139,11 +139,11 @@ public abstract class SchematicHandler { final String name; if (namingScheme == null) { name = - plot.getId().x + ";" + plot.getId().y + ',' + plot.getArea() + ',' + owner; + plot.getId().getX() + ";" + plot.getId().getY() + ',' + plot.getArea() + ',' + owner; } else { name = namingScheme.replaceAll("%id%", plot.getId().toString()) - .replaceAll("%idx%", plot.getId().x + "") - .replaceAll("%idy%", plot.getId().y + "") + .replaceAll("%idx%", plot.getId().getX() + "") + .replaceAll("%idy%", plot.getId().getY() + "") .replaceAll("%world%", plot.getArea().toString()); } diff --git a/Core/src/main/resources/furthest.js b/Core/src/main/resources/furthest.js index 046cc0535..2d18db025 100644 --- a/Core/src/main/resources/furthest.js +++ b/Core/src/main/resources/furthest.js @@ -34,20 +34,20 @@ if (PS.hasPlotArea("%s0")) { var maxplot; for (var i in plots) { var plot = plots[i]; - if (plot.x > max) { - max = plot.x; + if (plot.getX() > max) { + max = plot.getX(); maxplot = plot; } - if (plot.y > max) { - max = plot.y; + if (plot.getY() > max) { + max = plot.getY(); maxplot = plot; } - if (-plot.x > max) { - max = -plot.x; + if (-plot.getX() > max) { + max = -plot.getX(); maxplot = plot; } - if (-plot.y > max) { - max = -plot.y; + if (-plot.getY() > max) { + max = -plot.getY(); maxplot = plot; } } diff --git a/Core/src/test/java/com/plotsquared/core/plot/FlagTest.java b/Core/src/test/java/com/plotsquared/core/plot/FlagTest.java index 5f8d2859f..3a6683ef4 100644 --- a/Core/src/test/java/com/plotsquared/core/plot/FlagTest.java +++ b/Core/src/test/java/com/plotsquared/core/plot/FlagTest.java @@ -42,7 +42,7 @@ public class FlagTest { } // @Test public void flagTest() throws Exception { -// Plot plot = new Plot(null, new PlotId(0, 0)); +// Plot plot = new Plot(null, PlotId.of(0, 0)); // plot.owner = UUID.fromString("84499644-ad72-454b-a19d-f28c28df382b"); // //plot.setFlag(use, use.parseValue("33,33:1,6:4")); //TODO fix this so FlagTest will run during compile // Optional flag = plot.getFlag(use); From 39fdaa367ca52a04095fad9b5110e5dc541cadd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20S=C3=B6derberg?= Date: Sat, 18 Jul 2020 16:18:23 +0200 Subject: [PATCH 3/4] Make PlotQuery iterable --- .../com/plotsquared/core/command/Cluster.java | 4 ++-- .../com/plotsquared/core/command/Target.java | 2 +- .../com/plotsquared/core/command/Trim.java | 2 +- .../com/plotsquared/core/util/MainUtil.java | 2 +- .../core/util/query/PlotQuery.java | 20 +++++++------------ 5 files changed, 12 insertions(+), 18 deletions(-) diff --git a/Core/src/main/java/com/plotsquared/core/command/Cluster.java b/Core/src/main/java/com/plotsquared/core/command/Cluster.java index 793225cf7..cfd416e8d 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Cluster.java +++ b/Core/src/main/java/com/plotsquared/core/command/Cluster.java @@ -454,7 +454,7 @@ public class Cluster extends SubCommand { cluster.getName()); } for (final Plot plot : PlotQuery.newQuery().inWorld(player2.getLocation() - .getWorldName()).ownedBy(uuid).asCollection()) { + .getWorldName()).ownedBy(uuid)) { PlotCluster current = plot.getCluster(); if (current != null && current.equals(cluster)) { plot.unclaim(); @@ -513,7 +513,7 @@ public class Cluster extends SubCommand { DBFunc.removeInvited(cluster, uuid); MainUtil.sendMessage(player, Captions.CLUSTER_REMOVED, cluster.getName()); for (final Plot plot : PlotQuery.newQuery().inWorld(player.getLocation().getWorldName()) - .ownedBy(uuid).asCollection()) { + .ownedBy(uuid)) { PlotCluster current = plot.getCluster(); if (current != null && current.equals(cluster)) { plot.unclaim(); diff --git a/Core/src/main/java/com/plotsquared/core/command/Target.java b/Core/src/main/java/com/plotsquared/core/command/Target.java index 6c1fdc6c6..3c0941c2c 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Target.java +++ b/Core/src/main/java/com/plotsquared/core/command/Target.java @@ -58,7 +58,7 @@ public class Target extends SubCommand { Plot target = null; if (StringMan.isEqualIgnoreCaseToAny(args[0], "near", "nearest")) { int distance = Integer.MAX_VALUE; - for (Plot plot : PlotQuery.newQuery().inWorld(location.getWorldName()).asCollection()) { + for (Plot plot : PlotQuery.newQuery().inWorld(location.getWorldName())) { double current = plot.getCenterSynchronous().getEuclideanDistanceSquared(location); if (current < distance) { distance = (int) current; diff --git a/Core/src/main/java/com/plotsquared/core/command/Trim.java b/Core/src/main/java/com/plotsquared/core/command/Trim.java index 3afe16c56..d8346fb00 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Trim.java +++ b/Core/src/main/java/com/plotsquared/core/command/Trim.java @@ -173,7 +173,7 @@ public class Trim extends SubCommand { int bz = cbz << 4; CuboidRegion region = RegionUtil.createRegion(bx, bx + 511, bz, bz + 511); - for (Plot plot : PlotQuery.newQuery().inWorld(world).asCollection()) { + for (Plot plot : PlotQuery.newQuery().inWorld(world)) { Location bot = plot.getBottomAbs(); Location top = plot.getExtendedTopAbs(); CuboidRegion plotReg = RegionUtil diff --git a/Core/src/main/java/com/plotsquared/core/util/MainUtil.java b/Core/src/main/java/com/plotsquared/core/util/MainUtil.java index 793643907..fb169c3e6 100644 --- a/Core/src/main/java/com/plotsquared/core/util/MainUtil.java +++ b/Core/src/main/java/com/plotsquared/core/util/MainUtil.java @@ -493,7 +493,7 @@ public class MainUtil { PlotArea area = null; String alias = null; - for (Plot plot : PlotQuery.newQuery().allPlots().asList()) { + for (Plot plot : PlotQuery.newQuery().allPlots()) { int count = 0; if (!uuids.isEmpty()) { for (UUID uuid : uuids) { diff --git a/Core/src/main/java/com/plotsquared/core/util/query/PlotQuery.java b/Core/src/main/java/com/plotsquared/core/util/query/PlotQuery.java index 03c41dd8e..bc89c6ea7 100644 --- a/Core/src/main/java/com/plotsquared/core/util/query/PlotQuery.java +++ b/Core/src/main/java/com/plotsquared/core/util/query/PlotQuery.java @@ -34,19 +34,20 @@ import com.plotsquared.core.plot.Rating; import com.plotsquared.core.plot.flag.implementations.DoneFlag; import com.plotsquared.core.plot.world.PlotAreaManager; import com.plotsquared.core.util.MathMan; -import javax.annotation.Nonnull; +import org.jetbrains.annotations.NotNull; +import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashSet; +import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; -import java.util.function.Consumer; import java.util.function.Predicate; import java.util.stream.Stream; @@ -57,7 +58,7 @@ import java.util.stream.Stream; * The queries can be reused as no results are stored * in the query itself */ -public final class PlotQuery { +public final class PlotQuery implements Iterable { private final Collection filters = new LinkedList<>(); private final PlotAreaManager plotAreaManager; @@ -381,16 +382,6 @@ public final class PlotQuery { return this.asList(); } - /** - * Perform an action on each plot returned by the query - * - * @param consumer Plot consumer - */ - public void forEach(@Nonnull final Consumer consumer) { - Preconditions.checkNotNull(consumer, "Consumer may not be null"); - this.asCollection().forEach(consumer); - } - /** * Get the amount of plots contained in the query result * @@ -429,5 +420,8 @@ public final class PlotQuery { return this; } + @NotNull @Override public Iterator iterator() { + return this.asCollection().iterator(); + } } From 5360df601235785d82636b77f072a2e66746251c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20S=C3=B6derberg?= Date: Sat, 18 Jul 2020 16:08:37 +0200 Subject: [PATCH 4/4] Add PlotRangeIterator for the many places where it'll be used. All one of them, in fact. This was not a waste of time. I am very happy I did this. This was worthwhile. Yup. --- .../entity/ReplicatingEntityWrapper.java | 6 +-- .../bukkit/entity/TeleportEntityWrapper.java | 2 +- .../com/plotsquared/core/command/Auto.java | 15 +++--- .../plotsquared/core/location/PlotLoc.java | 5 +- .../com/plotsquared/core/plot/PlotId.java | 50 +++++++++++++++++++ 5 files changed, 64 insertions(+), 14 deletions(-) diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/entity/ReplicatingEntityWrapper.java b/Bukkit/src/main/java/com/plotsquared/bukkit/entity/ReplicatingEntityWrapper.java index 8cae4cef4..74dfbdf07 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/entity/ReplicatingEntityWrapper.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/entity/ReplicatingEntityWrapper.java @@ -154,7 +154,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper { case "ITEM_FRAME": this.x = Math.floor(this.getX()); this.y = Math.floor(this.getY()); - this.z = Math.floor(this.z); + this.z = Math.floor(this.getZ()); ItemFrame itemFrame = (ItemFrame) entity; this.dataByte = getOrdinal(Rotation.values(), itemFrame.getRotation()); this.stack = itemFrame.getItem().clone(); @@ -162,7 +162,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper { case "PAINTING": this.x = Math.floor(this.getX()); this.y = Math.floor(this.getY()); - this.z = Math.floor(this.z); + this.z = Math.floor(this.getZ()); Painting painting = (Painting) entity; Art art = painting.getArt(); this.dataByte = getOrdinal(BlockFace.values(), painting.getFacing()); @@ -409,7 +409,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper { Location location = lived.getLeashHolder().getLocation(); this.lived.leashX = (short) (this.getX() - location.getBlockX()); this.lived.leashY = (short) (this.getY() - location.getBlockY()); - this.lived.leashZ = (short) (this.z - location.getBlockZ()); + this.lived.leashZ = (short) (this.getZ() - location.getBlockZ()); } EntityEquipment equipment = lived.getEquipment(); this.lived.equipped = equipment != null; diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/entity/TeleportEntityWrapper.java b/Bukkit/src/main/java/com/plotsquared/bukkit/entity/TeleportEntityWrapper.java index dfa918c0b..2393d2fa4 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/entity/TeleportEntityWrapper.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/entity/TeleportEntityWrapper.java @@ -69,7 +69,7 @@ public class TeleportEntityWrapper extends EntityWrapper { this.oldLocation = oldLocation.clone(); this.oldLocation.setX(this.getX()); this.oldLocation.setY(this.getY()); - this.oldLocation.setZ(this.z); + this.oldLocation.setZ(this.getZ()); this.gravityOld = this.getEntity().hasGravity(); this.getEntity().setGravity(false); diff --git a/Core/src/main/java/com/plotsquared/core/command/Auto.java b/Core/src/main/java/com/plotsquared/core/command/Auto.java index cfc7cd94d..fd66fa848 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Auto.java +++ b/Core/src/main/java/com/plotsquared/core/command/Auto.java @@ -298,16 +298,15 @@ public class Auto extends SubCommand { PlotId end = PlotId.of(start.getX() + size_x - 1, start.getY() + size_z - 1); if (plotarea.canClaim(player, start, end)) { plotarea.setMeta("lastPlot", start); - for (int i = start.getX(); i <= end.getX(); i++) { - for (int j = start.getY(); j <= end.getY(); j++) { - Plot plot = plotarea.getPlotAbs(PlotId.of(i, j)); - boolean teleport = i == end.getX() && j == end.getY(); - if (plot == null) { - return false; - } - plot.claim(player, teleport, null); + + for (final PlotId plotId : PlotId.PlotRangeIterator.range(start, end)) { + final Plot plot = plotarea.getPlot(plotId); + if (plot == null) { + return false; } + plot.claim(player, plotId.equals(end), null); } + ArrayList plotIds = MainUtil.getPlotSelectionIds(start, end); final PlotId pos1 = plotIds.get(0); final PlotAutoMergeEvent mergeEvent = this.eventDispatcher diff --git a/Core/src/main/java/com/plotsquared/core/location/PlotLoc.java b/Core/src/main/java/com/plotsquared/core/location/PlotLoc.java index 76135262d..4db83bace 100644 --- a/Core/src/main/java/com/plotsquared/core/location/PlotLoc.java +++ b/Core/src/main/java/com/plotsquared/core/location/PlotLoc.java @@ -92,7 +92,7 @@ public final class PlotLoc { int result = 1; result = (prime * result) + this.getX(); result = (prime * result) + this.getY(); - result = (prime * result) + this.z; + result = (prime * result) + this.getZ(); return result; } @@ -111,6 +111,7 @@ public final class PlotLoc { return false; } final PlotLoc other = (PlotLoc) obj; - return (this.getX() == other.getX()) && (this.getY() == other.getY()) && (this.z == other.z); + return (this.getX() == other.getX()) && (this.getY() == + other.getY()) && (this.getZ() == other.getZ()); } } diff --git a/Core/src/main/java/com/plotsquared/core/plot/PlotId.java b/Core/src/main/java/com/plotsquared/core/plot/PlotId.java index 64c28a2d5..27004ba3c 100644 --- a/Core/src/main/java/com/plotsquared/core/plot/PlotId.java +++ b/Core/src/main/java/com/plotsquared/core/plot/PlotId.java @@ -30,6 +30,7 @@ import org.jetbrains.annotations.NotNull; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import java.util.Iterator; /** * Plot (X,Y) tuples for plot locations @@ -242,4 +243,53 @@ public class PlotId { return this.hash; } + + public static final class PlotRangeIterator implements Iterator, Iterable { + + private final PlotId start; + private final PlotId end; + + private int x; + private int y; + + private PlotRangeIterator(@Nonnull final PlotId start, @Nonnull final PlotId end) { + this.start = start; + this.end = end; + this.x = this.start.getX(); + this.y = this.start.getY(); + } + + public static PlotRangeIterator range(@Nonnull final PlotId start, @Nonnull final PlotId end) { + return new PlotRangeIterator(start, end); + } + + @Override public boolean hasNext() { + if (this.x < this.end.getX()) { + return true; + } else if (this.x == this.end.getX()) { + return this.y < this.end.getY(); + } else { + return false; + } + } + + @Override public PlotId next() { + if (!hasNext()) { + throw new IndexOutOfBoundsException("The iterator has no more entries"); + } + if (this.y == this.end.getY()) { + this.x++; + this.y = 0; + } else { + this.y++; + } + return PlotId.of(this.start.getX() + this.x, this.start.getY() + this.y); + } + + @Nonnull @Override public Iterator iterator() { + return this; + } + + } + }