diff --git a/PlotSquared/pom.xml b/PlotSquared/pom.xml index 1a9532c40..44fae6f26 100644 --- a/PlotSquared/pom.xml +++ b/PlotSquared/pom.xml @@ -8,7 +8,7 @@ UTF-8 PlotSquared - 2.9.1 + 2.9.2 PlotSquared jar diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/BukkitMain.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/BukkitMain.java index b145d76ab..2e2654d73 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/BukkitMain.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/BukkitMain.java @@ -289,12 +289,7 @@ public class BukkitMain extends JavaPlugin implements Listener, IPlotMain { BlockUpdateUtil.setBlockManager = BukkitSetBlockManager.setBlockManager; try { new SendChunk(); - if (checkVersion(1, 7, 10) && !checkVersion(1, 7, 11)) { - MainUtil.canSendChunk = false; - } - else { - MainUtil.canSendChunk = true; - } + MainUtil.canSendChunk = true; } catch (final Throwable e) { MainUtil.canSendChunk = false; } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/AugmentedPopulator.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/AugmentedPopulator.java index 9991b745f..fe284fdcb 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/AugmentedPopulator.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/AugmentedPopulator.java @@ -11,6 +11,7 @@ import org.bukkit.generator.BlockPopulator; import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.object.BlockWrapper; +import com.intellectualcrafters.plot.object.ChunkLoc; import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.PlotCluster; import com.intellectualcrafters.plot.object.PlotGenerator; @@ -19,6 +20,7 @@ import com.intellectualcrafters.plot.object.PlotManager; import com.intellectualcrafters.plot.object.PlotWorld; import com.intellectualcrafters.plot.object.RegionWrapper; import com.intellectualcrafters.plot.util.ChunkManager; +import com.intellectualcrafters.plot.util.MainUtil; import com.intellectualcrafters.plot.util.TaskManager; import com.intellectualcrafters.plot.util.bukkit.BukkitChunkManager; import com.intellectualcrafters.plot.util.bukkit.BukkitSetBlockManager; @@ -128,7 +130,7 @@ public class AugmentedPopulator extends BlockPopulator { @Override public void run() { populateBiome(world, x, z); - chunk.unload(true, true); + MainUtil.update(world.getName(), new ChunkLoc(chunk.getX(), chunk.getZ())); } }, 20); } else { @@ -143,7 +145,7 @@ public class AugmentedPopulator extends BlockPopulator { public void run() { chunk.load(true); populateBlocks(world, rand, X, Z, x, z, check); - chunk.unload(true, true); + MainUtil.update(world.getName(), new ChunkLoc(chunk.getX(), chunk.getZ())); } }, 40 + rand.nextInt(40)); } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/BukkitHybridUtils.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/BukkitHybridUtils.java index 8595105e9..fa40e9da6 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/BukkitHybridUtils.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/BukkitHybridUtils.java @@ -151,7 +151,7 @@ public class BukkitHybridUtils extends HybridUtils { final Chunk chunk = world.getChunkAt(x, z); chunks2.add(chunk); regenerateRoad(worldname, new ChunkLoc(x, z)); - ChunkManager.manager.unloadChunk(worldname, new ChunkLoc(x, z)); + MainUtil.update(world.getName(), new ChunkLoc(chunk.getX(), chunk.getZ())); } } } 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 916d660f8..519d01fa6 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ClusterManager.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ClusterManager.java @@ -14,6 +14,7 @@ import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.generator.AugmentedPopulator; import com.intellectualcrafters.plot.object.BlockLoc; +import com.intellectualcrafters.plot.object.ChunkLoc; import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotCluster; @@ -276,7 +277,7 @@ public class ClusterManager { public void run() { if ((populator == null) || (plotworld.TYPE == 0)) { world.regenerateChunk(chunk.getX(), chunk.getZ()); - chunk.unload(true, true); + MainUtil.update(world.getName(), new ChunkLoc(chunk.getX(), chunk.getZ())); } 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 28848045d..0981e0b10 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/MainUtil.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/MainUtil.java @@ -21,6 +21,7 @@ package com.intellectualcrafters.plot.util; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.UUID; @@ -29,6 +30,7 @@ import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.Settings; import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.object.BlockLoc; +import com.intellectualcrafters.plot.object.ChunkLoc; import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotBlock; @@ -170,6 +172,10 @@ public class MainUtil { } } + public static void update(String world, ChunkLoc loc) { + BlockUpdateUtil.setBlockManager.update(world, Arrays.asList(loc)); + } + // public static void update(final Location loc) { // final String world = loc.getWorld(); // int ox = loc.getX() >> 4; @@ -862,14 +868,12 @@ public class MainUtil { final com.intellectualcrafters.plot.object.Location bot2 = MainUtil.getPlotBottomLoc(plot2.world, plot2.id); final Location top = MainUtil.getPlotTopLoc(plot1.world, plot1.id); if (plot1.owner == null) { - TaskManager.runTaskLater(whenDone, 1); return false; } final Plot pos1 = getBottomPlot(plot1); final Plot pos2 = getTopPlot(plot1); final PlotId size = MainUtil.getSize(plot1.world, plot1); if (!MainUtil.isUnowned(plot2.world, plot2.id, new PlotId((plot2.id.x + size.x) - 1, (plot2.id.y + size.y) - 1))) { - TaskManager.runTaskLater(whenDone, 1); return false; } final int offset_x = plot2.id.x - pos1.id.x; 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 de33208f7..4235c01e1 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 @@ -234,9 +234,6 @@ public class BukkitChunkManager extends ChunkManager { restoreBlocks(newWorld, relX, relZ); restoreEntities(newWorld, relX, relZ); BukkitSetBlockManager.setBlockManager.update(chunks); - for (final Chunk chunk : chunks) { - chunk.unload(true, true); - } TaskManager.runTask(whenDone); Bukkit.getScheduler().cancelTask(TaskManager.tasks.get(currentIndex)); TaskManager.tasks.remove(currentIndex); @@ -344,7 +341,7 @@ public class BukkitChunkManager extends ChunkManager { restoreBlocks(world, 0, 0); restoreEntities(world, 0, 0); } - chunk.unload(true, true); + MainUtil.update(world.getName(), new ChunkLoc(chunk.getX(), chunk.getZ())); BukkitSetBlockManager.setBlockManager.update(Arrays.asList(new Chunk[] { chunk })); } CURRENT_PLOT_CLEAR = null; diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitSetupUtils.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitSetupUtils.java index 96aeb94f3..3ec8fe1e9 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitSetupUtils.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitSetupUtils.java @@ -32,9 +32,9 @@ public class BukkitSetupUtils extends SetupUtils { final String name = plugin.getDescription().getName(); if (generator instanceof PlotGenerator) { final PlotGenerator pgen = (PlotGenerator) generator; - if (pgen.getPlotManager() instanceof SquarePlotManager) { +// if (pgen.getPlotManager() instanceof SquarePlotManager) { SetupUtils.generators.put(name, pgen); - } +// } } } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SendChunk.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SendChunk.java index 75ec4bc8b..9c4bb056f 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SendChunk.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SendChunk.java @@ -10,6 +10,7 @@ import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.World; +import com.intellectualcrafters.plot.BukkitMain; import com.intellectualcrafters.plot.object.ChunkLoc; import com.intellectualcrafters.plot.util.ReflectionUtils.RefClass; import com.intellectualcrafters.plot.util.ReflectionUtils.RefConstructor; @@ -22,6 +23,8 @@ import com.intellectualcrafters.plot.util.ReflectionUtils.RefMethod; * @author Empire92 */ public class SendChunk { + + private static boolean v1_7_10 = BukkitMain.checkVersion(1, 7, 10) && !BukkitMain.checkVersion(1, 8, 0); // Ref Class private static final RefClass classWorld = getRefClass("{nms}.World"); private static final RefClass classEntityPlayer = getRefClass("{nms}.EntityPlayer"); @@ -58,6 +61,7 @@ public class SendChunk { int diffx, diffz; final int view = Bukkit.getServer().getViewDistance() << 4; for (final Chunk chunk : chunks) { + boolean unload = true; final Object c = methodGetHandle.of(chunk).call(); final Object w = world.of(c).get(); final Object p = players.of(w).get(); @@ -67,11 +71,22 @@ public class SendChunk { diffx = Math.abs(x - (chunk.getX() << 4)); diffz = Math.abs(z - (chunk.getZ() << 4)); if ((diffx <= view) && (diffz <= view)) { - final Object pair = ChunkCoordIntPairCon.create(chunk.getX(), chunk.getZ()); - final Object pq = chunkCoordIntPairQueue.of(ep).get(); - ((List) pq).add(pair); + unload = false; + if (v1_7_10) { + chunk.getWorld().refreshChunk(chunk.getX(), chunk.getZ()); + chunk.load(true); + } + else { + final Object pair = ChunkCoordIntPairCon.create(chunk.getX(), chunk.getZ()); + final Object pq = chunkCoordIntPairQueue.of(ep).get(); + ((List) pq).add(pair); + } } } + if (unload) { + chunk.unload(true, true); + System.out.print("UNLOADING CHUNK"); + } } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SetBlockFast.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SetBlockFast.java index e4570822b..e79f658e1 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SetBlockFast.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SetBlockFast.java @@ -71,6 +71,8 @@ public class SetBlockFast extends BukkitSetBlockManager { }, 20); } + private ChunkLoc lastLoc = null; + /** * Set the block at the location * @@ -84,6 +86,19 @@ public class SetBlockFast extends BukkitSetBlockManager { */ @Override public void set(final org.bukkit.World world, final int x, final int y, final int z, final int blockId, final byte data) { + + int X = x >> 4; + int Z = z >> 4; + ChunkLoc loc = new ChunkLoc(X, Z); + if (!loc.equals(lastLoc)) { + Chunk chunk = toUpdate.get(loc); + if (chunk == null) { + chunk = world.getChunkAt(X, Z); + toUpdate.put(loc, chunk); + } + chunk.load(false); + } + final Object w = methodGetHandle.of(world).call(); final Object chunk = methodGetChunkAt.of(w).call(x >> 4, z >> 4); final Object block = methodGetById.of(null).call(blockId); @@ -101,9 +116,9 @@ public class SetBlockFast extends BukkitSetBlockManager { return; } if (!MainUtil.canSendChunk) { - for (final Chunk chunk : chunks) { - chunk.unload(); - chunk.load(false); + for (Chunk chunk : chunks) { + chunk.getWorld().refreshChunk(chunk.getX(), chunk.getZ()); + chunk.load(true); } return; } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SetBlockFast_1_8.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SetBlockFast_1_8.java index 8c0ab884c..a40b153fa 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SetBlockFast_1_8.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SetBlockFast_1_8.java @@ -317,9 +317,9 @@ public class SetBlockFast_1_8 extends BukkitSetBlockManager { return; } if (!MainUtil.canSendChunk) { - for (final Chunk chunk : chunks) { - chunk.unload(); - chunk.load(false); + for (Chunk chunk : chunks) { + chunk.getWorld().refreshChunk(chunk.getX(), chunk.getZ()); + chunk.load(true); } return; } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SetBlockSlow.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SetBlockSlow.java index 8420a3ad2..720ae38c1 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SetBlockSlow.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SetBlockSlow.java @@ -6,6 +6,8 @@ import org.bukkit.Chunk; import org.bukkit.World; import org.bukkit.block.Block; +import com.intellectualcrafters.plot.util.MainUtil; + public class SetBlockSlow extends BukkitSetBlockManager { @Override public void set(final World world, final int x, final int y, final int z, final int id, final byte data) { @@ -25,6 +27,18 @@ public class SetBlockSlow extends BukkitSetBlockManager { @Override public void update(final Collection chunks) { - // TODO Auto-generated method stub + if (MainUtil.canSendChunk) { + try { + SendChunk.sendChunk(chunks); + } catch (final Throwable e) { + MainUtil.canSendChunk = false; + } + } + else { + for (Chunk chunk : chunks) { + chunk.unload(); + chunk.load(true); + } + } } }