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);