diff --git a/pom.xml b/pom.xml
index d01dd050..d13d83c9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -210,6 +210,11 @@
towny
0.84.0.9
+
+ com.intellectualcrafters.plot
+ plotsquared
+ 3.2.24
+
com.worldcretornica
plotme_core
diff --git a/src/main/java/com/boydti/fawe/Fawe.java b/src/main/java/com/boydti/fawe/Fawe.java
index c81969f9..9d66523c 100644
--- a/src/main/java/com/boydti/fawe/Fawe.java
+++ b/src/main/java/com/boydti/fawe/Fawe.java
@@ -20,7 +20,7 @@ import com.boydti.fawe.config.BBC;
import com.boydti.fawe.config.Settings;
import com.boydti.fawe.util.Lag;
import com.boydti.fawe.util.MemUtil;
-import com.boydti.fawe.util.SetBlockQueue;
+import com.boydti.fawe.util.SetQueue;
import com.boydti.fawe.util.TaskManager;
import com.boydti.fawe.util.WEManager;
import com.boydti.fawe.util.WESubscriber;
@@ -107,7 +107,7 @@ public class Fawe {
// TODO command event - queue?
TaskManager.IMP = IMP.getTaskManager();
- SetBlockQueue.IMP.queue = IMP.getQueue();
+ SetQueue.IMP.queue = IMP.getQueue();
// Delayed setup
TaskManager.IMP.later(new Runnable() {
diff --git a/src/main/java/com/boydti/fawe/FaweAPI.java b/src/main/java/com/boydti/fawe/FaweAPI.java
index 45e01542..15b72abb 100644
--- a/src/main/java/com/boydti/fawe/FaweAPI.java
+++ b/src/main/java/com/boydti/fawe/FaweAPI.java
@@ -17,7 +17,7 @@ import org.bukkit.Material;
import com.boydti.fawe.object.ChunkLoc;
import com.boydti.fawe.object.FaweChunk;
import com.boydti.fawe.object.FaweLocation;
-import com.boydti.fawe.util.SetBlockQueue;
+import com.boydti.fawe.util.SetQueue;
import com.boydti.fawe.util.TaskManager;
import com.sk89q.jnbt.ByteArrayTag;
import com.sk89q.jnbt.IntTag;
@@ -40,7 +40,7 @@ public class FaweAPI {
* @param m
*/
public static void setBlockAsync(final Location loc, final Material m) {
- SetBlockQueue.IMP.setBlock(loc.getWorld().getName(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), (short) m.getId());
+ SetQueue.IMP.setBlock(loc.getWorld().getName(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), (short) m.getId());
}
/**
@@ -53,7 +53,7 @@ public class FaweAPI {
* @param data
*/
public static void setBlockAsync(final String world, final int x, final int y, final int z, final short id, final byte data) {
- SetBlockQueue.IMP.setBlock(world, x, y, z, id, data);
+ SetQueue.IMP.setBlock(world, x, y, z, id, data);
}
/**
@@ -65,7 +65,7 @@ public class FaweAPI {
* @param data
*/
public static void setBiomeAsync(final String world, final int x, final int z, BaseBiome biome) {
- SetBlockQueue.IMP.setBiome(world, x, z, biome);
+ SetQueue.IMP.setBiome(world, x, z, biome);
}
/**
@@ -74,7 +74,7 @@ public class FaweAPI {
* @param biome
*/
public static void setBiomeAsync(Location loc, BaseBiome biome) {
- SetBlockQueue.IMP.setBiome(loc.getWorld().getName(), loc.getBlockX(), loc.getBlockZ(), biome);
+ SetQueue.IMP.setBiome(loc.getWorld().getName(), loc.getBlockX(), loc.getBlockZ(), biome);
}
/**
@@ -86,7 +86,7 @@ public class FaweAPI {
* @return
*/
public static FaweChunk> createChunk() {
- return SetBlockQueue.IMP.queue.getChunk(new ChunkLoc(null, 0, 0));
+ return SetQueue.IMP.queue.getChunk(new ChunkLoc(null, 0, 0));
}
/**
@@ -116,7 +116,7 @@ public class FaweAPI {
* @param loc
*/
public static void fixLighting(ChunkLoc loc, boolean fixAll) {
- SetBlockQueue.IMP.queue.fixLighting(SetBlockQueue.IMP.queue.getChunk(loc), fixAll);
+ SetQueue.IMP.queue.fixLighting(SetQueue.IMP.queue.getChunk(loc), fixAll);
}
/**
@@ -126,7 +126,7 @@ public class FaweAPI {
*/
public static void fixLighting(Chunk chunk, boolean fixAll) {
ChunkLoc loc = new ChunkLoc(chunk.getWorld().getName(), chunk.getX(), chunk.getZ());
- SetBlockQueue.IMP.queue.fixLighting(SetBlockQueue.IMP.queue.getChunk(loc), fixAll);
+ SetQueue.IMP.queue.fixLighting(SetQueue.IMP.queue.getChunk(loc), fixAll);
}
/**
@@ -322,6 +322,6 @@ public class FaweAPI {
* @param whenDone
*/
public static void addTask(final Runnable whenDone) {
- SetBlockQueue.IMP.addTask(whenDone);
+ SetQueue.IMP.addTask(whenDone);
}
}
diff --git a/src/main/java/com/boydti/fawe/bukkit/regions/FactionsFeature.java b/src/main/java/com/boydti/fawe/bukkit/regions/FactionsFeature.java
index 9f302bae..fb64239f 100644
--- a/src/main/java/com/boydti/fawe/bukkit/regions/FactionsFeature.java
+++ b/src/main/java/com/boydti/fawe/bukkit/regions/FactionsFeature.java
@@ -10,7 +10,7 @@ import com.boydti.fawe.bukkit.FaweBukkit;
import com.boydti.fawe.object.FawePlayer;
import com.massivecraft.factions.entity.BoardColl;
import com.massivecraft.factions.entity.Faction;
-import com.massivecraft.mcore.ps.PS;
+import com.massivecraft.massivecore.ps.PS;
public class FactionsFeature extends BukkitMaskManager implements Listener {
FaweBukkit plugin;
@@ -27,7 +27,8 @@ public class FactionsFeature extends BukkitMaskManager implements Listener {
public FaweMask getMask(final FawePlayer fp) {
final Player player = fp.parent;
final Location loc = player.getLocation();
- final Faction fac = BoardColl.get().getFactionAt(PS.valueOf(loc));
+ PS ps = PS.valueOf(loc);
+ final Faction fac = BoardColl.get().getFactionAt(ps);
if (fac != null) {
if (fac.getOnlinePlayers().contains(player)) {
if (fac.getComparisonName().equals("wilderness") == false) {
diff --git a/src/main/java/com/boydti/fawe/bukkit/v0/BukkitQueue_0.java b/src/main/java/com/boydti/fawe/bukkit/v0/BukkitQueue_0.java
index 46651bf3..2fd7bdf2 100644
--- a/src/main/java/com/boydti/fawe/bukkit/v0/BukkitQueue_0.java
+++ b/src/main/java/com/boydti/fawe/bukkit/v0/BukkitQueue_0.java
@@ -1,8 +1,10 @@
package com.boydti.fawe.bukkit.v0;
import java.util.ArrayDeque;
+import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
@@ -10,10 +12,15 @@ import java.util.concurrent.ConcurrentHashMap;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.Location;
+import org.bukkit.World;
import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.world.ChunkLoadEvent;
+import org.bukkit.event.world.ChunkUnloadEvent;
+import org.bukkit.event.world.WorldLoadEvent;
+import org.bukkit.event.world.WorldUnloadEvent;
import org.bukkit.plugin.Plugin;
import com.boydti.fawe.Fawe;
@@ -21,7 +28,7 @@ import com.boydti.fawe.config.Settings;
import com.boydti.fawe.object.ChunkLoc;
import com.boydti.fawe.object.FaweChunk;
import com.boydti.fawe.util.FaweQueue;
-import com.boydti.fawe.util.SetBlockQueue;
+import com.boydti.fawe.util.SetQueue;
import com.boydti.fawe.util.TaskManager;
import com.sk89q.worldedit.world.biome.BaseBiome;
@@ -29,6 +36,8 @@ public abstract class BukkitQueue_0 extends FaweQueue implements Listener {
private final HashMap> toLight = new HashMap<>();
+ private final HashMap> loaded = new HashMap<>();
+
public BukkitQueue_0() {
TaskManager.IMP.task(new Runnable() {
@Override
@@ -36,36 +45,102 @@ public abstract class BukkitQueue_0 extends FaweQueue implements Listener {
Bukkit.getPluginManager().registerEvents(BukkitQueue_0.this, (Plugin) Fawe.imp());
}
});
+ for (World world : Bukkit.getWorlds()) {
+ for (Chunk chunk : world.getLoadedChunks()) {
+ addLoaded(chunk);
+ }
+ }
}
- @EventHandler
+ @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
+ public void onWorldLoad(WorldLoadEvent event) {
+ World world = event.getWorld();
+ for (Chunk chunk : world.getLoadedChunks()) {
+ addLoaded(chunk);
+ }
+ }
+
+ @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
+ public void onWorldUnload(WorldUnloadEvent event) {
+ loaded.remove(event.getWorld().getName());
+ }
+
+ public void addLoaded(Chunk chunk) {
+ String world = chunk.getWorld().getName();
+ long x = chunk.getX();
+ long z = chunk.getZ();
+ long id = x << 32 | z & 0xFFFFFFFFL;
+ HashSet map = loaded.get(world);
+ if (map != null) {
+ map.add(id);
+ } else {
+ map = new HashSet<>(Arrays.asList(id));
+ loaded.put(world, map);
+ }
+ }
+
+ public void removeLoaded(Chunk chunk) {
+ String world = chunk.getWorld().getName();
+ long x = chunk.getX();
+ long z = chunk.getZ();
+ long id = x << 32 | z & 0xFFFFFFFFL;
+ HashSet map = loaded.get(world);
+ if (map != null) {
+ map.remove(id);
+ }
+ }
+
+ @Override
+ public boolean isChunkLoaded(String world, int x, int z) {
+ long id = (long) x << 32 | z & 0xFFFFFFFFL;
+ HashSet map = loaded.get(world);
+ if (map != null) {
+ return map.contains(id);
+ }
+ return false;
+
+ };
+
+ @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
public void onMove(PlayerMoveEvent event) {
Location loc = event.getTo();
if (!loc.getChunk().equals(event.getFrom().getChunk())) {
Chunk chunk = loc.getChunk();
ChunkLoc cl = new ChunkLoc(chunk.getWorld().getName(), chunk.getX(), chunk.getZ());
+ FaweChunk fc = toLight.remove(cl);
+ if (fc != null) {
+ if (fixLighting(fc, Settings.FIX_ALL_LIGHTING)) {
+ return;
+ }
+ }
}
}
- @EventHandler
+ @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
public void onChunkLoad(ChunkLoadEvent event) {
+ Chunk chunk = event.getChunk();
+ addLoaded(chunk);
if (toLight.size() == 0) {
return;
}
- Chunk chunk = event.getChunk();
ChunkLoc loc = new ChunkLoc(chunk.getWorld().getName(), chunk.getX(), chunk.getZ());
for (int x = -1; x <= 1; x++) {
for (int z = -1; z <= 1; z++) {
ChunkLoc a = new ChunkLoc(loc.world, loc.x + x, loc.z + z);
- if (toLight.containsKey(a)) {
- if (fixLighting(toLight.get(a), Settings.FIX_ALL_LIGHTING)) {
- toLight.remove(a);
+ FaweChunk fc = toLight.remove(a);
+ if (fc != null) {
+ if (fixLighting(fc, Settings.FIX_ALL_LIGHTING)) {
return;
}
}
}
}
}
+
+ @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
+ public void onChunkUnload(ChunkUnloadEvent event) {
+ removeLoaded(event.getChunk());
+ }
private final ConcurrentHashMap> blocks = new ConcurrentHashMap<>();
@@ -118,7 +193,7 @@ public abstract class BukkitQueue_0 extends FaweQueue implements Listener {
}
final Iterator>> iter = blocks.entrySet().iterator();
final FaweChunk toReturn = iter.next().getValue();
- if (SetBlockQueue.IMP.isWaiting()) {
+ if (SetQueue.IMP.isWaiting()) {
return null;
}
iter.remove();
@@ -145,7 +220,7 @@ public abstract class BukkitQueue_0 extends FaweQueue implements Listener {
}
toUpdate.add(fc);
// Fix lighting
- SetBlockQueue.IMP.addTask(new Runnable() {
+ SetQueue.IMP.addTask(new Runnable() {
@Override
public void run() {
diff --git a/src/main/java/com/boydti/fawe/object/FastWorldEditExtent.java b/src/main/java/com/boydti/fawe/object/FastWorldEditExtent.java
index a5c26568..884fa41b 100644
--- a/src/main/java/com/boydti/fawe/object/FastWorldEditExtent.java
+++ b/src/main/java/com/boydti/fawe/object/FastWorldEditExtent.java
@@ -2,8 +2,10 @@ package com.boydti.fawe.object;
import java.util.List;
-import com.boydti.fawe.util.SetBlockQueue;
+import com.boydti.fawe.util.SetQueue;
+import com.boydti.fawe.util.TaskManager;
import com.sk89q.worldedit.BlockVector;
+import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.Vector2D;
import com.sk89q.worldedit.WorldEditException;
@@ -28,14 +30,21 @@ public class FastWorldEditExtent extends AbstractDelegateExtent {
}
@Override
- public Entity createEntity(Location location, BaseEntity entity) {
- synchronized (thread) {
- return super.createEntity(location, entity);
- }
+ public Entity createEntity(final Location location, final BaseEntity entity) {
+ TaskManager.IMP.task(new Runnable() {
+ @Override
+ public void run() {
+ FastWorldEditExtent.super.createEntity(location, entity);
+ }
+ });
+ return null;
}
@Override
public BaseBiome getBiome(Vector2D position) {
+ if (!SetQueue.IMP.isChunkLoaded(world, position.getBlockX() >> 4, position.getBlockZ() >> 4)) {
+ return EditSession.nullBiome;
+ }
synchronized (thread) {
return super.getBiome(position);
}
@@ -49,6 +58,9 @@ public class FastWorldEditExtent extends AbstractDelegateExtent {
if (lastBlock != null && lastVector.equals(position.toBlockVector())) {
return lastBlock;
}
+ if (!SetQueue.IMP.isChunkLoaded(world, position.getBlockX() >> 4, position.getBlockZ() >> 4)) {
+ return EditSession.nullBlock;
+ }
synchronized (thread) {
lastVector = position.toBlockVector();
return lastBlock = super.getBlock(position);
@@ -71,14 +83,12 @@ public class FastWorldEditExtent extends AbstractDelegateExtent {
@Override
public BaseBlock getBlock(Vector position) {
- synchronized (thread) {
- return super.getLazyBlock(position);
- }
+ return getLazyBlock(position);
}
@Override
public boolean setBiome(Vector2D position, BaseBiome biome) {
- SetBlockQueue.IMP.setBiome(world, position.getBlockX(), position.getBlockZ(), biome);
+ SetQueue.IMP.setBiome(world, position.getBlockX(), position.getBlockZ(), biome);
return true;
}
@@ -173,11 +183,11 @@ public class FastWorldEditExtent extends AbstractDelegateExtent {
case 190:
case 191:
case 192: {
- SetBlockQueue.IMP.setBlock(world, x, y, z, id);
+ SetQueue.IMP.setBlock(world, x, y, z, id);
return true;
}
default: {
- SetBlockQueue.IMP.setBlock(world, x, y, z, id, (byte) block.getData());
+ SetQueue.IMP.setBlock(world, x, y, z, id, (byte) block.getData());
return true;
}
}
diff --git a/src/main/java/com/boydti/fawe/object/FaweChunk.java b/src/main/java/com/boydti/fawe/object/FaweChunk.java
index a8397722..5447dba7 100644
--- a/src/main/java/com/boydti/fawe/object/FaweChunk.java
+++ b/src/main/java/com/boydti/fawe/object/FaweChunk.java
@@ -1,7 +1,7 @@
package com.boydti.fawe.object;
import com.boydti.fawe.config.Settings;
-import com.boydti.fawe.util.SetBlockQueue;
+import com.boydti.fawe.util.SetQueue;
import com.sk89q.worldedit.world.biome.BaseBiome;
public abstract class FaweChunk {
@@ -27,11 +27,11 @@ public abstract class FaweChunk {
if (chunk == null) {
throw new IllegalArgumentException("Chunk location cannot be null!");
}
- SetBlockQueue.IMP.queue.setChunk(this);
+ SetQueue.IMP.queue.setChunk(this);
}
public void fixLighting() {
- SetBlockQueue.IMP.queue.fixLighting(this, Settings.FIX_ALL_LIGHTING);
+ SetQueue.IMP.queue.fixLighting(this, Settings.FIX_ALL_LIGHTING);
}
public void fill(int id, byte data) {
diff --git a/src/main/java/com/boydti/fawe/object/FaweLocation.java b/src/main/java/com/boydti/fawe/object/FaweLocation.java
index a3e5c795..486b26e0 100644
--- a/src/main/java/com/boydti/fawe/object/FaweLocation.java
+++ b/src/main/java/com/boydti/fawe/object/FaweLocation.java
@@ -1,6 +1,6 @@
package com.boydti.fawe.object;
-import com.boydti.fawe.util.SetBlockQueue;
+import com.boydti.fawe.util.SetQueue;
/**
*/
@@ -40,6 +40,6 @@ public class FaweLocation {
}
public void setBlockAsync(short id, byte data) {
- SetBlockQueue.IMP.setBlock(world, x, y, z, id, data);
+ SetQueue.IMP.setBlock(world, x, y, z, id, data);
}
}
diff --git a/src/main/java/com/boydti/fawe/object/NullExtent.java b/src/main/java/com/boydti/fawe/object/NullExtent.java
index 2b97474d..0bf67e0c 100644
--- a/src/main/java/com/boydti/fawe/object/NullExtent.java
+++ b/src/main/java/com/boydti/fawe/object/NullExtent.java
@@ -3,6 +3,7 @@ package com.boydti.fawe.object;
import java.util.ArrayList;
import java.util.List;
+import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.Vector2D;
import com.sk89q.worldedit.WorldEditException;
@@ -17,23 +18,19 @@ import com.sk89q.worldedit.world.biome.BaseBiome;
public class NullExtent implements Extent {
- private final BaseBiome nullBiome = new BaseBiome(0);
-
- private final BaseBlock nullBlock = new BaseBlock(0);
-
@Override
public BaseBiome getBiome(final Vector2D arg0) {
- return nullBiome;
+ return EditSession.nullBiome;
}
@Override
public BaseBlock getBlock(final Vector arg0) {
- return nullBlock;
+ return EditSession.nullBlock;
}
@Override
public BaseBlock getLazyBlock(final Vector arg0) {
- return nullBlock;
+ return EditSession.nullBlock;
}
@Override
diff --git a/src/main/java/com/boydti/fawe/object/ProcessedWEExtent.java b/src/main/java/com/boydti/fawe/object/ProcessedWEExtent.java
index 157d231a..a637464f 100644
--- a/src/main/java/com/boydti/fawe/object/ProcessedWEExtent.java
+++ b/src/main/java/com/boydti/fawe/object/ProcessedWEExtent.java
@@ -6,9 +6,11 @@ import java.util.List;
import com.boydti.fawe.config.BBC;
import com.boydti.fawe.config.Settings;
import com.boydti.fawe.util.MainUtil;
-import com.boydti.fawe.util.SetBlockQueue;
+import com.boydti.fawe.util.SetQueue;
+import com.boydti.fawe.util.TaskManager;
import com.boydti.fawe.util.WEManager;
import com.sk89q.worldedit.BlockVector;
+import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.Vector2D;
import com.sk89q.worldedit.WorldEditException;
@@ -55,7 +57,7 @@ public class ProcessedWEExtent extends AbstractDelegateExtent {
}
@Override
- public Entity createEntity(Location location, BaseEntity entity) {
+ public Entity createEntity(final Location location, final BaseEntity entity) {
if (Eblocked) {
return null;
}
@@ -65,15 +67,21 @@ public class ProcessedWEExtent extends AbstractDelegateExtent {
MainUtil.sendAdmin(BBC.WORLDEDIT_DANGEROUS_WORLDEDIT.format(world + ": " + location.getBlockX() + "," + location.getBlockY() + "," + location.getBlockZ(), user));
}
if (WEManager.IMP.maskContains(mask, location.getBlockX(), location.getBlockZ())) {
- synchronized (thread) {
- return super.createEntity(location, entity);
- }
+ TaskManager.IMP.task(new Runnable() {
+ @Override
+ public void run() {
+ ProcessedWEExtent.super.createEntity(location, entity);
+ }
+ });
}
return null;
}
@Override
public BaseBiome getBiome(Vector2D position) {
+ if (!SetQueue.IMP.isChunkLoaded(world, position.getBlockX() >> 4, position.getBlockZ() >> 4)) {
+ return EditSession.nullBiome;
+ }
synchronized (thread) {
return super.getBiome(position);
}
@@ -87,6 +95,9 @@ public class ProcessedWEExtent extends AbstractDelegateExtent {
if (lastBlock != null && lastVector.equals(position.toBlockVector())) {
return lastBlock;
}
+ if (!SetQueue.IMP.isChunkLoaded(world, position.getBlockX() >> 4, position.getBlockZ() >> 4)) {
+ return EditSession.nullBlock;
+ }
synchronized (thread) {
lastVector = position.toBlockVector();
return lastBlock = super.getLazyBlock(position);
@@ -109,9 +120,7 @@ public class ProcessedWEExtent extends AbstractDelegateExtent {
@Override
public BaseBlock getBlock(Vector position) {
- synchronized (thread) {
- return super.getLazyBlock(position);
- }
+ return getLazyBlock(position);
}
@Override
@@ -172,7 +181,7 @@ public class ProcessedWEExtent extends AbstractDelegateExtent {
}
return false;
}
- SetBlockQueue.IMP.setBlock(world, x, location.getBlockY(), z, id, (byte) block.getData());
+ SetQueue.IMP.setBlock(world, x, location.getBlockY(), z, id, (byte) block.getData());
}
break;
}
@@ -271,11 +280,11 @@ public class ProcessedWEExtent extends AbstractDelegateExtent {
case 190:
case 191:
case 192: {
- SetBlockQueue.IMP.setBlock(world, x, y, z, id);
+ SetQueue.IMP.setBlock(world, x, y, z, id);
break;
}
default: {
- SetBlockQueue.IMP.setBlock(world, x, y, z, id, (byte) block.getData());
+ SetQueue.IMP.setBlock(world, x, y, z, id, (byte) block.getData());
break;
}
}
@@ -290,7 +299,7 @@ public class ProcessedWEExtent extends AbstractDelegateExtent {
@Override
public boolean setBiome(final Vector2D position, final BaseBiome biome) {
if (WEManager.IMP.maskContains(mask, position.getBlockX(), position.getBlockZ())) {
- SetBlockQueue.IMP.setBiome(world, position.getBlockX(), position.getBlockZ(), biome);
+ SetQueue.IMP.setBiome(world, position.getBlockX(), position.getBlockZ(), biome);
}
return false;
}
diff --git a/src/main/java/com/boydti/fawe/util/FaweQueue.java b/src/main/java/com/boydti/fawe/util/FaweQueue.java
index d7f27833..6a4e1fbd 100644
--- a/src/main/java/com/boydti/fawe/util/FaweQueue.java
+++ b/src/main/java/com/boydti/fawe/util/FaweQueue.java
@@ -16,6 +16,8 @@ public abstract class FaweQueue {
public abstract void setChunk(FaweChunk> chunk);
public abstract boolean fixLighting(FaweChunk> chunk, boolean fixAll);
+
+ public abstract boolean isChunkLoaded(String world, int x, int z);
/**
* Gets the FaweChunk and sets the requested blocks
@@ -28,7 +30,7 @@ public abstract class FaweQueue {
// Set memory limited
MemUtil.memoryLimitedTask();
// Clear block placement
- SetBlockQueue.IMP.queue.clear();
+ SetQueue.IMP.queue.clear();
Fawe.get().getWorldEdit().clearSessions();
// GC
System.gc();
diff --git a/src/main/java/com/boydti/fawe/util/SetBlockQueue.java b/src/main/java/com/boydti/fawe/util/SetQueue.java
similarity index 92%
rename from src/main/java/com/boydti/fawe/util/SetBlockQueue.java
rename to src/main/java/com/boydti/fawe/util/SetQueue.java
index c553abf3..475ca901 100644
--- a/src/main/java/com/boydti/fawe/util/SetBlockQueue.java
+++ b/src/main/java/com/boydti/fawe/util/SetQueue.java
@@ -6,9 +6,9 @@ import java.util.concurrent.atomic.AtomicInteger;
import com.boydti.fawe.object.FaweChunk;
import com.sk89q.worldedit.world.biome.BaseBiome;
-public class SetBlockQueue {
+public class SetQueue {
- public static final SetBlockQueue IMP = new SetBlockQueue();
+ public static final SetQueue IMP = new SetQueue();
public FaweQueue queue;
@@ -18,7 +18,7 @@ public class SetBlockQueue {
private long last;
private long last2;
- public SetBlockQueue() {
+ public SetQueue() {
TaskManager.IMP.repeat(new Runnable() {
@Override
public void run() {
@@ -110,7 +110,7 @@ public class SetBlockQueue {
* @return
*/
public boolean setBlock(final String world, final int x, final int y, final int z, final short id, final byte data) {
- SetBlockQueue.IMP.setWaiting();
+ SetQueue.IMP.setWaiting();
return queue.setBlock(world, x, y, z, id, data);
}
@@ -123,7 +123,7 @@ public class SetBlockQueue {
* @return
*/
public boolean setBlock(final String world, final int x, final int y, final int z, final short id) {
- SetBlockQueue.IMP.setWaiting();
+ SetQueue.IMP.setWaiting();
return queue.setBlock(world, x, y, z, id, (byte) 0);
}
@@ -137,7 +137,11 @@ public class SetBlockQueue {
* @return
*/
public boolean setBiome(final String world, final int x, final int z, BaseBiome biome) {
- SetBlockQueue.IMP.setWaiting();
+ SetQueue.IMP.setWaiting();
return queue.setBiome(world, x, z, biome);
}
+
+ public boolean isChunkLoaded(String world, int x, int z) {
+ return queue.isChunkLoaded(world, x, z);
+ }
}
diff --git a/src/main/java/com/boydti/fawe/util/WEManager.java b/src/main/java/com/boydti/fawe/util/WEManager.java
index 7826ca9a..8ddfa2a9 100644
--- a/src/main/java/com/boydti/fawe/util/WEManager.java
+++ b/src/main/java/com/boydti/fawe/util/WEManager.java
@@ -86,7 +86,7 @@ public class WEManager {
TaskManager.IMP.later(new Runnable() {
@Override
public void run() {
- SetBlockQueue.IMP.addTask(new Runnable() {
+ SetQueue.IMP.addTask(new Runnable() {
@Override
public void run() {
if ((System.currentTimeMillis() - start) > 1000) {
@@ -106,7 +106,7 @@ public class WEManager {
}
public boolean delay(final FawePlayer> player, final Runnable whenDone, final boolean delayed, final boolean onlyDelayedExecution) {
- final boolean free = SetBlockQueue.IMP.addTask(null);
+ final boolean free = SetQueue.IMP.addTask(null);
if (free) {
if (delayed) {
if (whenDone != null) {
@@ -123,7 +123,7 @@ public class WEManager {
if (!delayed && (player != null)) {
BBC.WORLDEDIT_DELAYED.send(player);
}
- SetBlockQueue.IMP.addTask(whenDone);
+ SetQueue.IMP.addTask(whenDone);
}
return true;
}
diff --git a/src/main/java/com/sk89q/worldedit/EditSession.java b/src/main/java/com/sk89q/worldedit/EditSession.java
index a02b97bc..84736706 100644
--- a/src/main/java/com/sk89q/worldedit/EditSession.java
+++ b/src/main/java/com/sk89q/worldedit/EditSession.java
@@ -161,6 +161,9 @@ public class EditSession implements Extent {
private boolean fastmode;
private Mask oldMask;
+ public static BaseBiome nullBiome = new BaseBiome(0);
+ public static BaseBlock nullBlock = new BaseBlock(0);
+
/**
* Create a new instance.
*
diff --git a/src/main/java/com/sk89q/worldedit/command/SchematicCommands.java b/src/main/java/com/sk89q/worldedit/command/SchematicCommands.java
index 353ec5e5..08d43100 100644
--- a/src/main/java/com/sk89q/worldedit/command/SchematicCommands.java
+++ b/src/main/java/com/sk89q/worldedit/command/SchematicCommands.java
@@ -33,7 +33,7 @@ import java.util.Comparator;
import java.util.logging.Level;
import java.util.logging.Logger;
-import com.boydti.fawe.util.SetBlockQueue;
+import com.boydti.fawe.util.SetQueue;
import com.boydti.fawe.util.TaskManager;
import com.sk89q.minecraft.util.commands.Command;
import com.sk89q.minecraft.util.commands.CommandContext;
@@ -98,7 +98,7 @@ public class SchematicCommands {
return;
}
- SetBlockQueue.IMP.addTask(new Runnable() {
+ SetQueue.IMP.addTask(new Runnable() {
@Override
public void run() {
TaskManager.IMP.async(new Runnable() {
@@ -167,7 +167,7 @@ public class SchematicCommands {
target = clipboard;
}
- SetBlockQueue.IMP.addTask(new Runnable() {
+ SetQueue.IMP.addTask(new Runnable() {
@Override
public void run() {
TaskManager.IMP.async(new Runnable() {
diff --git a/src/main/java/com/sk89q/worldedit/command/ScriptingCommands.java b/src/main/java/com/sk89q/worldedit/command/ScriptingCommands.java
index 4260d925..ea2eb50d 100644
--- a/src/main/java/com/sk89q/worldedit/command/ScriptingCommands.java
+++ b/src/main/java/com/sk89q/worldedit/command/ScriptingCommands.java
@@ -24,7 +24,7 @@ import static com.sk89q.minecraft.util.commands.Logging.LogMode.ALL;
import java.io.File;
-import com.boydti.fawe.util.SetBlockQueue;
+import com.boydti.fawe.util.SetQueue;
import com.boydti.fawe.util.TaskManager;
import com.sk89q.minecraft.util.commands.Command;
import com.sk89q.minecraft.util.commands.CommandContext;
@@ -69,7 +69,7 @@ public class ScriptingCommands {
final File dir = worldEdit.getWorkingDirectoryFile(worldEdit.getConfiguration().scriptsDir);
final File f = worldEdit.getSafeOpenFile(player, dir, name, "js", "js");
- SetBlockQueue.IMP.addTask(new Runnable() {
+ SetQueue.IMP.addTask(new Runnable() {
@Override
public void run() {
TaskManager.IMP.async(new Runnable() {
@@ -107,7 +107,7 @@ public class ScriptingCommands {
final File dir = worldEdit.getWorkingDirectoryFile(worldEdit.getConfiguration().scriptsDir);
final File f = worldEdit.getSafeOpenFile(player, dir, lastScript, "js", "js");
- SetBlockQueue.IMP.addTask(new Runnable() {
+ SetQueue.IMP.addTask(new Runnable() {
@Override
public void run() {
TaskManager.IMP.async(new Runnable() {
diff --git a/src/main/java/com/sk89q/worldedit/function/operation/Operations.java b/src/main/java/com/sk89q/worldedit/function/operation/Operations.java
index c74409bc..7f219718 100644
--- a/src/main/java/com/sk89q/worldedit/function/operation/Operations.java
+++ b/src/main/java/com/sk89q/worldedit/function/operation/Operations.java
@@ -19,7 +19,7 @@
package com.sk89q.worldedit.function.operation;
-import com.boydti.fawe.util.SetBlockQueue;
+import com.boydti.fawe.util.SetQueue;
import com.boydti.fawe.util.TaskManager;
import com.sk89q.worldedit.MaxChangedBlocksException;
import com.sk89q.worldedit.WorldEditException;
@@ -85,7 +85,7 @@ public final class Operations {
}
return;
}
- SetBlockQueue.IMP.addTask(new Runnable() {
+ SetQueue.IMP.addTask(new Runnable() {
@Override
public void run() {
TaskManager.IMP.async(new Runnable() {