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/MainUtil.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/MainUtil.java index a4709ffb1..c94b5d2e6 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/MainUtil.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/MainUtil.java @@ -272,7 +272,7 @@ public class MainUtil { z = bot.getZ() + plotworld.DEFAULT_HOME.z; } final int y = Math.max(getHeighestBlock(plot.world, x, z), manager.getSignLoc(PlotSquared.getPlotWorld(plot.world), plot).getY()); - return new Location(plot.world, x, y, z); + return new Location(plot.world, x, y + 1, z); } final Location top = getPlotTopLoc(plot.world, plot.id); final Location bot = getPlotBottomLoc(plot.world, plot.id); @@ -280,7 +280,7 @@ public class MainUtil { final int z = bot.getZ(); PlotManager manager = PlotSquared.getPlotManager(plot.world); final int y = Math.max(getHeighestBlock(plot.world, x, z), manager.getSignLoc(PlotSquared.getPlotWorld(plot.world), plot).getY()); - return new Location(plot.world, x, y, z); + return new Location(plot.world, x, y + 1, z); } public static boolean teleportPlayer(final PlotPlayer player, final Location from, final Plot plot) { 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..baf42380a 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 worldObj = Bukkit.getWorld(world); + worldObj.regenerateChunk(loc.x, loc.z); + for (final Player player : Bukkit.getOnlinePlayers()) { + Location playerLoc = BukkitUtil.getLocation(player.getLocation()); + if (playerLoc.getX() >> 4 == loc.x && playerLoc.getZ() >> 4 == loc.z) { + final Plot plot = MainUtil.getPlot(playerLoc); + if (plot != null) { + final PlotPlayer pp = BukkitUtil.getPlayer(player); + 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)); } }