From f8fcb969154604ec5ee0c3518941077c0836fc87 Mon Sep 17 00:00:00 2001 From: Byteflux Date: Tue, 9 Jun 2015 15:28:59 -0700 Subject: [PATCH] Try and teleport players above plot after clearing --- .../plot/util/ChunkManager.java | 2 ++ .../plot/util/ClusterManager.java | 5 ++-- .../plot/util/bukkit/BukkitChunkManager.java | 26 ++++++++++++++++--- .../plot/util/bukkit/BukkitUtil.java | 4 ++- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ChunkManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ChunkManager.java index e983876cb..1e0ec2ce1 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ChunkManager.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ChunkManager.java @@ -37,6 +37,8 @@ public abstract class ChunkManager { public abstract List getChunkChunks(String world); + public abstract void regenerateChunk(String world, ChunkLoc loc); + public abstract void deleteRegionFile(final String world, final ChunkLoc loc); public abstract void deleteRegionFiles(final String world, final List chunks); diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ClusterManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ClusterManager.java index 9504032ff..df0f475ef 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ClusterManager.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ClusterManager.java @@ -286,8 +286,9 @@ public class ClusterManager { @Override public void run() { if ((populator == null) || (plotworld.TYPE == 0)) { - world.regenerateChunk(chunk.getX(), chunk.getZ()); - MainUtil.update(world.getName(), new ChunkLoc(chunk.getX(), chunk.getZ())); + ChunkLoc loc = new ChunkLoc(chunk.getX(), chunk.getZ()); + ChunkManager.manager.regenerateChunk(world.getName(), loc); + MainUtil.update(world.getName(), loc); } else { populator.populate(world, rand, chunk); } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitChunkManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitChunkManager.java index 652591a85..cdc7fd918 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitChunkManager.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitChunkManager.java @@ -94,6 +94,22 @@ public class BukkitChunkManager extends ChunkManager { return chunks; } + @Override + public void regenerateChunk(String world, ChunkLoc loc) { + World bukkitWorld = Bukkit.getWorld(world); + bukkitWorld.regenerateChunk(loc.x, loc.z); + Chunk chunk = bukkitWorld.getChunkAt(loc.x, loc.z); + for (final Entity entity : chunk.getEntities()) { + if (entity instanceof Player) { + final Plot plot = MainUtil.getPlot(BukkitUtil.getLocation(entity.getLocation())); + if (plot != null) { + final PlotPlayer pp = BukkitUtil.getPlayer((Player) entity); + pp.teleport(MainUtil.getDefaultHome(plot)); + } + } + } + } + @Override public void deleteRegionFile(final String world, final ChunkLoc loc) { TaskManager.runTaskAsync(new Runnable() { @@ -360,12 +376,13 @@ public class BukkitChunkManager extends ChunkManager { if (save) { saveEntitiesOut(chunk, CURRENT_PLOT_CLEAR); } - world.regenerateChunk(x, z); + ChunkLoc loc = new ChunkLoc(chunk.getX(), chunk.getZ()); + regenerateChunk(world.getName(), loc); if (save) { restoreBlocks(world, 0, 0); restoreEntities(world, 0, 0); } - MainUtil.update(world.getName(), new ChunkLoc(chunk.getX(), chunk.getZ())); + MainUtil.update(world.getName(), loc); BukkitSetBlockManager.setBlockManager.update(Arrays.asList(new Chunk[] { chunk })); } CURRENT_PLOT_CLEAR = null; @@ -1092,12 +1109,13 @@ public class BukkitChunkManager extends ChunkManager { if (save) { saveEntitiesOut(chunk, CURRENT_PLOT_CLEAR); } - world.regenerateChunk(cx, cz); + ChunkLoc chunkLoc = new ChunkLoc(chunk.getX(), chunk.getZ()); + regenerateChunk(world.getName(), chunkLoc); if (save) { restoreBlocks(world, 0, 0); restoreEntities(world, 0, 0); } - MainUtil.update(world.getName(), new ChunkLoc(chunk.getX(), chunk.getZ())); + MainUtil.update(world.getName(), chunkLoc); BukkitSetBlockManager.setBlockManager.update(Arrays.asList(new Chunk[] { chunk })); CURRENT_PLOT_CLEAR = null; } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitUtil.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitUtil.java index 681d80387..ee0cb746a 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitUtil.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitUtil.java @@ -19,11 +19,13 @@ import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; import com.intellectualcrafters.plot.object.BukkitPlayer; +import com.intellectualcrafters.plot.object.ChunkLoc; import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.PlotBlock; import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.schematic.PlotItem; import com.intellectualcrafters.plot.util.BlockManager; +import com.intellectualcrafters.plot.util.ChunkManager; public class BukkitUtil extends BlockManager { private static HashMap worlds = new HashMap<>(); @@ -157,7 +159,7 @@ public class BukkitUtil extends BlockManager { World worldObj = getWorld(world); Chunk chunk = worldObj.getChunkAt(x, z); if (chunk.isLoaded() || chunk.load(false)) { - worldObj.regenerateChunk(x, z); + ChunkManager.manager.regenerateChunk(world, new ChunkLoc(x, z)); } }