diff --git a/src/main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java b/src/main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java index 38aa9154b..18a2fe431 100644 --- a/src/main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java +++ b/src/main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java @@ -82,11 +82,12 @@ import com.sk89q.worldedit.util.TreeGenerator; public class BukkitWorld extends LocalWorld { - + private static final Logger logger = Logger.getLogger(BukkitWorld.class.getCanonicalName()); private World world; private boolean skipNmsAccess = false; private boolean skipNmsSafeSet = false; + private boolean skipNmsValidBlockCheck = false; /** * Construct the object. @@ -866,7 +867,15 @@ private boolean setContainerBlockContents(Vector pt, BaseItemStack[] contents) { */ @Override public boolean isValidBlockType(int type) { - return type <= 4095 && Material.getMaterial(type) != null; + if (!skipNmsValidBlockCheck) { + try { + return type >=0 && type < net.minecraft.server.Block.byId.length + && net.minecraft.server.Block.byId[type] != null; + } catch (Exception e) { + logger.log(Level.SEVERE, "Error checking NMS valid block type", e); + } + } + return Material.getMaterial(type) != null && Material.getMaterial(type).isBlock(); } @Override @@ -987,10 +996,10 @@ public BaseBlock getBlock(Vector pt) { } } } - + return super.getBlock(pt); } - + @Override public boolean setBlock(Vector pt, com.sk89q.worldedit.foundation.Block block, boolean notifyAdjacent) { if (!skipNmsSafeSet) { @@ -1002,7 +1011,7 @@ public boolean setBlock(Vector pt, com.sk89q.worldedit.foundation.Block block, b skipNmsSafeSet = true; } } - + return super.setBlock(pt, block, notifyAdjacent); } }