diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/FaweBukkit.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/FaweBukkit.java
index 86ccdea01..d8abb86c3 100644
--- a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/FaweBukkit.java
+++ b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/FaweBukkit.java
@@ -107,7 +107,7 @@ public class FaweBukkit implements IFawe, Listener {
throwable.printStackTrace();
}
} catch (final Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
Bukkit.getServer().shutdown();
}
@@ -411,7 +411,7 @@ public class FaweBukkit implements IFawe, Listener {
managers.add(new WorldguardFlag(worldguardPlugin, this));
Fawe.debug("Plugin 'WorldGuard' found. Using it now.");
} catch (final Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
final Plugin townyPlugin = Bukkit.getServer().getPluginManager().getPlugin("Towny");
@@ -420,7 +420,7 @@ public class FaweBukkit implements IFawe, Listener {
managers.add(new TownyFeature(townyPlugin, this));
Fawe.debug("Plugin 'Towny' found. Using it now.");
} catch (final Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
final Plugin factionsPlugin = Bukkit.getServer().getPluginManager().getPlugin("Factions");
@@ -437,7 +437,7 @@ public class FaweBukkit implements IFawe, Listener {
managers.add(new FactionsOneFeature(factionsPlugin));
Fawe.debug("Plugin 'FactionsUUID' found. Using it now.");
} catch (Throwable e3) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
@@ -449,7 +449,7 @@ public class FaweBukkit implements IFawe, Listener {
managers.add(new ResidenceFeature(residencePlugin, this));
Fawe.debug("Plugin 'Residence' found. Using it now.");
} catch (final Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
final Plugin griefpreventionPlugin = Bukkit.getServer().getPluginManager().getPlugin("GriefPrevention");
@@ -458,7 +458,7 @@ public class FaweBukkit implements IFawe, Listener {
managers.add(new GriefPreventionFeature(griefpreventionPlugin));
Fawe.debug("Plugin 'GriefPrevention' found. Using it now.");
} catch (final Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
final Plugin preciousstonesPlugin = Bukkit.getServer().getPluginManager().getPlugin("PreciousStones");
@@ -467,7 +467,7 @@ public class FaweBukkit implements IFawe, Listener {
managers.add(new PreciousStonesFeature(preciousstonesPlugin, this));
Fawe.debug("Plugin 'PreciousStones' found. Using it now.");
} catch (final Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
@@ -478,7 +478,7 @@ public class FaweBukkit implements IFawe, Listener {
managers.add(new ASkyBlockHook(aSkyBlock));
Fawe.debug("Plugin 'ASkyBlock' found. Using it now.");
} catch (final Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
if (Settings.IMP.EXPERIMENTAL.FREEBUILD) {
@@ -486,7 +486,7 @@ public class FaweBukkit implements IFawe, Listener {
managers.add(new FreeBuildRegion());
Fawe.debug("Plugin '' found. Using it now.");
} catch (final Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/regions/FactionsOneFeature.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/regions/FactionsOneFeature.java
index 9be63b4d2..eafcb7634 100644
--- a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/regions/FactionsOneFeature.java
+++ b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/regions/FactionsOneFeature.java
@@ -3,7 +3,6 @@ package com.boydti.fawe.bukkit.regions;
import com.boydti.fawe.object.FawePlayer;
import com.boydti.fawe.object.RegionWrapper;
import com.boydti.fawe.regions.FaweMask;
-import com.boydti.fawe.util.MainUtil;
import com.boydti.fawe.util.Perm;
import com.massivecraft.factions.FLocation;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
@@ -107,7 +106,7 @@ public class FactionsOneFeature extends BukkitMaskManager implements Listener {
}
return true;
} catch (Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
return false;
}
}
diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/util/BukkitReflectionUtils.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/util/BukkitReflectionUtils.java
index 6122ab99f..43a1d5968 100644
--- a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/util/BukkitReflectionUtils.java
+++ b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/util/BukkitReflectionUtils.java
@@ -1,6 +1,5 @@
package com.boydti.fawe.bukkit.util;
-import com.boydti.fawe.util.MainUtil;
import com.boydti.fawe.util.ReflectionUtils;
import org.bukkit.Bukkit;
import org.bukkit.Server;
@@ -38,7 +37,7 @@ public class BukkitReflectionUtils {
preClassM = "net.minecraft.server." + verM;
}
} catch (final Exception e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/v0/BukkitChunk_All.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/v0/BukkitChunk_All.java
index f9cc87dc6..f06b31a1b 100644
--- a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/v0/BukkitChunk_All.java
+++ b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/v0/BukkitChunk_All.java
@@ -334,7 +334,7 @@ public class BukkitChunk_All extends IntFaweChunk {
index = 0;
}
} catch (final Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
} while (System.currentTimeMillis() - start < recommended);
if (more || place) {
diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/v1_13/BukkitChunk_1_13.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/v1_13/BukkitChunk_1_13.java
index f968cc856..2b94dffc9 100644
--- a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/v1_13/BukkitChunk_1_13.java
+++ b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/v1_13/BukkitChunk_1_13.java
@@ -284,7 +284,7 @@ public class BukkitChunk_1_13 extends IntFaweChunk {
copy.sectionPalettes[i] = copy(current);
}
} catch (Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
return copy;
@@ -620,7 +620,7 @@ public class BukkitChunk_1_13 extends IntFaweChunk {
getParent().getChangeTask().run(copy, this);
}
} catch (Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
return this;
}
diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/v1_13/BukkitQueue_1_13.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/v1_13/BukkitQueue_1_13.java
index 9f07a438b..9e2a5a4e1 100644
--- a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/v1_13/BukkitQueue_1_13.java
+++ b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/v1_13/BukkitQueue_1_13.java
@@ -13,7 +13,6 @@ import com.boydti.fawe.object.FawePlayer;
import com.boydti.fawe.object.RegionWrapper;
import com.boydti.fawe.object.brush.visualization.VisualChunk;
import com.boydti.fawe.object.visitor.FaweChunkVisitor;
-import com.boydti.fawe.util.MainUtil;
import com.boydti.fawe.util.MathMan;
import com.boydti.fawe.util.TaskManager;
@@ -701,7 +700,7 @@ public class BukkitQueue_1_13 extends BukkitQueue_0> userGroupPermissions = new HashMap<>();
- List groupKeys = config.getStringList("permissions.groups", null);
+ List groupKeys = config.getKeys("permissions.groups");
if (groupKeys != null) {
for (String key : groupKeys) {
@@ -76,7 +77,7 @@ public class ConfigurationPermissionsResolver implements PermissionsResolver {
}
}
- List userKeys = config.getStringList("permissions.users", null);
+ List userKeys = config.getKeys("permissions.users");
if (userKeys != null) {
for (String key : userKeys) {
@@ -102,8 +103,8 @@ public class ConfigurationPermissionsResolver implements PermissionsResolver {
}
}
- userPermissionsCache.put(key.toLowerCase(), permsCache);
- userGroups.put(key.toLowerCase(), new HashSet<>(groups));
+ userPermissionsCache.put(key.toLowerCase(Locale.ROOT), permsCache);
+ userGroups.put(key.toLowerCase(Locale.ROOT), new HashSet<>(groups));
}
}
}
@@ -117,7 +118,7 @@ public class ConfigurationPermissionsResolver implements PermissionsResolver {
}
}
- Set perms = userPermissionsCache.get(player.toLowerCase());
+ Set perms = userPermissionsCache.get(player.toLowerCase(Locale.ROOT));
if (perms == null) {
return defaultPermissionsCache.contains(permission)
|| defaultPermissionsCache.contains("*");
@@ -134,7 +135,7 @@ public class ConfigurationPermissionsResolver implements PermissionsResolver {
@Override
public boolean inGroup(String player, String group) {
- Set groups = userGroups.get(player.toLowerCase());
+ Set groups = userGroups.get(player.toLowerCase(Locale.ROOT));
if (groups == null) {
return false;
}
@@ -144,12 +145,12 @@ public class ConfigurationPermissionsResolver implements PermissionsResolver {
@Override
public String[] getGroups(String player) {
- Set groups = userGroups.get(player.toLowerCase());
+ Set groups = userGroups.get(player.toLowerCase(Locale.ROOT));
if (groups == null) {
return new String[0];
}
- return groups.toArray(new String[groups.size()]);
+ return groups.toArray(new String[0]);
}
@Override
diff --git a/worldedit-core/src/main/java/com/boydti/fawe/Fawe.java b/worldedit-core/src/main/java/com/boydti/fawe/Fawe.java
index 05a500c90..908cb14c2 100644
--- a/worldedit-core/src/main/java/com/boydti/fawe/Fawe.java
+++ b/worldedit-core/src/main/java/com/boydti/fawe/Fawe.java
@@ -382,7 +382,7 @@ public class Fawe {
}
} catch (Throwable e) {
debug("====== MEMORY LISTENER ERROR ======");
- MainUtil.handleError(e);
+ e.printStackTrace();
debug("===================================");
debug("FAWE needs access to the JVM memory system:");
debug(" - Change your Java security settings");
diff --git a/worldedit-core/src/main/java/com/boydti/fawe/config/BBC.java b/worldedit-core/src/main/java/com/boydti/fawe/config/BBC.java
index c5ce7ce64..72e1002be 100644
--- a/worldedit-core/src/main/java/com/boydti/fawe/config/BBC.java
+++ b/worldedit-core/src/main/java/com/boydti/fawe/config/BBC.java
@@ -5,7 +5,6 @@ import com.boydti.fawe.configuration.MemorySection;
import com.boydti.fawe.configuration.file.YamlConfiguration;
import com.boydti.fawe.object.FawePlayer;
import com.boydti.fawe.object.RunnableVal3;
-import com.boydti.fawe.util.MainUtil;
import com.boydti.fawe.util.StringMan;
import com.boydti.fawe.util.chat.Message;
import com.google.gson.Gson;
@@ -472,7 +471,7 @@ public enum BBC {
yml.save(file);
}
} catch (final Exception e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
diff --git a/worldedit-core/src/main/java/com/boydti/fawe/example/MappedFaweQueue.java b/worldedit-core/src/main/java/com/boydti/fawe/example/MappedFaweQueue.java
index 2ee9864af..fb988ab7a 100644
--- a/worldedit-core/src/main/java/com/boydti/fawe/example/MappedFaweQueue.java
+++ b/worldedit-core/src/main/java/com/boydti/fawe/example/MappedFaweQueue.java
@@ -10,7 +10,6 @@ import com.boydti.fawe.object.RunnableVal;
import com.boydti.fawe.object.RunnableVal2;
import com.boydti.fawe.object.exception.FaweException;
import com.boydti.fawe.object.extent.LightingExtent;
-import com.boydti.fawe.util.MainUtil;
import com.boydti.fawe.util.MathMan;
import com.boydti.fawe.util.SetQueue;
import com.boydti.fawe.util.TaskManager;
@@ -229,7 +228,7 @@ public abstract class MappedFaweQueue impl
try {
task.run();
} catch (Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
}
@@ -246,7 +245,7 @@ public abstract class MappedFaweQueue impl
try {
run.run();
} catch (Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
}
diff --git a/worldedit-core/src/main/java/com/boydti/fawe/example/NMSMappedFaweQueue.java b/worldedit-core/src/main/java/com/boydti/fawe/example/NMSMappedFaweQueue.java
index 9fe3389a7..aa04b611f 100644
--- a/worldedit-core/src/main/java/com/boydti/fawe/example/NMSMappedFaweQueue.java
+++ b/worldedit-core/src/main/java/com/boydti/fawe/example/NMSMappedFaweQueue.java
@@ -1,17 +1,10 @@
package com.boydti.fawe.example;
-import com.boydti.fawe.FaweCache;
import com.boydti.fawe.object.FaweChunk;
-import com.boydti.fawe.util.MainUtil;
import com.boydti.fawe.util.TaskManager;
import com.sk89q.worldedit.world.World;
import com.sk89q.worldedit.world.block.BlockTypes;
-import java.util.Collection;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-
public abstract class NMSMappedFaweQueue extends MappedFaweQueue {
private final int maxY;
@@ -104,7 +97,7 @@ public abstract class NMSMappedFaweQueue ex
try {
refreshChunk(fc);
} catch (Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/FaweChunk.java b/worldedit-core/src/main/java/com/boydti/fawe/object/FaweChunk.java
index d138263d3..94471f67b 100644
--- a/worldedit-core/src/main/java/com/boydti/fawe/object/FaweChunk.java
+++ b/worldedit-core/src/main/java/com/boydti/fawe/object/FaweChunk.java
@@ -1,14 +1,13 @@
package com.boydti.fawe.object;
import com.boydti.fawe.object.visitor.FaweChunkVisitor;
-import com.boydti.fawe.util.MainUtil;
+
import com.sk89q.jnbt.CompoundTag;
import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.biome.BiomeType;
import com.sk89q.worldedit.world.block.BlockStateHolder;
-import java.util.ArrayDeque;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
@@ -121,7 +120,7 @@ public abstract class FaweChunk implements Callable {
return BaseBlock.getFromInternalId(combined, tile).toImmutableState();
}
} catch (Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
return BlockState.getFromInternalId(combined);
}
diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/FaweCommand.java b/worldedit-core/src/main/java/com/boydti/fawe/object/FaweCommand.java
index bab4cf69c..6aae0dc67 100644
--- a/worldedit-core/src/main/java/com/boydti/fawe/object/FaweCommand.java
+++ b/worldedit-core/src/main/java/com/boydti/fawe/object/FaweCommand.java
@@ -1,7 +1,6 @@
package com.boydti.fawe.object;
import com.boydti.fawe.config.BBC;
-import com.boydti.fawe.util.MainUtil;
import com.boydti.fawe.util.TaskManager;
public abstract class FaweCommand {
@@ -36,7 +35,7 @@ public abstract class FaweCommand {
}
return true;
} catch (Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
return false;
}
diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/FawePlayer.java b/worldedit-core/src/main/java/com/boydti/fawe/object/FawePlayer.java
index 73f13bb5b..8b8e43fea 100644
--- a/worldedit-core/src/main/java/com/boydti/fawe/object/FawePlayer.java
+++ b/worldedit-core/src/main/java/com/boydti/fawe/object/FawePlayer.java
@@ -42,6 +42,7 @@ import com.sk89q.worldedit.regions.RegionSelector;
import com.sk89q.worldedit.regions.selector.ConvexPolyhedralRegionSelector;
import com.sk89q.worldedit.regions.selector.CuboidRegionSelector;
import com.sk89q.worldedit.regions.selector.CylinderRegionSelector;
+import com.sk89q.worldedit.regions.selector.Polygonal2DRegionSelector;
import com.sk89q.worldedit.session.ClipboardHolder;
import com.sk89q.worldedit.world.World;
@@ -353,7 +354,7 @@ public abstract class FawePlayer extends Metadatable {
}
} catch (Exception event) {
Fawe.debug("====== INVALID CLIPBOARD ======");
- MainUtil.handleError(event);
+ event.printStackTrace();
Fawe.debug("===============---=============");
Fawe.debug("This shouldn't result in any failure");
Fawe.debug("File: " + file.getName() + " (len:" + file.length() + ")");
@@ -560,19 +561,14 @@ public abstract class FawePlayer extends Metadatable {
public void setSelection(Region region) {
RegionSelector selector;
- switch (region.getClass().getName()) {
- case "ConvexPolyhedralRegion":
- selector = new ConvexPolyhedralRegionSelector((ConvexPolyhedralRegion) region);
- break;
- case "CylinderRegion":
- selector = new CylinderRegionSelector((CylinderRegion) region);
- break;
- case "Polygonal2DRegion":
- selector = new com.sk89q.worldedit.regions.selector.Polygonal2DRegionSelector((Polygonal2DRegion) region);
- break;
- default:
- selector = new CuboidRegionSelector(null, region.getMinimumPoint(), region.getMaximumPoint());
- break;
+ if (region instanceof ConvexPolyhedralRegion) {
+ selector = new ConvexPolyhedralRegionSelector((ConvexPolyhedralRegion) region);
+ } else if (region instanceof CylinderRegion) {
+ selector = new CylinderRegionSelector((CylinderRegion) region);
+ } else if (region instanceof Polygonal2DRegion) {
+ selector = new Polygonal2DRegionSelector((Polygonal2DRegion) region);
+ } else {
+ selector = new CuboidRegionSelector(null, region.getMinimumPoint(), region.getMaximumPoint());
}
selector.setWorld(region.getWorld());
diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/FaweQueue.java b/worldedit-core/src/main/java/com/boydti/fawe/object/FaweQueue.java
index 6e3993f4d..855336431 100644
--- a/worldedit-core/src/main/java/com/boydti/fawe/object/FaweQueue.java
+++ b/worldedit-core/src/main/java/com/boydti/fawe/object/FaweQueue.java
@@ -77,7 +77,7 @@ public interface FaweQueue extends HasFaweQueue, Extent {
try {
return BlockState.getFromInternalId(combinedId4Data);
} catch (Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
return BlockTypes.AIR.getDefaultState();
}
}
@@ -100,7 +100,7 @@ public interface FaweQueue extends HasFaweQueue, Extent {
}
return block;
} catch (Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
return BlockTypes.AIR.getDefaultState().toBaseBlock();
}
}
diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/brush/heightmap/HeightMap.java b/worldedit-core/src/main/java/com/boydti/fawe/object/brush/heightmap/HeightMap.java
index 70f5282dc..3e52e8f30 100644
--- a/worldedit-core/src/main/java/com/boydti/fawe/object/brush/heightmap/HeightMap.java
+++ b/worldedit-core/src/main/java/com/boydti/fawe/object/brush/heightmap/HeightMap.java
@@ -1,6 +1,5 @@
package com.boydti.fawe.object.brush.heightmap;
-import com.boydti.fawe.util.MainUtil;
import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.MaxChangedBlocksException;
import com.sk89q.worldedit.function.mask.Mask;
@@ -14,21 +13,19 @@ import com.sk89q.worldedit.util.Location;
import java.util.concurrent.ThreadLocalRandom;
public interface HeightMap {
- public double getHeight(int x, int z);
+ double getHeight(int x, int z);
- public void setSize(int size);
+ void setSize(int size);
default void perform(EditSession session, Mask mask, BlockVector3 pos, int size, int rotationMode, double yscale, boolean smooth, boolean towards, boolean layers) throws MaxChangedBlocksException {
int[][] data = generateHeightData(session, mask, pos, size, rotationMode, yscale, smooth, towards, layers);
- applyHeightMapData(data, session, mask, pos, size, rotationMode, yscale, smooth, towards, layers);
+ applyHeightMapData(data, session, pos, size, yscale, smooth, towards, layers);
}
- default void applyHeightMapData(int[][] data, EditSession session, Mask mask, BlockVector3 pos, int size, int rotationMode, double yscale, boolean smooth, boolean towards, boolean layers) throws MaxChangedBlocksException {
+ default void applyHeightMapData(int[][] data, EditSession session, BlockVector3 pos, int size, double yscale, boolean smooth, boolean towards, boolean layers) throws MaxChangedBlocksException {
BlockVector3 top = session.getMaximumPoint();
int maxY = top.getBlockY();
- int diameter = 2 * size + 1;
- int iterations = 1;
Location min = new Location(session.getWorld(), pos.subtract(size, maxY, size).toVector3());
BlockVector3 max = pos.add(size, maxY, size);
Region region = new CuboidRegion(session.getWorld(), min.toBlockPoint(), max);
@@ -36,19 +33,16 @@ public interface HeightMap {
if (smooth) {
try {
HeightMapFilter filter = (HeightMapFilter) HeightMapFilter.class.getConstructors()[0].newInstance(GaussianKernel.class.getConstructors()[0].newInstance(5, 1));
+ int diameter = 2 * size + 1;
data[1] = filter.filter(data[1], diameter, diameter);
} catch (Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
- try {
- if (layers) {
- heightMap.applyLayers(data[1]);
- } else {
- heightMap.apply(data[1]);
- }
- } catch (MaxChangedBlocksException e) {
- throw e;
+ if (layers) {
+ heightMap.applyLayers(data[1]);
+ } else {
+ heightMap.apply(data[1]);
}
}
@@ -59,22 +53,18 @@ public interface HeightMap {
int centerX = pos.getBlockX();
int centerZ = pos.getBlockZ();
int centerY = pos.getBlockY();
- int endY = pos.getBlockY() + size;
- int startY = pos.getBlockY() - size;
int[] oldData = new int[diameter * diameter];
int[] newData = new int[oldData.length];
if (layers) { // Pixel accuracy
centerY <<= 3;
maxY <<= 3;
}
-// Vector mutablePos = new Vector(0, 0, 0);
if (towards) {
double sizePowInv = 1d / Math.pow(size, yscale);
int targetY = pos.getBlockY();
int tmpY = targetY;
for (int x = -size; x <= size; x++) {
int xx = centerX + x;
-// mutablePos.mutX(xx);
for (int z = -size; z <= size; z++) {
int index = (z + size) * diameter + (x + size);
int zz = centerZ + z;
@@ -118,7 +108,6 @@ public interface HeightMap {
int height = pos.getBlockY();
for (int x = -size; x <= size; x++) {
int xx = centerX + x;
-// mutablePos.mutX(xx);
for (int z = -size; z <= size; z++) {
int index = (z + size) * diameter + (x + size);
int zz = centerZ + z;
diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/changeset/DiskStorageHistory.java b/worldedit-core/src/main/java/com/boydti/fawe/object/changeset/DiskStorageHistory.java
index 2537564a5..93d2f1c33 100644
--- a/worldedit-core/src/main/java/com/boydti/fawe/object/changeset/DiskStorageHistory.java
+++ b/worldedit-core/src/main/java/com/boydti/fawe/object/changeset/DiskStorageHistory.java
@@ -13,13 +13,12 @@ import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldedit.world.World;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.block.BlockTypes;
-import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
+
import java.io.DataOutput;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
-import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@@ -181,7 +180,7 @@ public class DiskStorageHistory extends FaweStreamChangeSet {
if (osENTCF != null) osENTCF.flush();
if (osENTCT != null) osENTCT.flush();
} catch (Exception e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
return flushed;
}
@@ -218,7 +217,7 @@ public class DiskStorageHistory extends FaweStreamChangeSet {
osENTCT = null;
}
} catch (Exception e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
return flushed;
}
@@ -418,7 +417,7 @@ public class DiskStorageHistory extends FaweStreamChangeSet {
}
return summary;
} catch (IOException e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
return null;
@@ -439,7 +438,7 @@ public class DiskStorageHistory extends FaweStreamChangeSet {
fis.close();
gis.close();
} catch (IOException e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
return new IntegerPair(ox, oz);
diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/changeset/FaweChangeSet.java b/worldedit-core/src/main/java/com/boydti/fawe/object/changeset/FaweChangeSet.java
index fb0c0d92f..e83ec1980 100644
--- a/worldedit-core/src/main/java/com/boydti/fawe/object/changeset/FaweChangeSet.java
+++ b/worldedit-core/src/main/java/com/boydti/fawe/object/changeset/FaweChangeSet.java
@@ -107,7 +107,7 @@ public abstract class FaweChangeSet implements ChangeSet {
}
}
} catch (InterruptedException e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
return true;
}
@@ -194,7 +194,7 @@ public abstract class FaweChangeSet implements ChangeSet {
BaseBlock to = change.getCurrent();
add(loc, from, to);
} catch (Exception e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
@@ -222,7 +222,7 @@ public abstract class FaweChangeSet implements ChangeSet {
add(x, y, z, combinedFrom, combinedTo);
} catch (Exception e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
@@ -241,7 +241,7 @@ public abstract class FaweChangeSet implements ChangeSet {
add(x, y, z, combinedFrom, combinedTo);
} catch (Exception e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
@@ -343,7 +343,7 @@ public abstract class FaweChangeSet implements ChangeSet {
}
}
} catch (Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
} finally {
if (FaweChangeSet.this.waitingCombined.decrementAndGet() <= 0) {
synchronized (FaweChangeSet.this.waitingAsync) {
diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/changeset/FaweStreamChangeSet.java b/worldedit-core/src/main/java/com/boydti/fawe/object/changeset/FaweStreamChangeSet.java
index ddf572ddd..d40bb241e 100644
--- a/worldedit-core/src/main/java/com/boydti/fawe/object/changeset/FaweStreamChangeSet.java
+++ b/worldedit-core/src/main/java/com/boydti/fawe/object/changeset/FaweStreamChangeSet.java
@@ -320,7 +320,7 @@ public abstract class FaweStreamChangeSet extends FaweChangeSet {
posDel.write(stream, x - originX, y, z - originZ);
idDel.writeChange(stream, combinedFrom, combinedTo);
} catch (Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
@@ -340,7 +340,7 @@ public abstract class FaweStreamChangeSet extends FaweChangeSet {
os.writeVarInt(from.getInternalId());
os.writeVarInt(to.getInternalId());
} catch (Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
@@ -353,7 +353,7 @@ public abstract class FaweStreamChangeSet extends FaweChangeSet {
NBTOutputStream nbtos = getTileCreateOS();
nbtos.writeTag(tag);
} catch (IOException e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
@@ -366,7 +366,7 @@ public abstract class FaweStreamChangeSet extends FaweChangeSet {
NBTOutputStream nbtos = getTileRemoveOS();
nbtos.writeTag(tag);
} catch (IOException e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
@@ -379,7 +379,7 @@ public abstract class FaweStreamChangeSet extends FaweChangeSet {
NBTOutputStream nbtos = getEntityRemoveOS();
nbtos.writeTag(tag);
} catch (IOException e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
@@ -392,7 +392,7 @@ public abstract class FaweStreamChangeSet extends FaweChangeSet {
NBTOutputStream nbtos = getEntityCreateOS();
nbtos.writeTag(tag);
} catch (IOException e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
@@ -415,12 +415,12 @@ public abstract class FaweStreamChangeSet extends FaweChangeSet {
} catch (EOFException ignored) {
} catch (Exception e) {
e.printStackTrace();
- MainUtil.handleError(e);
+ e.printStackTrace();
}
try {
is.close();
} catch (IOException e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
return null;
}
@@ -470,12 +470,12 @@ public abstract class FaweStreamChangeSet extends FaweChangeSet {
} catch (EOFException ignored) {
} catch (Exception e) {
e.printStackTrace();
- MainUtil.handleError(e);
+ e.printStackTrace();
}
try {
is.close();
} catch (IOException e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
return null;
}
@@ -530,12 +530,12 @@ public abstract class FaweStreamChangeSet extends FaweChangeSet {
} catch (EOFException ignored) {
} catch (Exception e) {
e.printStackTrace();
- MainUtil.handleError(e);
+ e.printStackTrace();
}
try {
is.close();
} catch (IOException e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
return null;
}
@@ -562,7 +562,7 @@ public abstract class FaweStreamChangeSet extends FaweChangeSet {
};
}
- public Iterator getEntityIterator(final NBTInputStream is, final boolean create, final boolean dir) {
+ public Iterator getEntityIterator(final NBTInputStream is, final boolean create) {
if (is == null) {
return new ArrayList().iterator();
}
@@ -580,7 +580,7 @@ public abstract class FaweStreamChangeSet extends FaweChangeSet {
try {
is.close();
} catch (IOException e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
return null;
}
@@ -606,12 +606,12 @@ public abstract class FaweStreamChangeSet extends FaweChangeSet {
}
};
} catch (Exception e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
return null;
}
}
- public Iterator getTileIterator(final NBTInputStream is, final boolean create, final boolean dir) {
+ public Iterator getTileIterator(final NBTInputStream is, final boolean create) {
if (is == null) {
return new ArrayList().iterator();
}
@@ -629,7 +629,7 @@ public abstract class FaweStreamChangeSet extends FaweChangeSet {
try {
is.close();
} catch (IOException e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
return null;
}
@@ -655,7 +655,7 @@ public abstract class FaweStreamChangeSet extends FaweChangeSet {
}
};
} catch (Exception e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
return null;
}
}
@@ -663,11 +663,11 @@ public abstract class FaweStreamChangeSet extends FaweChangeSet {
public Iterator getIterator(final boolean dir) {
close();
try {
- final Iterator tileCreate = getTileIterator(getTileCreateIS(), true, dir);
- final Iterator tileRemove = getTileIterator(getTileRemoveIS(), false, dir);
+ final Iterator tileCreate = getTileIterator(getTileCreateIS(), true);
+ final Iterator tileRemove = getTileIterator(getTileRemoveIS(), false);
- final Iterator entityCreate = getEntityIterator(getEntityCreateIS(), true, dir);
- final Iterator entityRemove = getEntityIterator(getEntityRemoveIS(), false, dir);
+ final Iterator entityCreate = getEntityIterator(getEntityCreateIS(), true);
+ final Iterator entityRemove = getEntityIterator(getEntityRemoveIS(), false);
final Iterator blockChange = getBlockIterator(dir);
@@ -709,7 +709,7 @@ public abstract class FaweStreamChangeSet extends FaweChangeSet {
}
};
} catch (Exception e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
return new ArrayList().iterator();
}
diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/changeset/MemoryOptimizedHistory.java b/worldedit-core/src/main/java/com/boydti/fawe/object/changeset/MemoryOptimizedHistory.java
index f2f44f93a..436f83a23 100644
--- a/worldedit-core/src/main/java/com/boydti/fawe/object/changeset/MemoryOptimizedHistory.java
+++ b/worldedit-core/src/main/java/com/boydti/fawe/object/changeset/MemoryOptimizedHistory.java
@@ -9,9 +9,9 @@ import com.boydti.fawe.util.MainUtil;
import com.sk89q.jnbt.NBTInputStream;
import com.sk89q.jnbt.NBTOutputStream;
import com.sk89q.worldedit.world.World;
+
import java.io.DataOutput;
import java.io.IOException;
-import java.io.OutputStream;
/**
* ChangeSet optimized for low memory usage
@@ -66,7 +66,7 @@ public class MemoryOptimizedHistory extends FaweStreamChangeSet {
if (tileRStream != null) tileRStreamZip.flush();
return true;
} catch (IOException e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
return false;
@@ -115,7 +115,7 @@ public class MemoryOptimizedHistory extends FaweStreamChangeSet {
}
return true;
} catch (IOException e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
return false;
@@ -248,6 +248,6 @@ public class MemoryOptimizedHistory extends FaweStreamChangeSet {
@Override
public void setRecordChanges(boolean recordChanges) {
// TODO Auto-generated method stub
-
+
}
}
diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/clipboard/DiskOptimizedClipboard.java b/worldedit-core/src/main/java/com/boydti/fawe/object/clipboard/DiskOptimizedClipboard.java
index 11dc47669..444fa92a8 100644
--- a/worldedit-core/src/main/java/com/boydti/fawe/object/clipboard/DiskOptimizedClipboard.java
+++ b/worldedit-core/src/main/java/com/boydti/fawe/object/clipboard/DiskOptimizedClipboard.java
@@ -78,9 +78,9 @@ public class DiskOptimizedClipboard extends FaweClipboard implements Closeable {
this.braf = new RandomAccessFile(file, "rw");
braf.setLength(file.length());
init();
- width = (int) mbb.getChar(2);
- height = (int) mbb.getChar(4);
- length = (int) mbb.getChar(6);
+ width = mbb.getChar(2);
+ height = mbb.getChar(4);
+ length = mbb.getChar(6);
area = width * length;
this.volume = length * width * height;
@@ -180,7 +180,7 @@ public class DiskOptimizedClipboard extends FaweClipboard implements Closeable {
clipboard.setOrigin(BlockVector3.at(ox, oy, oz));
return clipboard;
} catch (Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
return null;
}
@@ -204,7 +204,7 @@ public class DiskOptimizedClipboard extends FaweClipboard implements Closeable {
file.createNewFile();
}
} catch (Exception e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
this.braf = new RandomAccessFile(file, "rw");
long volume = (long) width * (long) height * (long) length * 4L + (long) HEADER_SIZE;
@@ -229,7 +229,7 @@ public class DiskOptimizedClipboard extends FaweClipboard implements Closeable {
mbb.putShort(10, (short) offset.getBlockY());
mbb.putShort(12, (short) offset.getBlockZ());
} catch (Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
@@ -252,7 +252,7 @@ public class DiskOptimizedClipboard extends FaweClipboard implements Closeable {
mbb.putChar(4, (char) height);
mbb.putChar(6, (char) length);
} catch (IOException e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
@@ -289,7 +289,6 @@ public class DiskOptimizedClipboard extends FaweClipboard implements Closeable {
System.gc();
}
}
- cb = null;
}
@Override
@@ -311,7 +310,7 @@ public class DiskOptimizedClipboard extends FaweClipboard implements Closeable {
braf = null;
}
} catch (IOException e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
@@ -350,7 +349,7 @@ public class DiskOptimizedClipboard extends FaweClipboard implements Closeable {
}
}
} catch (Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
@@ -441,7 +440,7 @@ public class DiskOptimizedClipboard extends FaweClipboard implements Closeable {
} catch (IndexOutOfBoundsException ignore) {
} catch (Exception e) {
e.printStackTrace();
- MainUtil.handleError(e);
+ e.printStackTrace();
}
return BlockTypes.AIR.getDefaultState().toBaseBlock();
}
@@ -480,7 +479,7 @@ public class DiskOptimizedClipboard extends FaweClipboard implements Closeable {
return base;
} catch (IndexOutOfBoundsException ignore) {
} catch (Exception e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
return BlockTypes.AIR.getDefaultState().toBaseBlock();
}
@@ -501,13 +500,13 @@ public class DiskOptimizedClipboard extends FaweClipboard implements Closeable {
int index = (HEADER_SIZE) + ((getIndex(x, y, z) << 2));
int combined = block.getInternalId();
mbb.putInt(index, combined);
- boolean hasNbt = block instanceof BaseBlock && ((BaseBlock)block).hasNbtData();
+ boolean hasNbt = block instanceof BaseBlock && block.hasNbtData();
if (hasNbt) {
setTile(x, y, z, block.getNbtData());
}
return true;
} catch (Exception e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
return false;
}
@@ -528,7 +527,7 @@ public class DiskOptimizedClipboard extends FaweClipboard implements Closeable {
}
return true;
} catch (Exception e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
return false;
}
diff --git a/worldedit-core/src/main/java/com/boydti/fawe/util/ExtentTraverser.java b/worldedit-core/src/main/java/com/boydti/fawe/util/ExtentTraverser.java
index 64a0a6e3d..586c74aa1 100644
--- a/worldedit-core/src/main/java/com/boydti/fawe/util/ExtentTraverser.java
+++ b/worldedit-core/src/main/java/com/boydti/fawe/util/ExtentTraverser.java
@@ -2,6 +2,7 @@ package com.boydti.fawe.util;
import com.sk89q.worldedit.extent.AbstractDelegateExtent;
import com.sk89q.worldedit.extent.Extent;
+
import java.lang.reflect.Field;
public class ExtentTraverser {
@@ -75,7 +76,7 @@ public class ExtentTraverser {
}
return null;
} catch (Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
return null;
}
}
@@ -91,7 +92,7 @@ public class ExtentTraverser {
}
return null;
} catch (Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
return null;
}
}
diff --git a/worldedit-core/src/main/java/com/boydti/fawe/util/MainUtil.java b/worldedit-core/src/main/java/com/boydti/fawe/util/MainUtil.java
index 709a138b4..4b140c617 100644
--- a/worldedit-core/src/main/java/com/boydti/fawe/util/MainUtil.java
+++ b/worldedit-core/src/main/java/com/boydti/fawe/util/MainUtil.java
@@ -609,18 +609,12 @@ public class MainUtil {
return newFile;
}
} catch (IOException e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
Fawe.debug("&cCould not save " + resource);
}
return null;
}
- public static void handleError(Throwable e) {
- if (e == null) {
- return;
- }
- e.printStackTrace(); }
-
public static int[] regionNameToCoords(String fileName) {
int[] res = new int[2];
int len = fileName.length() - 4;
diff --git a/worldedit-core/src/main/java/com/boydti/fawe/util/ReflectionUtils.java b/worldedit-core/src/main/java/com/boydti/fawe/util/ReflectionUtils.java
index d9248121c..8c47fcf17 100644
--- a/worldedit-core/src/main/java/com/boydti/fawe/util/ReflectionUtils.java
+++ b/worldedit-core/src/main/java/com/boydti/fawe/util/ReflectionUtils.java
@@ -150,7 +150,7 @@ public class ReflectionUtils {
m.setAccessible(true);
return (Map) m.get(map);
} catch (Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
return map;
}
}
@@ -163,7 +163,7 @@ public class ReflectionUtils {
m.setAccessible(true);
return (List) m.get(list);
} catch (Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
return list;
}
}
diff --git a/worldedit-core/src/main/java/com/boydti/fawe/util/SetQueue.java b/worldedit-core/src/main/java/com/boydti/fawe/util/SetQueue.java
index 28a174870..df7e10df5 100644
--- a/worldedit-core/src/main/java/com/boydti/fawe/util/SetQueue.java
+++ b/worldedit-core/src/main/java/com/boydti/fawe/util/SetQueue.java
@@ -5,6 +5,7 @@ import com.boydti.fawe.config.Settings;
import com.boydti.fawe.object.FaweQueue;
import com.boydti.fawe.wrappers.WorldWrapper;
import com.sk89q.worldedit.world.World;
+
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -273,7 +274,7 @@ public class SetQueue {
} catch (Throwable e) {
pool.awaitQuiescence(Settings.IMP.QUEUE.DISCARD_AFTER_MS, TimeUnit.MILLISECONDS);
completer = new ExecutorCompletionService(pool);
- MainUtil.handleError(e);
+ e.printStackTrace();
} finally {
queue.endSet(Settings.IMP.QUEUE.PARALLEL_THREADS > 1);
queue.setStage(QueueStage.NONE);
diff --git a/worldedit-core/src/main/java/com/boydti/fawe/util/TaskManager.java b/worldedit-core/src/main/java/com/boydti/fawe/util/TaskManager.java
index 368853e91..1f88087ee 100644
--- a/worldedit-core/src/main/java/com/boydti/fawe/util/TaskManager.java
+++ b/worldedit-core/src/main/java/com/boydti/fawe/util/TaskManager.java
@@ -4,15 +4,16 @@ import com.boydti.fawe.Fawe;
import com.boydti.fawe.config.Settings;
import com.boydti.fawe.object.FaweQueue;
import com.boydti.fawe.object.RunnableVal;
+
import org.jetbrains.annotations.NotNull;
+import javax.annotation.Nullable;
import java.util.Collection;
import java.util.Iterator;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Supplier;
-import javax.annotation.Nullable;
public abstract class TaskManager {
@@ -283,7 +284,7 @@ public abstract class TaskManager {
}
}
} catch (InterruptedException e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
@@ -330,7 +331,7 @@ public abstract class TaskManager {
} catch (RuntimeException e) {
this.value = e;
} catch (Throwable neverHappens) {
- MainUtil.handleError(neverHappens);
+ neverHappens.printStackTrace();
} finally {
running.set(false);
}
@@ -347,7 +348,7 @@ public abstract class TaskManager {
}
}
} catch (InterruptedException e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
if (run.value != null) {
throw run.value;
@@ -382,7 +383,7 @@ public abstract class TaskManager {
} catch (RuntimeException e) {
this.value = e;
} catch (Throwable neverHappens) {
- MainUtil.handleError(neverHappens);
+ neverHappens.printStackTrace();
} finally {
running.set(false);
synchronized (function) {
@@ -399,7 +400,7 @@ public abstract class TaskManager {
}
}
} catch (InterruptedException e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
if (run.value instanceof RuntimeException) {
throw (RuntimeException) run.value;
diff --git a/worldedit-core/src/main/java/com/boydti/fawe/util/WEManager.java b/worldedit-core/src/main/java/com/boydti/fawe/util/WEManager.java
index 1b315f004..48b5f36c0 100644
--- a/worldedit-core/src/main/java/com/boydti/fawe/util/WEManager.java
+++ b/worldedit-core/src/main/java/com/boydti/fawe/util/WEManager.java
@@ -14,9 +14,9 @@ import com.sk89q.worldedit.extent.AbstractDelegateExtent;
import com.sk89q.worldedit.extent.Extent;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.regions.Region;
+
import java.lang.reflect.Field;
import java.util.*;
-import java.util.stream.Collectors;
public class WEManager {
@@ -33,7 +33,7 @@ public class WEManager {
field.set(parent, new NullExtent((Extent) field.get(parent), reason));
}
} catch (final Exception e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
throw new FaweException(reason);
}
@@ -189,7 +189,7 @@ public class WEManager {
}), 2);
});
} catch (final Exception e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}, false, false);
}
diff --git a/worldedit-core/src/main/java/com/sk89q/jnbt/ByteArrayTag.java b/worldedit-core/src/main/java/com/sk89q/jnbt/ByteArrayTag.java
index b4fb9dc52..791ee97ea 100644
--- a/worldedit-core/src/main/java/com/sk89q/jnbt/ByteArrayTag.java
+++ b/worldedit-core/src/main/java/com/sk89q/jnbt/ByteArrayTag.java
@@ -19,6 +19,8 @@
package com.sk89q.jnbt;
+import java.util.Locale;
+
/**
* The {@code TAG_Byte_Array} tag.
*/
@@ -45,7 +47,7 @@ public final class ByteArrayTag extends Tag {
public String toString() {
StringBuilder hex = new StringBuilder();
for (byte b : value) {
- String hexDigits = Integer.toHexString(b).toUpperCase();
+ String hexDigits = Integer.toHexString(b).toUpperCase(Locale.ROOT);
if (hexDigits.length() == 1) {
hex.append("0");
}
diff --git a/worldedit-core/src/main/java/com/sk89q/util/StringUtil.java b/worldedit-core/src/main/java/com/sk89q/util/StringUtil.java
index 2571f71f9..32386a34a 100644
--- a/worldedit-core/src/main/java/com/sk89q/util/StringUtil.java
+++ b/worldedit-core/src/main/java/com/sk89q/util/StringUtil.java
@@ -22,6 +22,7 @@ package com.sk89q.util;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
/**
@@ -34,7 +35,7 @@ public final class StringUtil {
/**
* Trim a string if it is longer than a certain length.
- *
+ *
* @param str the stirng
* @param len the length to trim to
* @return a new string
@@ -49,7 +50,7 @@ public final class StringUtil {
/**
* Join an array of strings into a string.
- *
+ *
* @param str the string array
* @param delimiter the delimiter
* @param initialIndex the initial index to start form
@@ -68,7 +69,7 @@ public final class StringUtil {
/**
* Join an array of strings into a string.
- *
+ *
* @param str the string array
* @param delimiter the delimiter
* @param initialIndex the initial index to start form
@@ -92,7 +93,7 @@ public final class StringUtil {
/**
* Join an array of strings into a string.
- *
+ *
* @param str the string array
* @param delimiter the delimiter
* @return a new string
@@ -103,7 +104,7 @@ public final class StringUtil {
/**
* Join an array of strings into a string.
- *
+ *
* @param str an array of objects
* @param delimiter the delimiter
* @param initialIndex the initial index to start form
@@ -122,7 +123,7 @@ public final class StringUtil {
/**
* Join an array of strings into a string.
- *
+ *
* @param str a list of integers
* @param delimiter the delimiter
* @param initialIndex the initial index to start form
@@ -219,7 +220,7 @@ public final class StringUtil {
* calculated). (Note that the arrays aren't really copied anymore, just
* switched...this is clearly much better than cloning an array or doing
* a System.arraycopy() each time through the outer loop.)
- *
+ *
* Effectively, the difference between the two implementations is this
* one does not cause an out of memory condition when calculating the LD
* over two very large strings.
@@ -274,7 +275,7 @@ public final class StringUtil {
}
public static > T lookup(Map lookup, String name, boolean fuzzy) {
- String testName = name.replaceAll("[ _]", "").toLowerCase();
+ String testName = name.replaceAll("[ _]", "").toLowerCase(Locale.ROOT);
T type = lookup.get(testName);
if (type != null) {
@@ -305,6 +306,10 @@ public final class StringUtil {
}
public static List parseListInQuotes(String[] input, char delimiter, char quoteOpen, char quoteClose) {
+ return parseListInQuotes(input, delimiter, quoteOpen, quoteClose, false);
+ }
+
+ public static List parseListInQuotes(String[] input, char delimiter, char quoteOpen, char quoteClose, boolean appendLeftover) {
List parsableBlocks = new ArrayList<>();
StringBuilder buffer = new StringBuilder();
for (String split : input) {
@@ -320,6 +325,9 @@ public final class StringUtil {
buffer.append(split).append(delimiter);
}
}
+ if (appendLeftover && buffer.length() != 0) {
+ parsableBlocks.add(buffer.delete(buffer.length() - 1, buffer.length()).toString());
+ }
return parsableBlocks;
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/ClothColor.java b/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/ClothColor.java
deleted file mode 100644
index dd3ba1fc2..000000000
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/ClothColor.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * WorldEdit, a Minecraft world manipulation toolkit
- * Copyright (C) sk89q
- * Copyright (C) WorldEdit team and contributors
- *
- * This program is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published by the
- * Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
- * for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see .
- */
-
-package com.sk89q.worldedit.blocks;
-
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.annotation.Nullable;
-
-/**
- * The colors for wool.
- *
- * This class may be removed in the future.
- */
-public enum ClothColor {
-
- WHITE("White", "white"),
- ORANGE("Orange", "orange"),
- MAGENTA("Magenta", "magenta"),
- LIGHT_BLUE("Light blue", "lightblue"),
- YELLOW("Yellow", "yellow"),
- LIGHT_GREEN("Light green", "lightgreen"),
- PINK("Pink", "pink", "lightred"),
- GRAY("Gray", "grey", "gray"),
- LIGHT_GRAY("Light gray", "lightgrey", "lightgray"),
- CYAN("Cyan", "cyan", "turquoise"),
- PURPLE("Purple", "purple", "violet"),
- BLUE("Blue", "blue"),
- BROWN("Brown", "brown", "cocoa", "coffee"),
- DARK_GREEN("Dark green", "green", "darkgreen", "cactusgreen", "cactigreen"),
- RED("Red", "red"),
- BLACK("Black", "black");
- /**
- * Stores a map of the names for fast access.
- */
- private static final Map lookup = new HashMap<>();
-
- private final String name;
- private final String[] lookupKeys;
-
- static {
- for (ClothColor type : EnumSet.allOf(ClothColor.class)) {
- for (String key : type.lookupKeys) {
- lookup.put(key, type);
- }
- }
- }
-
-
- /**
- * Construct the type.
- *
- * @param name the name of the color
- * @param lookupKeys a name to refer to the color by
- */
- ClothColor(String name, String ... lookupKeys) {
- this.name = name;
- this.lookupKeys = lookupKeys;
- }
-
- /**
- * Return type from name. May return null.
- *
- * @param name the name of the color
- * @return a color or null
- */
- @Nullable
- public static ClothColor lookup(String name) {
- return lookup.get(name.toLowerCase());
- }
-
- /**
- * Get user-friendly item name.
- *
- * @return the name
- */
- public String getName() {
- return name;
- }
-
-}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/composition/SelectionCommand.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/composition/SelectionCommand.java
index 77c94a3d6..72cdc50a6 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/composition/SelectionCommand.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/composition/SelectionCommand.java
@@ -149,7 +149,7 @@ public class SelectionCommand extends SimpleCommand {
return null;
}
} catch (Throwable e) {
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/event/extent/EditSessionEvent.java b/worldedit-core/src/main/java/com/sk89q/worldedit/event/extent/EditSessionEvent.java
index c94ba677a..08bc96511 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/event/extent/EditSessionEvent.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/event/extent/EditSessionEvent.java
@@ -19,33 +19,32 @@
package com.sk89q.worldedit.event.extent;
+import static com.google.common.base.Preconditions.checkNotNull;
import com.sk89q.worldedit.EditSession;
+import static com.sk89q.worldedit.EditSession.Stage;
import com.sk89q.worldedit.event.Cancellable;
import com.sk89q.worldedit.event.Event;
import com.sk89q.worldedit.extension.platform.Actor;
import com.sk89q.worldedit.extent.Extent;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.world.World;
+
import javax.annotation.Nullable;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.sk89q.worldedit.EditSession.Stage;
-
/**
* Raised (several times) when a new {@link EditSession} is being instantiated.
- *
+ *
*
Block loggers, as well as block set interceptors, can use this event to wrap
* the given {@link Extent} with their own, which would allow them to intercept
* all changes made to the world. For example, the code below would wrap the
* existing extent with a custom one, and the custom extent would receive
* all method calls before the extent fetched from
* {@link #getExtent()} would.
- *
+ *
*
* event.setExtent(new MyExtent(event.getExtent())
*
- *
+ *
*
This event is fired several times during the creation of a single
* {@link EditSession}, but {@link #getStage()} will differ each time.
* The stage determines at which point {@link Extent}s added to this event
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/parser/DefaultBlockParser.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/parser/DefaultBlockParser.java
index 460b22f10..e0027cd60 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/parser/DefaultBlockParser.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/parser/DefaultBlockParser.java
@@ -56,6 +56,7 @@ import com.sk89q.worldedit.world.block.FuzzyBlockState;
import com.sk89q.worldedit.world.registry.LegacyMapper;
import java.util.Arrays;
+import java.util.Locale;
/**
* Parses block input strings.
@@ -112,8 +113,9 @@ public class DefaultBlockParser extends InputParser {
* @param string Input string
* @return Mapped string
*/
+ @SuppressWarnings("ConstantConditions")
private String woolMapper(String string) {
- switch (string.toLowerCase()) {
+ switch (string.toLowerCase(Locale.ROOT)) {
case "white":
return BlockTypes.WHITE_WOOL.getId();
case "black":
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/parser/DefaultItemParser.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/parser/DefaultItemParser.java
index f6c396b93..56b4b18f6 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/parser/DefaultItemParser.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/parser/DefaultItemParser.java
@@ -21,13 +21,19 @@ package com.sk89q.worldedit.extension.factory.parser;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.blocks.BaseItem;
+import com.sk89q.worldedit.blocks.BaseItemStack;
+import com.sk89q.worldedit.entity.Player;
import com.sk89q.worldedit.extension.input.InputParseException;
import com.sk89q.worldedit.extension.input.ParserContext;
+import com.sk89q.worldedit.extension.platform.Actor;
import com.sk89q.worldedit.internal.registry.InputParser;
+import com.sk89q.worldedit.util.HandSide;
import com.sk89q.worldedit.world.item.ItemType;
import com.sk89q.worldedit.world.item.ItemTypes;
import com.sk89q.worldedit.world.registry.LegacyMapper;
+import java.util.Locale;
+
public class DefaultItemParser extends InputParser {
public DefaultItemParser(WorldEdit worldEdit) {
@@ -42,18 +48,22 @@ public class DefaultItemParser extends InputParser {
try {
String[] split = input.split(":");
ItemType type;
- if (split.length == 1) {
+ if (split.length == 0) {
+ throw new InputParseException("Invalid colon.");
+ } else if (split.length == 1) {
type = LegacyMapper.getInstance().getItemFromLegacy(Integer.parseInt(split[0]));
} else {
type = LegacyMapper.getInstance().getItemFromLegacy(Integer.parseInt(split[0]), Integer.parseInt(split[1]));
}
- item = new BaseItem(type);
- } catch (NumberFormatException e) {
+ if (type != null) {
+ item = new BaseItem(type);
+ }
+ } catch (NumberFormatException ignored) {
}
}
if (item == null) {
- ItemType type = ItemTypes.get(input.toLowerCase());
+ ItemType type = ItemTypes.get(input.toLowerCase(Locale.ROOT));
if (type != null) {
item = new BaseItem(type);
}
@@ -66,4 +76,11 @@ public class DefaultItemParser extends InputParser {
}
}
+ private BaseItemStack getItemInHand(Actor actor, HandSide handSide) throws InputParseException {
+ if (actor instanceof Player) {
+ return ((Player) actor).getItemInHand(handSide);
+ } else {
+ throw new InputParseException("The user is not a player!");
+ }
+ }
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/platform/PlatformManager.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/platform/PlatformManager.java
index 5894b3bed..8d03ee506 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/platform/PlatformManager.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/platform/PlatformManager.java
@@ -24,7 +24,6 @@ import com.boydti.fawe.object.FawePlayer;
import com.boydti.fawe.object.brush.visualization.VirtualWorld;
import com.boydti.fawe.object.exception.FaweException;
import com.boydti.fawe.object.pattern.PatternTraverser;
-import com.boydti.fawe.util.MainUtil;
import com.boydti.fawe.wrappers.LocationMaskedPlayerWrapper;
import com.boydti.fawe.wrappers.PlayerWrapper;
import com.boydti.fawe.wrappers.WorldWrapper;
@@ -434,7 +433,7 @@ public class PlatformManager {
} else {
actor.printError("Please report this error: [See console]");
actor.printRaw(e.getClass().getName() + ": " + e.getMessage());
- MainUtil.handleError(e);
+ e.printStackTrace();
}
}
@@ -518,7 +517,7 @@ public class PlatformManager {
} else {
player.printError("Please report this error: [See console]");
player.printRaw(e.getClass().getName() + ": " + e.getMessage());
- MainUtil.handleError(e);
+ e.printStackTrace();
}
} finally {
Request.reset();
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/InputExtent.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/InputExtent.java
index 3edcccb43..601643652 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/InputExtent.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/InputExtent.java
@@ -65,7 +65,7 @@ public interface InputExtent {
* modifiable copy is required, then the block should be cloned.
*
* This method exists because it is sometimes important to inspect the block
- * at a given location, but {@link #getBlock(Vector)} may be too expensive in
+ * at a given location, but {@link #getBlock(BlockVector3)} may be too expensive in
* the underlying implementation. It is also not possible to implement
* caching if the returned object is mutable, so this methods allows caching
* implementations to be used.
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/BlockArrayClipboard.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/BlockArrayClipboard.java
index df7d4dde4..e3646fb49 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/BlockArrayClipboard.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/BlockArrayClipboard.java
@@ -25,8 +25,9 @@ import com.boydti.fawe.object.clipboard.FaweClipboard;
import com.boydti.fawe.object.clipboard.FaweClipboard.ClipboardEntity;
import com.boydti.fawe.object.clipboard.MemoryOptimizedClipboard;
import com.boydti.fawe.object.extent.LightingExtent;
+
+import static com.google.common.base.Preconditions.checkNotNull;
import com.sk89q.jnbt.CompoundTag;
-import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.entity.BaseEntity;
import com.sk89q.worldedit.entity.Entity;
@@ -36,6 +37,7 @@ import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.world.biome.BiomeType;
+import com.sk89q.worldedit.world.biome.BiomeTypes;
import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.block.BlockStateHolder;
@@ -48,8 +50,6 @@ import java.util.Collections;
import java.util.List;
import java.util.UUID;
-import static com.google.common.base.Preconditions.checkNotNull;
-
/**
* Stores block data as a multi-dimensional array of {@link BlockState}s and
* other data as lists or maps.
@@ -58,7 +58,8 @@ public class BlockArrayClipboard implements Clipboard, LightingExtent, Closeable
private Region region;
private BlockVector3 origin;
- private BlockStateHolder[][][] blocks;
+ private BaseBlock[][][] blocks;
+ private BiomeType[][] biomes = null;
public FaweClipboard IMP;
private BlockVector3 size;
private final List entities = new ArrayList<>();
@@ -69,7 +70,7 @@ public class BlockArrayClipboard implements Clipboard, LightingExtent, Closeable
this.size = getDimensions();
this.IMP = Settings.IMP.CLIPBOARD.USE_DISK ? new DiskOptimizedClipboard(size.getBlockX(), size.getBlockY(), size.getBlockZ()) : new MemoryOptimizedClipboard(size.getBlockX(), size.getBlockY(), size.getBlockZ());
this.origin = region.getMinimumPoint();
- this.blocks = new BlockStateHolder[size.getBlockX()][size.getBlockY()][size.getBlockZ()];
+ this.blocks = new BaseBlock[size.getBlockX()][size.getBlockY()][size.getBlockZ()];
}
/**
@@ -85,7 +86,7 @@ public class BlockArrayClipboard implements Clipboard, LightingExtent, Closeable
this.size = getDimensions();
this.IMP = Settings.IMP.CLIPBOARD.USE_DISK ? new DiskOptimizedClipboard(size.getBlockX(), size.getBlockY(), size.getBlockZ(), clipboardId) : new MemoryOptimizedClipboard(size.getBlockX(), size.getBlockY(), size.getBlockZ());
this.origin = region.getMinimumPoint();
- this.blocks = new BlockStateHolder[size.getBlockX()][size.getBlockY()][size.getBlockZ()];
+ this.blocks = new BaseBlock[size.getBlockX()][size.getBlockY()][size.getBlockZ()];
}
public BlockArrayClipboard(Region region, FaweClipboard clipboard) {
@@ -94,7 +95,7 @@ public class BlockArrayClipboard implements Clipboard, LightingExtent, Closeable
this.size = getDimensions();
this.origin = region.getMinimumPoint();
this.IMP = clipboard;
- this.blocks = new BlockStateHolder[size.getBlockX()][size.getBlockY()][size.getBlockZ()];
+ this.blocks = new BaseBlock[size.getBlockX()][size.getBlockY()][size.getBlockZ()];
}
public void init(Region region, FaweClipboard fc) {
@@ -104,7 +105,7 @@ public class BlockArrayClipboard implements Clipboard, LightingExtent, Closeable
this.size = getDimensions();
this.IMP = fc;
this.origin = region.getMinimumPoint();
- this.blocks = new BlockStateHolder[size.getBlockX()][size.getBlockY()][size.getBlockZ()];
+ this.blocks = new BaseBlock[size.getBlockX()][size.getBlockY()][size.getBlockZ()];
}
@Override
@@ -157,7 +158,7 @@ public class BlockArrayClipboard implements Clipboard, LightingExtent, Closeable
public List extends Entity> getEntities(Region region) {
List filtered = new ArrayList<>();
for (Entity entity : getEntities()) {
- if (region.contains(entity.getLocation().toBlockPoint())) {
+ if (region.contains(entity.getLocation().toVector().toBlockPoint())) {
filtered.add(entity);
}
}
@@ -185,10 +186,6 @@ public class BlockArrayClipboard implements Clipboard, LightingExtent, Closeable
return BlockTypes.AIR.getDefaultState();
}
- public BlockState getBlockAbs(int x, int y, int z) {
- return IMP.getBlock(x, y, z).toImmutableState();
- }
-
@Override
public BlockState getLazyBlock(BlockVector3 position) {
return getBlock(position);
@@ -205,11 +202,11 @@ public class BlockArrayClipboard implements Clipboard, LightingExtent, Closeable
}
@Override
- public > boolean setBlock(BlockVector3 location, B block) throws WorldEditException {
- if (region.contains(location)) {
- final int x = location.getBlockX();
- final int y = location.getBlockY();
- final int z = location.getBlockZ();
+ public > boolean setBlock(BlockVector3 position, B block) throws WorldEditException {
+ if (region.contains(position)) {
+ final int x = position.getBlockX();
+ final int y = position.getBlockY();
+ final int z = position.getBlockZ();
return setBlock(x, y, z, block);
}
return false;
@@ -227,17 +224,38 @@ public class BlockArrayClipboard implements Clipboard, LightingExtent, Closeable
return IMP.setBlock(v.getX(), v.getY(), v.getZ(), block);
}
+ @Override
+ public boolean hasBiomes() {
+ return biomes != null;
+ }
+
@Override
public BiomeType getBiome(BlockVector2 position) {
- BlockVector2 v = position.subtract(region.getMinimumPoint().toBlockVector2());
- return IMP.getBiome(v.getX(), v.getZ());
+ if (biomes != null
+ && position.containedWithin(getMinimumPoint().toBlockVector2(), getMaximumPoint().toBlockVector2())) {
+ BlockVector2 v = position.subtract(region.getMinimumPoint().toBlockVector2());
+ BiomeType biomeType = biomes[v.getBlockX()][v.getBlockZ()];
+ if (biomeType != null) {
+ return IMP.getBiome(v.getX(), v.getZ());
+ //TODO Remove the line above and replace with this: return biomeType;
+ }
+ return IMP.getBiome(v.getX(), v.getZ());
+ }
+ return BiomeTypes.OCEAN;
}
@Override
public boolean setBiome(BlockVector2 position, BiomeType biome) {
- BlockVector2 v = position.subtract(region.getMinimumPoint().toBlockVector2());
- IMP.setBiome(v.getX(), v.getZ(), biome);
- return true;
+ if (position.containedWithin(getMinimumPoint().toBlockVector2(), getMaximumPoint().toBlockVector2())) {
+ BlockVector2 v = position.subtract(region.getMinimumPoint().toBlockVector2());
+ IMP.setBiome(v.getX(), v.getZ(), biome);
+ if (biomes == null) {
+ biomes = new BiomeType[region.getWidth()][region.getLength()];
+ }
+ biomes[v.getBlockX()][v.getBlockZ()] = biome;
+ return true;
+ }
+ return false;
}
@Nullable
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/Clipboard.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/Clipboard.java
index e0022d480..24e4e2a85 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/Clipboard.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/Clipboard.java
@@ -58,4 +58,15 @@ public interface Clipboard extends Extent {
*/
void setOrigin(BlockVector3 origin);
+ /**
+ * Returns true if the clipboard has biome data. This can be checked since {@link Extent#getBiome(BlockVector2)}
+ * strongly suggests returning {@link com.sk89q.worldedit.world.biome.BiomeTypes.OCEAN} instead of {@code null}
+ * if biomes aren't present. However, it might not be desired to set areas to ocean if the clipboard is defaulting
+ * to ocean, instead of having biomes explicitly set.
+ *
+ * @return true if the clipboard has biome data set
+ */
+ default boolean hasBiomes() {
+ return false;
+ }
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/function/GroundFunction.java b/worldedit-core/src/main/java/com/sk89q/worldedit/function/GroundFunction.java
index d3162ff13..9334dc843 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/function/GroundFunction.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/function/GroundFunction.java
@@ -85,6 +85,7 @@ public class GroundFunction implements LayerFunction {
if (depth == 0) {
if (function.apply(position)) {
affected++;
+ return true;
}
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/function/block/Naturalizer.java b/worldedit-core/src/main/java/com/sk89q/worldedit/function/block/Naturalizer.java
index c4c72951e..40787ac76 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/function/block/Naturalizer.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/function/block/Naturalizer.java
@@ -20,13 +20,13 @@
package com.sk89q.worldedit.function.block;
import static com.google.common.base.Preconditions.checkNotNull;
-
import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.function.LayerFunction;
import com.sk89q.worldedit.function.mask.BlockTypeMask;
import com.sk89q.worldedit.function.mask.Mask;
import com.sk89q.worldedit.math.BlockVector3;
+import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.block.BlockTypes;
/**
@@ -65,21 +65,32 @@ public class Naturalizer implements LayerFunction {
return mask.test(position);
}
+ private BlockState getTargetBlock(int depth) {
+ switch (depth) {
+ case 0:
+ return BlockTypes.GRASS_BLOCK.getDefaultState();
+ case 1:
+ case 2:
+ case 3:
+ return BlockTypes.DIRT.getDefaultState();
+ default:
+ return BlockTypes.STONE.getDefaultState();
+ }
+ }
+ private boolean naturalize(BlockVector3 position, int depth) throws WorldEditException {
+ BlockState block = editSession.getBlock(position);
+ BlockState targetBlock = getTargetBlock(depth);
+
+ if (block.equalsFuzzy(targetBlock)) {
+ return false;
+ }
+ return editSession.setBlock(position, targetBlock);
+ }
@Override
public boolean apply(BlockVector3 position, int depth) throws WorldEditException {
if (mask.test(position)) {
- affected++;
- switch (depth) {
- case 0:
- editSession.setBlock(position, BlockTypes.GRASS_BLOCK.getDefaultState());
- break;
- case 1:
- case 2:
- case 3:
- editSession.setBlock(position, BlockTypes.DIRT.getDefaultState());
- break;
- default:
- editSession.setBlock(position, BlockTypes.STONE.getDefaultState());
+ if (naturalize(position, depth)) {
+ ++affected;
}
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/NoiseFilter.java b/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/NoiseFilter.java
index ee9b6e44d..c870d4786 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/NoiseFilter.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/NoiseFilter.java
@@ -80,7 +80,7 @@ public class NoiseFilter extends AbstractMask {
*/
public void setDensity(double density) {
checkArgument(density >= 0, "density must be >= 0");
- checkArgument(density <= 1, "density must be >= 1");
+ checkArgument(density <= 1, "density must be <= 1");
this.density = density;
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/NoiseFilter2D.java b/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/NoiseFilter2D.java
index a64889f54..f7a2c992e 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/NoiseFilter2D.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/NoiseFilter2D.java
@@ -78,7 +78,7 @@ public class NoiseFilter2D extends AbstractMask2D {
*/
public void setDensity(double density) {
checkArgument(density >= 0, "density must be >= 0");
- checkArgument(density <= 1, "density must be >= 1");
+ checkArgument(density <= 1, "density must be <= 1");
this.density = density;
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/function/operation/ChangeSetExecutor.java b/worldedit-core/src/main/java/com/sk89q/worldedit/function/operation/ChangeSetExecutor.java
index 3ac000a20..dd8fa5531 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/function/operation/ChangeSetExecutor.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/function/operation/ChangeSetExecutor.java
@@ -99,7 +99,6 @@ public class ChangeSetExecutor implements Operation {
* @param context an undo context
* @return an operation
*/
- @Deprecated
public static ChangeSetExecutor createUndo(ChangeSet changeSet, UndoContext context) {
return new ChangeSetExecutor(changeSet, Type.UNDO, context, null, 0);
}
@@ -111,7 +110,6 @@ public class ChangeSetExecutor implements Operation {
* @param context an undo context
* @return an operation
*/
- @Deprecated
public static ChangeSetExecutor createRedo(ChangeSet changeSet, UndoContext context) {
return new ChangeSetExecutor(changeSet, Type.REDO, context, null, 0);
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/function/operation/ForwardExtentCopy.java b/worldedit-core/src/main/java/com/sk89q/worldedit/function/operation/ForwardExtentCopy.java
index 8836187b6..9f55f46b5 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/function/operation/ForwardExtentCopy.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/function/operation/ForwardExtentCopy.java
@@ -58,7 +58,7 @@ import java.util.stream.Collectors;
/**
* Makes a copy of a portion of one extent to another extent or another point.
- *
+ *
*
This is a forward extent copy, meaning that it iterates over the blocks
* in the source extent, and will copy as many blocks as there are in the
* source. Therefore, interpolation will not occur to fill in the gaps.
@@ -73,11 +73,11 @@ public class ForwardExtentCopy implements Operation {
private int repetitions = 1;
private Mask sourceMask = Masks.alwaysTrue();
private boolean removingEntities;
- private boolean copyingEntities = true; // default to true for backwards compatibility, sort of
private RegionFunction sourceFunction = null;
private Transform transform = new Identity();
private Transform currentTransform = null;
private int affected;
+ private boolean copyEntities = true;
private boolean copyBiomes = false;
private RegionFunction filterFunction;
@@ -119,7 +119,7 @@ public class ForwardExtentCopy implements Operation {
/**
* Get the transformation that will occur on every point.
- *
+ *
*
The transformation will stack with each repetition.
*
* @return a transformation
@@ -141,7 +141,7 @@ public class ForwardExtentCopy implements Operation {
/**
* Get the mask that gets applied to the source extent.
- *
+ *
*
This mask can be used to filter what will be copied from the source.
*
* @return a source mask
@@ -150,6 +150,24 @@ public class ForwardExtentCopy implements Operation {
return sourceMask;
}
+ /**
+ * Set whether entities should be copied along with blocks.
+ *
+ * @param copyEntities true if copying
+ */
+ public void setCopyingEntities(boolean copyEntities) {
+ this.copyEntities = copyEntities;
+ }
+
+ /**
+ * Return whether entities should be copied along with blocks.
+ *
+ * @return true if copying
+ */
+ public boolean isCopyingEntities() {
+ return copyEntities;
+ }
+
public void setCopyBiomes(boolean copyBiomes) {
this.copyBiomes = copyBiomes;
}
@@ -189,6 +207,7 @@ public class ForwardExtentCopy implements Operation {
*
* @param function a source function, or null if none is to be applied
*/
+ @Deprecated
public void setSourceFunction(RegionFunction function) {
this.sourceFunction = function;
}
@@ -212,24 +231,6 @@ public class ForwardExtentCopy implements Operation {
this.repetitions = repetitions;
}
- /**
- * Return whether entities should be copied along with blocks.
- *
- * @return true if copying
- */
- public boolean isCopyingEntities() {
- return copyingEntities;
- }
-
- /**
- * Set whether entities should be copied along with blocks.
- *
- * @param copyingEntities true if copying
- */
- public void setCopyingEntities(boolean copyingEntities) {
- this.copyingEntities = copyingEntities;
- }
-
/**
* Return whether entities that are copied should be removed.
*
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/function/pattern/ExtentPattern.java b/worldedit-core/src/main/java/com/sk89q/worldedit/function/pattern/ExtentPattern.java
index c0dec41ee..94ab5ea77 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/function/pattern/ExtentPattern.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/function/pattern/ExtentPattern.java
@@ -28,5 +28,5 @@ public interface ExtentPattern extends Pattern {
*
* @return the extent for this pattern
*/
- public Extent getExtent();
+ Extent getExtent();
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/function/pattern/RepeatingExtentPattern.java b/worldedit-core/src/main/java/com/sk89q/worldedit/function/pattern/RepeatingExtentPattern.java
index 43f2392a4..e2076c2c3 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/function/pattern/RepeatingExtentPattern.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/function/pattern/RepeatingExtentPattern.java
@@ -89,11 +89,11 @@ public class RepeatingExtentPattern extends AbstractExtentPattern {
}
@Override
- public BaseBlock apply(BlockVector3 p) {
- int x = Math.abs(p.getX() + offset.getX()) % size.getBlockX() + origin.getX();
- int y = Math.abs(p.getY() + offset.getY()) % size.getBlockY() + origin.getY();
- int z = Math.abs(p.getZ() + offset.getZ()) % size.getBlockZ() + origin.getZ();
- return getExtent().getFullBlock(mutable.setComponents(x, y, z));
+ public BaseBlock apply(BlockVector3 position) {
+ int x = Math.abs(position.getX() + offset.getX()) % size.getBlockX();
+ int y = Math.abs(position.getY() + offset.getY()) % size.getBlockY();
+ int z = Math.abs(position.getZ() + offset.getZ()) % size.getBlockZ();
+ return getExtent().getFullBlock(mutable.setComponents(x, y, z).add(origin));
}
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/function/visitor/BreadthFirstSearch.java b/worldedit-core/src/main/java/com/sk89q/worldedit/function/visitor/BreadthFirstSearch.java
index 5063b1a5f..1815a0c5f 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/function/visitor/BreadthFirstSearch.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/function/visitor/BreadthFirstSearch.java
@@ -77,7 +77,7 @@ public abstract class BreadthFirstSearch implements Operation {
}
}
list.sort((o1, o2) -> (int) Math.signum(o1.lengthSq() - o2.lengthSq()));
- DIAGONAL_DIRECTIONS = list.toArray(new BlockVector3[list.size()]);
+ DIAGONAL_DIRECTIONS = list.toArray(new BlockVector3[0]);
}
private final RegionFunction function;
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/internal/annotation/RequiresNewerGuava.java b/worldedit-core/src/main/java/com/sk89q/worldedit/internal/annotation/RequiresNewerGuava.java
deleted file mode 100644
index 749849ce8..000000000
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/internal/annotation/RequiresNewerGuava.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * WorldEdit, a Minecraft world manipulation toolkit
- * Copyright (C) sk89q
- * Copyright (C) WorldEdit team and contributors
- *
- * This program is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published by the
- * Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
- * for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see .
- */
-
-package com.sk89q.worldedit.internal.annotation;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Marks features that should be replaced with Google Guava but cannot
- * yet because Bukkit uses such an old version of Guava.
- */
-@Retention(RetentionPolicy.SOURCE)
-@Documented
-public @interface RequiresNewerGuava {
-}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/internal/expression/Expression.java b/worldedit-core/src/main/java/com/sk89q/worldedit/internal/expression/Expression.java
index 85b401c09..6e7b41a19 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/internal/expression/Expression.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/internal/expression/Expression.java
@@ -104,12 +104,12 @@ public class Expression {
}
private Expression(List tokens, String... variableNames) throws ExpressionException {
+ this.variableNames = variableNames;
variables.put("e", new Constant(-1, Math.E));
variables.put("pi", new Constant(-1, Math.PI));
variables.put("true", new Constant(-1, 1));
variables.put("false", new Constant(-1, 0));
- this.variableNames = variableNames;
variableArray = new Variable[variableNames.length];
for (int i = 0; i < variableNames.length; i++) {
String variableName = variableNames[i];
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/math/convolution/HeightMap.java b/worldedit-core/src/main/java/com/sk89q/worldedit/math/convolution/HeightMap.java
index 83399b20a..969893032 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/math/convolution/HeightMap.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/math/convolution/HeightMap.java
@@ -170,7 +170,8 @@ public class HeightMap {
int originZ = minY.getBlockZ();
int maxY = region.getMaximumPoint().getBlockY();
- BlockStateHolder fillerAir = BlockTypes.AIR.getDefaultState();
+
+ BlockState fillerAir = BlockTypes.AIR.getDefaultState();
int blocksChanged = 0;
@@ -181,14 +182,19 @@ public class HeightMap {
// Apply heightmap
for (int z = 0; z < height; ++z) {
- int zr = z + originZ;
for (int x = 0; x < width; ++x) {
int curHeight = this.data[index];
if (this.invalid != null && this.invalid[index]) continue;
+
+ //Clamp newHeight within the selection area
int newHeight = Math.min(maxY4, data[index++]);
+
int curBlock = (curHeight) >> 4;
int newBlock = (newHeight + 15) >> 4;
+
+ // Offset x,z to be 'real' coordinates
int xr = x + originX;
+ int zr = z + originZ;
// Depending on growing or shrinking we need to start at the bottom or top
if (newHeight > curHeight) {
@@ -239,6 +245,13 @@ public class HeightMap {
return blocksChanged;
}
+ /**
+ * Apply a raw heightmap to the region
+ *
+ * @param data the data
+ * @return number of blocks affected
+ * @throws MaxChangedBlocksException
+ */
public int apply(int[] data) throws MaxChangedBlocksException {
checkNotNull(data);
@@ -256,14 +269,17 @@ public class HeightMap {
// Apply heightmap
int index = 0;
for (int z = 0; z < height; ++z) {
- int zr = z + originZ;
for (int x = 0; x < width; ++x, index++) {
- int curHeight = this.data[index];
if (this.invalid != null && this.invalid[index]) continue;
+
+ int curHeight = this.data[index];
+
+ // Clamp newHeight within the selection area
int newHeight = Math.min(maxY, data[index]);
// Offset x,z to be 'real' coordinates
int xr = x + originX;
+ int zr = z + originZ;
// Depending on growing or shrinking we need to start at the bottom or top
if (newHeight > curHeight) {
@@ -279,7 +295,7 @@ public class HeightMap {
session.setBlock(xr, setY, zr, tmpBlock);
++blocksChanged;
}
- session.setBlock(xr, newHeight, zr, existing);
+ session.setBlock(BlockVector3.at(xr, newHeight, zr), existing);
++blocksChanged;
}
} else if (curHeight > newHeight) {
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/math/interpolation/KochanekBartelsInterpolation.java b/worldedit-core/src/main/java/com/sk89q/worldedit/math/interpolation/KochanekBartelsInterpolation.java
index 772e18616..d0de02102 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/math/interpolation/KochanekBartelsInterpolation.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/math/interpolation/KochanekBartelsInterpolation.java
@@ -44,7 +44,7 @@ public class KochanekBartelsInterpolation implements Interpolation {
private double scaling;
public KochanekBartelsInterpolation() {
- setNodes(Collections.emptyList());
+ setNodes(Collections.emptyList());
}
@Override
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/math/transform/AffineTransform.java b/worldedit-core/src/main/java/com/sk89q/worldedit/math/transform/AffineTransform.java
index b4810b98c..cab7688bb 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/math/transform/AffineTransform.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/math/transform/AffineTransform.java
@@ -182,19 +182,19 @@ public class AffineTransform implements Transform, Serializable {
public AffineTransform inverse() {
if (inverse != null) return inverse;
double det = this.determinant();
- return inverse = new AffineTransform(
+ return new AffineTransform(
(m11 * m22 - m21 * m12) / det,
- (m02 * m21 - m22 * m01) / det,
+ (m21 * m02 - m01 * m22) / det,
(m01 * m12 - m11 * m02) / det,
(m01 * (m22 * m13 - m12 * m23) + m02 * (m11 * m23 - m21 * m13)
- m03 * (m11 * m22 - m21 * m12)) / det,
- (m12 * m20 - m22 * m10) / det,
+ (m20 * m12 - m10 * m22) / det,
(m00 * m22 - m20 * m02) / det,
- (m02 * m10 - m12 * m00) / det,
+ (m10 * m02 - m00 * m12) / det,
(m00 * (m12 * m23 - m22 * m13) - m02 * (m10 * m23 - m20 * m13)
+ m03 * (m10 * m22 - m20 * m12)) / det,
(m10 * m21 - m20 * m11) / det,
- (m01 * m20 - m21 * m00) / det,
+ (m20 * m01 - m00 * m21) / det,
(m00 * m11 - m10 * m01) / det,
(m00 * (m21 * m13 - m11 * m23) + m01 * (m10 * m23 - m20 * m13)
- m03 * (m10 * m21 - m20 * m11)) / det);
@@ -348,9 +348,5 @@ public class AffineTransform implements Transform, Serializable {
return String.format("Affine[%g %g %g %g, %g %g %g %g, %g %g %g %g]}", m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23);
}
- private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException {
- stream.defaultReadObject();
- }
-
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/regions/CylinderRegion.java b/worldedit-core/src/main/java/com/sk89q/worldedit/regions/CylinderRegion.java
index 2a22a9669..263c2b2a1 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/regions/CylinderRegion.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/regions/CylinderRegion.java
@@ -20,10 +20,9 @@
package com.sk89q.worldedit.regions;
import static com.google.common.base.Preconditions.checkNotNull;
-
import com.sk89q.worldedit.extent.Extent;
-import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.math.BlockVector2;
+import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.math.Vector2;
import com.sk89q.worldedit.math.Vector3;
import com.sk89q.worldedit.math.geom.Polygons;
@@ -34,8 +33,6 @@ import com.sk89q.worldedit.world.World;
import java.util.Iterator;
import java.util.List;
-import static com.google.common.base.Preconditions.checkNotNull;
-
/**
* Represents a cylindrical region.
*/
@@ -206,7 +203,7 @@ public class CylinderRegion extends AbstractRegion implements FlatRegion {
@Override
public int getHeight() {
- return getMaximumY() - getMinimumY() + 1;
+ return maxY - minY + 1;
}
@Override
@@ -299,6 +296,7 @@ public class CylinderRegion extends AbstractRegion implements FlatRegion {
if (blockY < minY || blockY > maxY) {
return false;
}
+ //todo the following lines can possibly be removed and replaced with upstream
int px = position.getBlockX();
int pz = position.getBlockZ();
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/regions/shape/WorldEditExpressionEnvironment.java b/worldedit-core/src/main/java/com/sk89q/worldedit/regions/shape/WorldEditExpressionEnvironment.java
index 49a6486a4..893ea83b7 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/regions/shape/WorldEditExpressionEnvironment.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/regions/shape/WorldEditExpressionEnvironment.java
@@ -64,7 +64,7 @@ public class WorldEditExpressionEnvironment implements ExpressionEnvironment {
@Override
public int getBlockTypeAbs(double x, double y, double z) {
- return extent.getBlock(toWorld(x, y, z)).getBlockType().getLegacyCombinedId() >> 4;
+ return extent.getBlock(BlockVector3.at(x, y, z)).getBlockType().getLegacyCombinedId() >> 4;
}
@Override
@@ -74,7 +74,7 @@ public class WorldEditExpressionEnvironment implements ExpressionEnvironment {
@Override
public int getBlockTypeRel(double x, double y, double z) {
- return extent.getBlock(toWorld(x, y, z)).getBlockType().getLegacyCombinedId() >> 4;
+ return extent.getBlock(toWorldRel(x, y, z).toBlockPoint()).getBlockType().getLegacyCombinedId() >> 4;
}
@Override
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/registry/state/AbstractProperty.java b/worldedit-core/src/main/java/com/sk89q/worldedit/registry/state/AbstractProperty.java
index 3e5060d4f..7177d5410 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/registry/state/AbstractProperty.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/registry/state/AbstractProperty.java
@@ -20,17 +20,12 @@
package com.sk89q.worldedit.registry.state;
import com.boydti.fawe.util.MathMan;
-import com.sk89q.worldedit.internal.expression.runtime.Function;
-import com.sk89q.worldedit.math.MathUtils;
+
+import static com.google.common.base.Preconditions.checkState;
import com.sk89q.worldedit.world.block.BlockTypes;
import javax.annotation.Nullable;
-import java.util.Arrays;
import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import static com.google.common.base.Preconditions.checkState;
public class AbstractProperty implements Property {
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/session/SessionManager.java b/worldedit-core/src/main/java/com/sk89q/worldedit/session/SessionManager.java
index 29d02c439..b261cc9f0 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/session/SessionManager.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/session/SessionManager.java
@@ -19,6 +19,7 @@
package com.sk89q.worldedit.session;
+import static com.google.common.base.Preconditions.checkNotNull;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.ListeningExecutorService;
@@ -48,10 +49,6 @@ import java.util.Timer;
import java.util.TimerTask;
import java.util.UUID;
import java.util.concurrent.Callable;
-import java.util.concurrent.ConcurrentHashMap;
-
-
-import static com.google.common.base.Preconditions.checkNotNull;
/**
* Session manager for WorldEdit.
@@ -245,12 +242,7 @@ public class SessionManager {
* @return the key object
*/
protected UUID getKey(SessionKey key) {
-// String forcedKey = System.getProperty("worldedit.session.uuidOverride");
-// if (forcedKey != null) {
-// return UUID.fromString(forcedKey);
-// } else {
return key.getUniqueId();
-// }
}
/**
@@ -268,6 +260,7 @@ public class SessionManager {
*/
public synchronized void unload() {
clear();
+ timer.cancel();
}
/**
@@ -290,7 +283,7 @@ public class SessionManager {
if (stored.session.compareAndResetDirty()) {
// Don't save unless player disconnects
-// saveQueue.put(stored.key, stored.session);
+ // saveQueue.put(stored.key, stored.session);
}
} else {
if (now - stored.lastActive > EXPIRATION_GRACE) {
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/util/Direction.java b/worldedit-core/src/main/java/com/sk89q/worldedit/util/Direction.java
index a29b48d59..8f3c86636 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/util/Direction.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/util/Direction.java
@@ -22,13 +22,14 @@ package com.sk89q.worldedit.util;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.math.Vector3;
-import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Optional;
import java.util.OptionalInt;
+import javax.annotation.Nullable;
+
/**
* A collection of cardinal, ordinal, and secondary-ordinal directions.
*/
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/util/TargetBlock.java b/worldedit-core/src/main/java/com/sk89q/worldedit/util/TargetBlock.java
index 73a2efe88..820d813d3 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/util/TargetBlock.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/util/TargetBlock.java
@@ -38,7 +38,8 @@ import javax.annotation.Nullable;
*/
public class TargetBlock {
- private World world;
+ private final World world;
+
private int maxDistance;
private double checkDistance, curDistance;
private BlockVector3 targetPos = BlockVector3.ZERO;
@@ -121,7 +122,7 @@ public class TargetBlock {
this.checkDistance = checkDistance;
this.curDistance = 0;
xRotation = (xRotation + 90) % 360;
- yRotation = yRotation * -1;
+ yRotation *= -1;
double h = (checkDistance * Math.cos(Math.toRadians(yRotation)));
@@ -144,15 +145,15 @@ public class TargetBlock {
boolean searchForLastBlock = true;
Location lastBlock = null;
while (getNextBlock() != null) {
- if (!stopMask.test(targetPos)) {
+ if (stopMask.test(targetPos)) {
+ break;
+ } else {
if (searchForLastBlock) {
lastBlock = getCurrentBlock();
if (lastBlock.getBlockY() <= 0 || lastBlock.getBlockY() >= world.getMaxY()) {
searchForLastBlock = false;
}
}
- } else {
- break;
}
}
Location currentBlock = getCurrentBlock();
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/util/eventbus/EventBus.java b/worldedit-core/src/main/java/com/sk89q/worldedit/util/eventbus/EventBus.java
index d97c090ea..61cfb57a5 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/util/eventbus/EventBus.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/util/eventbus/EventBus.java
@@ -19,11 +19,10 @@
package com.sk89q.worldedit.util.eventbus;
+import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
-import com.google.common.collect.Multimaps;
import com.google.common.collect.SetMultimap;
-import com.google.common.eventbus.DeadEvent;
-import com.sk89q.worldedit.internal.annotation.RequiresNewerGuava;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -31,13 +30,11 @@ import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
-
-import static com.google.common.base.Preconditions.checkNotNull;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* Dispatches events to listeners, and provides ways for listeners to register
@@ -46,17 +43,15 @@ import static com.google.common.base.Preconditions.checkNotNull;
* This class is based on Guava's {@link EventBus} but priority is supported
* and events are dispatched at the time of call, rather than being queued up.
* This does allow dispatching during an in-progress dispatch.
- *
- * This implementation utilizes naive synchronization on all getter and
- * setter methods. Dispatch does not occur when a lock has been acquired,
- * however.
*/
-public class EventBus {
+public final class EventBus {
private final Logger logger = LoggerFactory.getLogger(EventBus.class);
+ private final ReadWriteLock lock = new ReentrantReadWriteLock();
+
private final SetMultimap, EventHandler> handlersByType =
- Multimaps.newSetMultimap(new HashMap<>(), this::newHandlerSet);
+ HashMultimap.create();
/**
* Strategy for finding handler methods in registered objects. Currently,
@@ -65,7 +60,6 @@ public class EventBus {
*/
private final SubscriberFindingStrategy finder = new AnnotatedSubscriberFinder();
- @RequiresNewerGuava
private HierarchyCache flattenHierarchyCache = new HierarchyCache();
/**
@@ -74,10 +68,15 @@ public class EventBus {
* @param clazz the event class to register
* @param handler the handler to register
*/
- public synchronized void subscribe(Class> clazz, EventHandler handler) {
+ public void subscribe(Class> clazz, EventHandler handler) {
checkNotNull(clazz);
checkNotNull(handler);
- handlersByType.put(clazz, handler);
+ lock.writeLock().lock();
+ try {
+ handlersByType.put(clazz, handler);
+ } finally {
+ lock.writeLock().unlock();
+ }
}
/**
@@ -85,9 +84,14 @@ public class EventBus {
*
* @param handlers a map of handlers
*/
- public synchronized void subscribeAll(Multimap, EventHandler> handlers) {
+ public void subscribeAll(Multimap, EventHandler> handlers) {
checkNotNull(handlers);
- handlersByType.putAll(handlers);
+ lock.writeLock().lock();
+ try {
+ handlersByType.putAll(handlers);
+ } finally {
+ lock.writeLock().unlock();
+ }
}
/**
@@ -96,10 +100,15 @@ public class EventBus {
* @param clazz the class
* @param handler the handler
*/
- public synchronized void unsubscribe(Class> clazz, EventHandler handler) {
+ public void unsubscribe(Class> clazz, EventHandler handler) {
checkNotNull(clazz);
checkNotNull(handler);
- handlersByType.remove(clazz, handler);
+ lock.writeLock().lock();
+ try {
+ handlersByType.remove(clazz, handler);
+ } finally {
+ lock.writeLock().unlock();
+ }
}
/**
@@ -107,15 +116,15 @@ public class EventBus {
*
* @param handlers a map of handlers
*/
- public synchronized void unsubscribeAll(Multimap, EventHandler> handlers) {
+ public void unsubscribeAll(Multimap, EventHandler> handlers) {
checkNotNull(handlers);
- for (Map.Entry, Collection> entry : handlers.asMap().entrySet()) {
- Set currentHandlers = getHandlersForEventType(entry.getKey());
- Collection eventMethodsInListener = entry.getValue();
-
- if (currentHandlers != null &&!currentHandlers.containsAll(entry.getValue())) {
- currentHandlers.removeAll(eventMethodsInListener);
+ lock.writeLock().lock();
+ try {
+ for (Map.Entry, Collection> entry : handlers.asMap().entrySet()) {
+ handlersByType.get(entry.getKey()).removeAll(entry.getValue());
}
+ } finally {
+ lock.writeLock().unlock();
}
}
@@ -146,25 +155,23 @@ public class EventBus {
* successfully after the event has been posted to all handlers, and
* regardless of any exceptions thrown by handlers.
*
- * If no handlers have been subscribed for {@code event}'s class, and
- * {@code event} is not already a {@link DeadEvent}, it will be wrapped in a
- * DeadEvent and reposted.
- *
* @param event event to post.
*/
public void post(Object event) {
List dispatching = new ArrayList<>();
- synchronized (this) {
- Set> dispatchTypes = flattenHierarchy(event.getClass());
-
+ Set> dispatchTypes = flattenHierarchyCache.get(event.getClass());
+ lock.readLock().lock();
+ try {
for (Class> eventType : dispatchTypes) {
- Set wrappers = getHandlersForEventType(eventType);
+ Set wrappers = handlersByType.get(eventType);
if (wrappers != null && !wrappers.isEmpty()) {
dispatching.addAll(wrappers);
}
}
+ } finally {
+ lock.readLock().unlock();
}
Collections.sort(dispatching);
@@ -175,14 +182,12 @@ public class EventBus {
}
/**
- * Dispatches {@code event} to the handler in {@code handler}. This method
- * is an appropriate override point for subclasses that wish to make
- * event delivery asynchronous.
+ * Dispatches {@code event} to the handler in {@code handler}.
*
* @param event event to dispatch.
* @param handler handler that will call the handler.
*/
- protected void dispatch(Object event, EventHandler handler) {
+ private void dispatch(Object event, EventHandler handler) {
try {
handler.handleEvent(event);
} catch (InvocationTargetException e) {
@@ -190,39 +195,4 @@ public class EventBus {
}
}
- /**
- * Retrieves a mutable set of the currently registered handlers for
- * {@code type}. If no handlers are currently registered for {@code type},
- * this method may either return {@code null} or an empty set.
- *
- * @param type type of handlers to retrieve.
- * @return currently registered handlers, or {@code null}.
- */
- synchronized Set getHandlersForEventType(Class> type) {
- return handlersByType.get(type);
- }
-
- /**
- * Creates a new Set for insertion into the handler map. This is provided
- * as an override point for subclasses. The returned set should support
- * concurrent access.
- *
- * @return a new, mutable set for handlers.
- */
- protected synchronized Set newHandlerSet() {
- return new HashSet<>();
- }
-
- /**
- * Flattens a class's type hierarchy into a set of Class objects. The set
- * will include all superclasses (transitively), and all interfaces
- * implemented by these superclasses.
- *
- * @param concreteClass class whose type hierarchy will be retrieved.
- * @return {@code clazz}'s complete type hierarchy, flattened and uniqued.
- */
- Set> flattenHierarchy(Class> concreteClass) {
- return flattenHierarchyCache.get(concreteClass);
- }
-
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/util/eventbus/HierarchyCache.java b/worldedit-core/src/main/java/com/sk89q/worldedit/util/eventbus/HierarchyCache.java
index 92f1cb56b..9e0a97813 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/util/eventbus/HierarchyCache.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/util/eventbus/HierarchyCache.java
@@ -19,34 +19,27 @@
package com.sk89q.worldedit.util.eventbus;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
-import com.sk89q.worldedit.internal.annotation.RequiresNewerGuava;
import java.util.Collections;
import java.util.List;
-import java.util.Map;
import java.util.Set;
-import java.util.WeakHashMap;
/**
* Holds a cache of class hierarchy.
- *
- * This exists because Bukkit has an ancient version of Guava and the cache
- * library in Guava has since changed.>
*/
-@RequiresNewerGuava
class HierarchyCache {
- private final Map, Set>> cache = new WeakHashMap<>();
+ private final LoadingCache, Set>> cache = CacheBuilder.newBuilder()
+ .weakKeys()
+ .build(CacheLoader.from(this::build));
public Set> get(Class> concreteClass) {
- Set> ret = cache.get(concreteClass);
- if (ret == null) {
- ret = build(concreteClass);
- cache.put(concreteClass, ret);
- }
- return ret;
+ return cache.getUnchecked(concreteClass);
}
protected Set> build(Class> concreteClass) {
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/util/logging/WorldEditPrefixHandler.java b/worldedit-core/src/main/java/com/sk89q/worldedit/util/logging/WorldEditPrefixHandler.java
deleted file mode 100644
index 6922987c4..000000000
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/util/logging/WorldEditPrefixHandler.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * WorldEdit, a Minecraft world manipulation toolkit
- * Copyright (C) sk89q
- * Copyright (C) WorldEdit team and contributors
- *
- * This program is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published by the
- * Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
- * for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see .
- */
-
-package com.sk89q.worldedit.util.logging;
-
-import java.util.logging.Handler;
-import java.util.logging.LogRecord;
-import java.util.logging.Logger;
-
-/**
- * Adds a WorldEdit prefix to WorldEdit's logger messages using a handler.
- */
-public final class WorldEditPrefixHandler extends Handler {
-
- private WorldEditPrefixHandler() {
- }
-
- @Override
- public void publish(LogRecord record) {
- String message = record.getMessage();
- if (!message.startsWith("WorldEdit: ") && !message.startsWith("[WorldEdit] ")) {
- record.setMessage("[WorldEdit] " + message);
- }
- }
-
- @Override
- public void flush() {
- }
-
- @Override
- public void close() throws SecurityException {
- }
-
- /**
- * Add the handler to the following logger name.
- *
- * @param name the logger name
- */
- public static void register(String name) {
- //todo fix this
- //Logger.getLogger(name).addHandler(new WorldEditPrefixHandler());
- }
-
-}