From 79564eed081376859b5f757b34ac3cec18f362b4 Mon Sep 17 00:00:00 2001 From: boy0001 Date: Mon, 8 Jun 2015 05:37:40 +1000 Subject: [PATCH] Max plot members, keep if modified, added block data to SetBlockQueue, rgar debug commands --- PlotSquared/pom.xml | 2 +- .../intellectualcrafters/plot/BukkitMain.java | 9 ++- .../plot/PlotSquared.java | 4 +- .../plot/commands/Add.java | 9 +++ .../plot/commands/DebugExec.java | 37 +++++++++ .../plot/commands/Trust.java | 9 +++ .../intellectualcrafters/plot/config/C.java | 1 + .../plot/generator/BukkitHybridUtils.java | 25 ++++-- .../plot/listeners/PlayerEvents.java | 4 +- .../plot/object/PlotWorld.java | 5 +- .../plot/util/ExpireManager.java | 76 +++++++++---------- .../plot/util/MainUtil.java | 2 +- .../plot/util/SetBlockQueue.java | 23 ++++++ .../plot/util/bukkit/SetBlockFast.java | 6 +- .../plot/util/bukkit/SetBlockFast_1_8.java | 23 +++++- .../plot/util/bukkit/SetBlockSlow.java | 4 + 16 files changed, 178 insertions(+), 61 deletions(-) diff --git a/PlotSquared/pom.xml b/PlotSquared/pom.xml index 2accbf031..85402c343 100644 --- a/PlotSquared/pom.xml +++ b/PlotSquared/pom.xml @@ -8,7 +8,7 @@ UTF-8 PlotSquared - 2.11.13 + 2.11.14 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 5da77f917..49becc340 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/BukkitMain.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/BukkitMain.java @@ -415,10 +415,13 @@ public class BukkitMain extends JavaPlugin implements Listener, IPlotMain { @Override public EconHandler getEconomyHandler() { - BukkitEconHandler econ = new BukkitEconHandler(); - if (econ.init()) { - return econ; + try { + BukkitEconHandler econ = new BukkitEconHandler(); + if (econ.init()) { + return econ; + } } + catch (Throwable e) {}; return null; } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotSquared.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotSquared.java index be8219a80..1ea38bd17 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotSquared.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotSquared.java @@ -832,6 +832,7 @@ public class PlotSquared { options.put("clear.on.ban", false); options.put("clear.fastmode", Settings.ENABLE_CLUSTERS); options.put("clear.auto.clear-interval-seconds", Settings.CLEAR_INTERVAL); + options.put("clear.keep-if-modified", Settings.MIN_BLOCKS_CHANGED); // Schematics options.put("schematics.save_path", Settings.SCHEMATIC_SAVE_PATH); @@ -908,9 +909,10 @@ public class PlotSquared { Settings.FAST_CLEAR = config.getBoolean("clear.fastmode"); Settings.AUTO_CLEAR_DAYS = config.getInt("clear.auto.days"); Settings.AUTO_CLEAR_CHECK_DISK = config.getBoolean("clear.check-disk"); + Settings.DELETE_PLOTS_ON_BAN = config.getBoolean("clear.on.ban"); Settings.AUTO_CLEAR = config.getBoolean("clear.auto.enabled"); - Settings.CLEAR_INTERVAL = config.getInt("clear.auto.clear-interval-seconds"); + Settings.MIN_BLOCKS_CHANGED = config.getInt("clear.keep-if-modified"); // Schematics Settings.SCHEMATIC_SAVE_PATH = config.getString("schematics.save_path"); diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Add.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Add.java index 0936667f1..bf2a7572a 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Add.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Add.java @@ -22,6 +22,7 @@ package com.intellectualcrafters.plot.commands; import java.util.UUID; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.object.Location; @@ -76,6 +77,10 @@ public class Add extends SubCommand { DBFunc.removeTrusted(loc.getWorld(), plot, uuid); } if (plot.denied.contains(uuid)) { + if (plot.members.size() + plot.trusted.size() >= PlotSquared.getPlotWorld(plot.world).MAX_PLOT_MEMBERS) { + MainUtil.sendMessage(plr, C.PLOT_MAX_MEMBERS); + return false; + } plot.denied.remove(uuid); DBFunc.removeDenied(loc.getWorld(), plot, uuid); } @@ -86,6 +91,10 @@ public class Add extends SubCommand { MainUtil.sendMessage(plr, C.ALREADY_ADDED); return false; } + if (plot.members.size() + plot.trusted.size() >= PlotSquared.getPlotWorld(plot.world).MAX_PLOT_MEMBERS) { + MainUtil.sendMessage(plr, C.PLOT_MAX_MEMBERS); + return false; + } MainUtil.sendMessage(plr, C.MEMBER_ADDED); return true; } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugExec.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugExec.java index 301de2642..5c4e83b67 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugExec.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugExec.java @@ -34,11 +34,14 @@ import org.apache.commons.lang.StringUtils; import org.bukkit.Bukkit; import com.intellectualcrafters.plot.PlotSquared; +import com.intellectualcrafters.plot.generator.BukkitHybridUtils; +import com.intellectualcrafters.plot.generator.HybridUtils; import com.intellectualcrafters.plot.object.ChunkLoc; import com.intellectualcrafters.plot.object.OfflinePlotPlayer; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.util.BlockManager; +import com.intellectualcrafters.plot.util.ChunkManager; import com.intellectualcrafters.plot.util.ExpireManager; import com.intellectualcrafters.plot.util.MainUtil; import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; @@ -63,6 +66,40 @@ public class DebugExec extends SubCommand { ExpireManager.task = -1; return MainUtil.sendMessage(player, "Cancelled task."); } + case "start-rgar": { + if (args.length != 2) { + PlotSquared.log("&cInvalid syntax: /plot debugexec start-rgar "); + return false; + } + boolean result; + if (BukkitHybridUtils.regions != null) { + result = ((BukkitHybridUtils)(HybridUtils.manager)).scheduleRoadUpdate(args[1], BukkitHybridUtils.regions); + } + else { + result = HybridUtils.manager.scheduleRoadUpdate(args[1]); + } + if (!result) { + PlotSquared.log("&cCannot schedule mass schematic update! (Is one already in progress?)"); + return false; + } + return true; + } + case "stop-rgar": { + if (((BukkitHybridUtils)(HybridUtils.manager)).task == 0) { + PlotSquared.log("&cTASK NOT RUNNING!"); + return false; + } + Bukkit.getScheduler().cancelTask(((BukkitHybridUtils)(HybridUtils.manager)).task); + PlotSquared.log("&cCancelling task..."); + while (BukkitHybridUtils.chunks.size() > 0) { + ChunkLoc chunk = BukkitHybridUtils.chunks.get(0); + BukkitHybridUtils.chunks.remove(0); + ((BukkitHybridUtils)(HybridUtils.manager)).regenerateRoad(BukkitHybridUtils.world, chunk); + ChunkManager.manager.unloadChunk(BukkitHybridUtils.world, chunk); + } + PlotSquared.log("&cCancelled!"); + return true; + } case "start-expire": { if (ExpireManager.task == -1) { ExpireManager.runTask(); diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Trust.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Trust.java index 99b77da34..68e6c59c3 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Trust.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Trust.java @@ -22,6 +22,7 @@ package com.intellectualcrafters.plot.commands; import java.util.UUID; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.object.Location; @@ -76,6 +77,10 @@ public class Trust extends SubCommand { DBFunc.removeMember(loc.getWorld(), plot, uuid); } if (plot.denied.contains(uuid)) { + if (plot.members.size() + plot.trusted.size() >= PlotSquared.getPlotWorld(plot.world).MAX_PLOT_MEMBERS) { + MainUtil.sendMessage(plr, C.PLOT_MAX_MEMBERS); + return false; + } plot.denied.remove(uuid); DBFunc.removeDenied(loc.getWorld(), plot, uuid); } @@ -86,6 +91,10 @@ public class Trust extends SubCommand { MainUtil.sendMessage(plr, C.ALREADY_ADDED); return false; } + if (plot.members.size() + plot.trusted.size() >= PlotSquared.getPlotWorld(plot.world).MAX_PLOT_MEMBERS) { + MainUtil.sendMessage(plr, C.PLOT_MAX_MEMBERS); + return false; + } MainUtil.sendMessage(plr, C.TRUSTED_ADDED); return true; } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/C.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/C.java index 797f3d723..dd186da17 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/C.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/C.java @@ -450,6 +450,7 @@ public enum C { MEMBER_ADDED("$4That user can now build while the plot owner is online", "Member"), MEMBER_REMOVED("$1You successfully removed a user from the plot", "Member"), MEMBER_WAS_NOT_ADDED("$2That player was not added as a user on this plot", "Member"), + PLOT_MAX_MEMBERS("$2You are not allowed to add any more players to this plot", "Member"), /* * Set Owner */ 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 ef3ec1090..5be013de2 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/BukkitHybridUtils.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/BukkitHybridUtils.java @@ -167,7 +167,7 @@ public class BukkitHybridUtils extends HybridUtils { } private static boolean UPDATE = false; - private int task; + public int task; private long last; @Override @@ -180,12 +180,23 @@ public class BukkitHybridUtils extends HybridUtils { return scheduleRoadUpdate(world, regions); } - public boolean scheduleRoadUpdate(final String world, final List regions) { - final List chunks = new ArrayList(); + public static List regions; + public static List chunks = new ArrayList<>(); + public static String world; + + public boolean scheduleRoadUpdate(final String world, final List rgs) { + BukkitHybridUtils.regions = rgs; + BukkitHybridUtils.world = world; + chunks = new ArrayList(); final Plugin plugin = BukkitMain.THIS; + final MutableInt count = new MutableInt(0); this.task = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { @Override public void run() { + count.increment(); + if (count.intValue() % 20 == 0) { + PlotSquared.log("PROGRESS: " + ((100 * (2048 - chunks.size())) / 1024) + "%"); + } if (regions.size() == 0 && chunks.size() == 0) { BukkitHybridUtils.UPDATE = false; PlotSquared.log(C.PREFIX.s() + "Finished road conversion"); @@ -205,7 +216,7 @@ public class BukkitHybridUtils extends HybridUtils { } if (chunks.size() > 0) { long diff = System.currentTimeMillis() + 25; - if (System.currentTimeMillis() - last > 1000 && last != 0) { + if (System.currentTimeMillis() - last > 1200 && last != 0) { last = 0; PlotSquared.log(C.PREFIX.s() + "Detected low TPS. Rescheduling in 30s"); while (chunks.size() > 0) { @@ -220,10 +231,10 @@ public class BukkitHybridUtils extends HybridUtils { public void run() { scheduleRoadUpdate(world, regions); } - }, 600); + }, 2400); return; } - if (System.currentTimeMillis() - last < 50) { + if (System.currentTimeMillis() - last < 1000) { while (System.currentTimeMillis() < diff && chunks.size() > 0) { ChunkLoc chunk = chunks.get(0); chunks.remove(0); @@ -249,7 +260,7 @@ public class BukkitHybridUtils extends HybridUtils { } } } - }, 1, 1); + }, 20, 20); return true; } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlayerEvents.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlayerEvents.java index d9476e180..7239ac8b8 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlayerEvents.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlayerEvents.java @@ -1459,10 +1459,10 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi e.setCancelled(true); return; } - } else if (aPlr && FlagManager.isBooleanFlag(plot, "pvp", false)) { + } else if (aPlr && FlagManager.isPlotFlagTrue(plot, "pvp")) { return; } - if (!aPlr && FlagManager.isBooleanFlag(plot, "pve", false)) { + if (!aPlr && FlagManager.isPlotFlagTrue(plot, "pve")) { return; } assert plot != null; diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotWorld.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotWorld.java index c8defbc13..5aeb9d487 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotWorld.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotWorld.java @@ -59,6 +59,7 @@ public abstract class PlotWorld { public final static boolean SPAWN_CUSTOM_DEFAULT = true; public final static boolean SPAWN_BREEDING_DEFAULT = false; public final static boolean WORLD_BORDER_DEFAULT = false; + public final static int MAX_PLOT_MEMBERS_DEFAULT = 128; // are plot clusters enabled // require claim in cluster // TODO make this configurable @@ -68,6 +69,7 @@ public abstract class PlotWorld { BLOCKS = new int[] { 1, 2, 3, 4, 5, 7, 14, 15, 16, 17, 19, 21, 22, 23, 24, 25, 35, 41, 42, 43, 45, 47, 48, 49, 52, 56, 57, 58, 61, 62, 73, 74, 80, 82, 84, 86, 87, 88, 91, 97, 98, 99, 100, 103, 110, 112, 120, 121, 123, 124, 125, 129, 133, 153, 155, 159, 162, 165, 166, 168, 170, 172, 173, 174, 179, 181 }; } public final String worldname; + public int MAX_PLOT_MEMBERS; public boolean AUTO_MERGE; public boolean ALLOW_SIGNS; public boolean MOB_SPAWNING; @@ -134,6 +136,7 @@ public abstract class PlotWorld { } this.MOB_SPAWNING = config.getBoolean("natural_mob_spawning"); this.AUTO_MERGE = config.getBoolean("plot.auto_merge"); + this.MAX_PLOT_MEMBERS = config.getInt("limits.max-members"); this.ALLOW_SIGNS = config.getBoolean("plot.create_signs"); this.PLOT_BIOME = (String) Configuration.BIOME.parseString(config.getString("plot.biome")); this.SCHEMATIC_ON_CLAIM = config.getBoolean("schematic.on_claim"); @@ -223,7 +226,7 @@ public abstract class PlotWorld { options.put("event.spawn.custom", PlotWorld.SPAWN_CUSTOM_DEFAULT); options.put("event.spawn.breeding", PlotWorld.SPAWN_BREEDING_DEFAULT); options.put("world.border", PlotWorld.WORLD_BORDER_DEFAULT); - + options.put("limits.max-members", PlotWorld.MAX_PLOT_MEMBERS_DEFAULT); options.put("home.default", "side"); options.put("home.allow-nonmembers", false); diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ExpireManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ExpireManager.java index ca3660935..813cf199e 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ExpireManager.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ExpireManager.java @@ -18,12 +18,16 @@ import com.intellectualcrafters.plot.config.Settings; import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.flag.Flag; import com.intellectualcrafters.plot.flag.FlagManager; +import com.intellectualcrafters.plot.generator.ClassicPlotManager; +import com.intellectualcrafters.plot.generator.HybridPlotManager; +import com.intellectualcrafters.plot.generator.HybridUtils; import com.intellectualcrafters.plot.object.OfflinePlotPlayer; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotHandler; import com.intellectualcrafters.plot.object.PlotManager; import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotWorld; +import com.intellectualcrafters.plot.object.RunnableVal; import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; public class ExpireManager { @@ -47,35 +51,6 @@ public class ExpireManager { final long now = System.currentTimeMillis(); if (now > getTimeStamp(world)) { timestamp.put(world, now + 86400000l); - - -// TaskManager.index.increment(); -// final ArrayList plots = new ArrayList<>(PlotSquared.getPlots(world).values()); -// int value = TaskManager.index.intValue(); -// int id = TaskManager.runTaskRepeat(new Runnable() { -// @Override -// public void run() { -// long start = System.currentTimeMillis(); -// while (System.currentTimeMillis() - start < 15) { -// Plot plot = plots.remove(0); -// final Flag keepFlag = FlagManager.getPlotFlag(plot, "keep"); -// if (keepFlag != null && (Boolean) keepFlag.getValue()) { -// continue; -// } -// -// -// final HashMap toRemove = new HashMap<>(); -// final HashMap remove = new HashMap<>(); -// final Set keep = new HashSet<>(); -// Iterator iter = plots.iterator(); -// } -// } -// }, 1); -// -// TaskManager.tasks.put(value, id); - - - TaskManager.runTaskAsync(new Runnable() { @Override public void run() { @@ -147,18 +122,39 @@ public class ExpireManager { MainUtil.unlinkPlot(plot); } final PlotWorld plotworld = PlotSquared.getPlotWorld(world); - manager.clearPlot(plotworld, plot, false, null); - MainUtil.removeSign(plot); - DBFunc.delete(world, plot); - PlotSquared.removePlot(world, plot.id, false); - expiredPlots.get(world).remove(plot); - PlotSquared.log("&cDeleted expired plot: " + plot.id); - PlotSquared.log("&3 - World: " + plot.world); - if (plot.hasOwner()) { - PlotSquared.log("&3 - Owner: " + UUIDHandler.getName(plot.owner)); - } else { - PlotSquared.log("&3 - Owner: Unowned"); + RunnableVal run = new RunnableVal() { + @Override + public void run() { + int changed = (int) this.value; + if (changed >= Settings.MIN_BLOCKS_CHANGED) { + PlotSquared.log("&aKeep flag added to: " + plot.id + (changed != -1 ? " (changed " + value + ")" : "")); + FlagManager.addPlotFlag(plot, new Flag(FlagManager.getFlag("keep"), true)); + expiredPlots.get(world).remove(plot); + return; + } + manager.clearPlot(plotworld, plot, false, null); + MainUtil.removeSign(plot); + DBFunc.delete(world, plot); + PlotSquared.removePlot(world, plot.id, false); + expiredPlots.get(world).remove(plot); + PlotSquared.log("&cDeleted expired plot: " + plot.id + (changed != -1 ? " (changed " + value + ")" : "")); + PlotSquared.log("&3 - World: " + plot.world); + if (plot.hasOwner()) { + PlotSquared.log("&3 - Owner: " + UUIDHandler.getName(plot.owner)); + } else { + PlotSquared.log("&3 - Owner: Unowned"); + } + } + }; + if (Settings.MIN_BLOCKS_CHANGED > 0 && manager instanceof ClassicPlotManager) { + HybridUtils.manager.checkModified(plot, run); } + else { + run.value = -1; + run.run(); + } + + return; } } 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 80d99afd7..037e1fd48 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/MainUtil.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/MainUtil.java @@ -773,7 +773,7 @@ public class MainUtil { final Runnable run = new Runnable() { @Override public void run() { - MainUtil.setBiome(world, plot, "FOREST"); +// MainUtil.setBiome(world, plot, "FOREST"); runners.remove(plot); TaskManager.runTask(whenDone); } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/SetBlockQueue.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/SetBlockQueue.java index 12ecc6677..2f303f0e7 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/SetBlockQueue.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/SetBlockQueue.java @@ -159,6 +159,29 @@ public class SetBlockQueue { private static int lastInt = 0; private static PlotBlock lastBlock = new PlotBlock((short) 0, (byte) 0); + public static void setData(final String world, int x, final int y, int z, final byte data) { + locked = true; + if (!running) { + init(); + } + int X = x >> 4; + int Z = z >> 4; + x -= X << 4; + z -= Z << 4; + ChunkWrapper wrap = new ChunkWrapper(world, X, Z); + PlotBlock[][] result; + result = blocks.get(wrap); + if (!blocks.containsKey(wrap)) { + result = new PlotBlock[16][]; + blocks.put(wrap, result); + } + if (result[y >> 4] == null) { + result[y >> 4] = new PlotBlock[4096]; + } + result[y >> 4][((y & 0xF) << 8) | (z << 4) | x] = new PlotBlock((short) -1, data); + locked = false; + } + public static void setBlock(final String world, int x, final int y, int z, final int id) { locked = true; if (!running) { 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 e79f658e1..b8100ab22 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 @@ -26,6 +26,7 @@ import java.util.Collection; import java.util.HashMap; import org.bukkit.Chunk; +import org.bukkit.block.Block; import com.intellectualcrafters.plot.object.ChunkLoc; import com.intellectualcrafters.plot.util.MainUtil; @@ -86,7 +87,10 @@ 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) { - + if (blockId == -1) { + world.getBlockAt(x, y, z).setData(data, false); + return; + } int X = x >> 4; int Z = z >> 4; ChunkLoc loc = new ChunkLoc(X, Z); 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 a40b153fa..9c0c90744 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 @@ -22,8 +22,11 @@ package com.intellectualcrafters.plot.util.bukkit; import static com.intellectualcrafters.plot.util.ReflectionUtils.getRefClass; +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.Iterator; +import java.util.Map.Entry; import org.bukkit.Chunk; import org.bukkit.World; @@ -71,9 +74,18 @@ public class SetBlockFast_1_8 extends BukkitSetBlockManager { @Override public void run() { - // TODO Auto-generated method stub - update(toUpdate.values()); - toUpdate = new HashMap<>(); + int count = 0; + ArrayList chunks = new ArrayList(); + Iterator> i = toUpdate.entrySet().iterator(); + while (i.hasNext() && count < 1024) { + chunks.add(i.next().getValue()); + i.remove(); + count++; + } + if (count == 0) { + return; + } + update(chunks); } }, 20); } @@ -93,7 +105,10 @@ public class SetBlockFast_1_8 extends BukkitSetBlockManager { @SuppressWarnings("deprecation") @Override public void set(final World world, final int x, final int y, final int z, final int id, final byte data) { - + if (id == -1) { + world.getBlockAt(x, y, z).setData(data, false); + return; + } // Start blockstate workaround // switch (id) { case 54: 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 720ae38c1..fdf7d6572 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 @@ -12,6 +12,10 @@ 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) { final Block block = world.getBlockAt(x, y, z); + if (id == -1) { + block.setData(data, false); + return; + } if (block.getData() == data) { if (block.getTypeId() != id) { block.setTypeId(id, false);