From 4c00a24c1d96ae4dc340a0b32a79c91df42ad357 Mon Sep 17 00:00:00 2001 From: Wizjany Date: Sat, 3 Sep 2011 12:54:20 -0400 Subject: [PATCH] Abstracted all block IDs to BlockID and item ids to ItemType. Overloaded recently changed methods for compatibility and cleaned a few things up. --- .../com/sk89q/worldedit/CuboidClipboard.java | 64 +- .../java/com/sk89q/worldedit/EditSession.java | 270 +++++---- .../java/com/sk89q/worldedit/HeightMap.java | 16 +- .../sk89q/worldedit/LocalConfiguration.java | 51 +- .../java/com/sk89q/worldedit/LocalPlayer.java | 17 +- .../com/sk89q/worldedit/LocalSession.java | 5 +- .../java/com/sk89q/worldedit/LocalWorld.java | 100 ++-- .../java/com/sk89q/worldedit/WorldEdit.java | 2 +- .../com/sk89q/worldedit/bags/BlockBag.java | 4 +- .../com/sk89q/worldedit/blocks/BaseBlock.java | 12 +- .../com/sk89q/worldedit/blocks/BlockID.java | 2 +- .../com/sk89q/worldedit/blocks/BlockType.java | 553 +++++++++--------- .../sk89q/worldedit/blocks/ChestBlock.java | 6 +- .../worldedit/blocks/DispenserBlock.java | 14 +- .../com/sk89q/worldedit/blocks/ItemType.java | 282 +++++---- .../worldedit/blocks/MobSpawnerBlock.java | 8 +- .../com/sk89q/worldedit/blocks/NoteBlock.java | 6 +- .../bukkit/BukkitPlayerBlockBag.java | 5 +- .../worldedit/bukkit/WorldEditPlugin.java | 2 - .../worldedit/commands/ClipboardCommands.java | 3 +- .../commands/GenerationCommands.java | 65 +- .../worldedit/commands/RegionCommands.java | 3 +- .../com/sk89q/worldedit/data/BlockData.java | 11 + .../worldedit/masks/ExistingBlockMask.java | 3 +- .../sk89q/worldedit/tools/DistanceWand.java | 4 - .../sk89q/worldedit/tools/FloodFillTool.java | 2 +- .../worldedit/tools/RecursivePickaxe.java | 2 +- .../sk89q/worldedit/tools/SinglePickaxe.java | 4 +- .../worldedit/tools/brushes/SmoothBrush.java | 4 + .../sk89q/worldedit/util/TreeGenerator.java | 5 +- 30 files changed, 873 insertions(+), 652 deletions(-) diff --git a/src/main/java/com/sk89q/worldedit/CuboidClipboard.java b/src/main/java/com/sk89q/worldedit/CuboidClipboard.java index 0f660b875..8592f5164 100644 --- a/src/main/java/com/sk89q/worldedit/CuboidClipboard.java +++ b/src/main/java/com/sk89q/worldedit/CuboidClipboard.java @@ -170,10 +170,20 @@ public class CuboidClipboard { .subtract(shiftX, 0, shiftZ); } + /** + * Flip the clipboard. + * + * @param dir direction to flip + */ + public void flip(FlipDirection dir) { + flip(dir, false); + } + /** * Flip the clipboard. * - * @param dir + * @param dir direction to flip + * @param aroundPlayer flip the offset around the player */ public void flip(FlipDirection dir, boolean aroundPlayer) { final int width = getWidth(); @@ -186,24 +196,16 @@ public class CuboidClipboard { for (int xs = 0; xs < wid; ++xs) { for (int z = 0; z < length; ++z) { for (int y = 0; y < height; ++y) { - final BaseBlock a = data[xs][y][z]; - //System.out.println(xs+"/"+y+"/"+z+": "+a.getType()); - a.flip(dir); - - if (xs == width - xs - 1) - continue; - - final BaseBlock b = data[width - xs - 1][y][z]; - b.flip(dir); - - data[xs][y][z] = b; - data[width - xs - 1][y][z] = a; + BaseBlock old = data[xs][y][z].flip(dir); + data[xs][y][z] = data[width - xs - 1][y][z].flip(dir); + data[width - xs - 1][y][z] = old; } } } - if (aroundPlayer) + if (aroundPlayer) { offset = offset.setX(1 - offset.getX() - width); + } break; @@ -212,23 +214,16 @@ public class CuboidClipboard { for (int zs = 0; zs < len; ++zs) { for (int x = 0; x < width; ++x) { for (int y = 0; y < height; ++y) { - final BaseBlock a = data[x][y][zs]; - a.flip(dir); - - if (zs == length - zs - 1) - continue; - - final BaseBlock b = data[x][y][length - zs - 1]; - b.flip(dir); - - data[x][y][zs] = b; - data[x][y][length - zs - 1] = a; + BaseBlock old = data[x][y][zs].flip(dir); + data[x][y][zs] = data[x][y][length - zs - 1].flip(dir); + data[x][y][length - zs - 1] = old; } } } - if (aroundPlayer) + if (aroundPlayer) { offset = offset.setZ(1 - offset.getZ() - length); + } break; @@ -237,23 +232,16 @@ public class CuboidClipboard { for (int ys = 0; ys < hei; ++ys) { for (int x = 0; x < width; ++x) { for (int z = 0; z < length; ++z) { - final BaseBlock a = data[x][ys][z]; - a.flip(dir); - - if (ys == height - ys - 1) - continue; - - final BaseBlock b = data[x][height - ys - 1][z]; - b.flip(dir); - - data[x][ys][z] = b; - data[x][height - ys - 1][z] = a; + BaseBlock old = data[x][ys][z].flip(dir); + data[x][ys][z] = data[x][height - ys - 1][z].flip(dir); + data[x][height - ys - 1][z] = old; } } } - if (aroundPlayer) + if (aroundPlayer) { offset = offset.setY(1 - offset.getY() - height); + } break; } diff --git a/src/main/java/com/sk89q/worldedit/EditSession.java b/src/main/java/com/sk89q/worldedit/EditSession.java index 5b485609c..d68fe0a29 100644 --- a/src/main/java/com/sk89q/worldedit/EditSession.java +++ b/src/main/java/com/sk89q/worldedit/EditSession.java @@ -18,7 +18,6 @@ */ package com.sk89q.worldedit; -import java.util.Arrays; import java.util.Map; import java.util.HashMap; import java.util.LinkedHashMap; @@ -182,7 +181,7 @@ public class EditSession { world.clearContainerBlockContents(pt); // Ice turns until water so this has to be done first } else if (existing == BlockID.ICE) { - world.setBlockType(pt, 0); + world.setBlockType(pt, BlockID.AIR); } int id = block.getType(); @@ -342,7 +341,7 @@ public class EditSession { && getBlockData(pt) == block.getData()); // Destroy torches, etc. first } else if (BlockType.shouldPlaceLast(getBlockType(pt))) { - rawSetBlock(pt, new BaseBlock(0)); + rawSetBlock(pt, new BaseBlock(BlockID.AIR)); } else { queueAfter.put(pt.toBlockVector(), block); return !(getBlockType(pt) == block.getType() @@ -504,8 +503,7 @@ public class EditSession { /** * Set the maximum number of blocks that can be changed. * - * @param maxBlocks - * -1 to disable + * @param maxBlocks -1 to disable */ public void setBlockChangeLimit(int maxBlocks) { if (maxBlocks < -1) { @@ -818,8 +816,8 @@ public class EditSession { for (int y = oY; y <= maxY; ++y) { Vector pt = new Vector(x, y, z); - if (getBlockType(pt) != 0) { - setBlock(pt, new BaseBlock(0)); + if (getBlockType(pt) != BlockID.AIR) { + setBlock(pt, new BaseBlock(BlockID.AIR)); ++affected; } } @@ -853,8 +851,8 @@ public class EditSession { for (int y = oY; y >= minY; --y) { Vector pt = new Vector(x, y, z); - if (getBlockType(pt) != 0) { - setBlock(pt, new BaseBlock(0)); + if (getBlockType(pt) != BlockID.AIR) { + setBlock(pt, new BaseBlock(BlockID.AIR)); ++affected; } } @@ -876,7 +874,7 @@ public class EditSession { public int removeNear(Vector pos, int blockType, int size) throws MaxChangedBlocksException { int affected = 0; - BaseBlock air = new BaseBlock(0); + BaseBlock air = new BaseBlock(BlockID.AIR); int minX = pos.getBlockX() - size; int maxX = pos.getBlockX() + size; @@ -1633,7 +1631,8 @@ public class EditSession { int type = getBlockType(cur); // Check block type - if (type != 8 && type != 9 && type != 10 && type != 11) { + if (type != BlockID.WATER && type != BlockID.STATIONARY_WATER + && type != BlockID.LAVA && type != BlockID.STATIONARY_LAVA) { continue; } @@ -1661,7 +1660,7 @@ public class EditSession { } } - if (setBlock(cur, new BaseBlock(0))) { + if (setBlock(cur, new BaseBlock(BlockID.AIR))) { ++affected; } } @@ -1707,7 +1706,7 @@ public class EditSession { int type = getBlockType(cur); // Check block type - if (type != moving && type != stationary && type != 0) { + if (type != moving && type != stationary && type != BlockID.AIR) { continue; } @@ -1919,6 +1918,74 @@ public class EditSession { return affected; } + /** + * Makes a sphere or ellipsoid. + * + * @param pos Center of the sphere or ellipsoid + * @param block The block pattern to use + * @param radiusX The sphere/ellipsoid's largest north/south extent + * @param radiusY The sphere/ellipsoid's largest up/down extent + * @param radiusZ The sphere/ellipsoid's largest east/west extent + * @param filled If false, only a shell will be generated. + * @return number of blocks changed + * @throws MaxChangedBlocksException + */ + public int makeSphere(Vector pos, Pattern block, double radius, boolean filled) throws MaxChangedBlocksException { + int affected = 0; + + radius += 0.5; + final double radiusSq = radius*radius; + final double radius1Sq = (radius - 1)*(radius - 1); + + final int ceilRadius = (int) Math.ceil(radius); + for (int x = 0; x <= ceilRadius; ++x) { + for (int y = 0; y <= ceilRadius; ++y) { + for (int z = 0; z <= ceilRadius; ++z) { + double dSq = lengthSq(x, y, z); + + if (dSq > radiusSq) { + continue; + } + if (!filled) { + if (dSq < radius1Sq + || (lengthSq(x + 1, y, z) <= radiusSq + && lengthSq(x, y + 1, z) <= radiusSq + && lengthSq(x, y, z + 1) <= radiusSq)) { + continue; + } + } + + if (setBlock(pos.add(x, y, z), block)) { + ++affected; + } + if (setBlock(pos.add(-x, y, z), block)) { + ++affected; + } + if (setBlock(pos.add(x, -y, z), block)) { + ++affected; + } + if (setBlock(pos.add(x, y, -z), block)) { + ++affected; + } + if (setBlock(pos.add(-x, -y, z), block)) { + ++affected; + } + if (setBlock(pos.add(x, -y, -z), block)) { + ++affected; + } + if (setBlock(pos.add(-x, y, -z), block)) { + ++affected; + } + if (setBlock(pos.add(-x, -y, -z), block)) { + ++affected; + } + } + } + } + + return affected; + } + /** * Makes a sphere or ellipsoid. * @@ -1950,31 +2017,33 @@ public class EditSession { forX: for (int x = 0; x <= ceilRadiusX; ++x) { final double xn = nextXn; - nextXn = (x+1)*invRadiusX; + nextXn = (x + 1) * invRadiusX; double nextYn = 0; forY: for (int y = 0; y <= ceilRadiusY; ++y) { final double yn = nextYn; - nextYn = (y+1)*invRadiusY; + nextYn = (y + 1) * invRadiusY; double nextZn = 0; forZ: for (int z = 0; z <= ceilRadiusZ; ++z) { final double zn = nextZn; - nextZn = (z+1)*invRadiusZ; + nextZn = (z + 1) * invRadiusZ; double distanceSq = lengthSq(xn, yn, zn); if (distanceSq > 1) { if (z == 0) { - if (y == 0) + if (y == 0) { break forX; + } break forY; } break forZ; } if (!filled) { - if (lengthSq(nextXn, yn, zn) <= 1 && lengthSq(xn, nextYn, zn) <= 1 && lengthSq(xn, yn, nextZn) <= 1) + if (lengthSq(nextXn, yn, zn) <= 1 && lengthSq(xn, nextYn, zn) <= 1 && lengthSq(xn, yn, nextZn) <= 1) { continue; + } } if (setBlock(pos.add(x, y, z), block)) { @@ -2009,7 +2078,7 @@ public class EditSession { } private static final double lengthSq(double x, double y, double z) { - return x*x + y*y + z*z; + return (x * x) + (y * y) + (z * z); } /** @@ -2121,8 +2190,8 @@ public class EditSession { int oy = pos.getBlockY(); int oz = pos.getBlockZ(); - BaseBlock ice = new BaseBlock(79); - BaseBlock snow = new BaseBlock(78); + BaseBlock ice = new BaseBlock(BlockID.ICE); + BaseBlock snow = new BaseBlock(BlockID.SNOW); int ceilRadius = (int) Math.ceil(radius); for (int x = ox - ceilRadius; x <= ox + ceilRadius; ++x) { @@ -2136,34 +2205,13 @@ public class EditSession { int id = getBlockType(pt); // Snow should not cover these blocks - if (id == 6 // Saplings - || id == 10 // Lava - || id == 11 // Lava - || id == 37 // Yellow flower - || id == 38 // Red rose - || id == 39 // Brown mushroom - || id == 40 // Red mushroom - || id == 44 // Step - || id == 50 // Torch - || id == 51 // Fire - || id == 53 // Wood steps - || id == 55 // Redstone wire - || id == 59 // Crops - || (id >= 63 && id <= 72) || id == 75 // Redstone - // torch - || id == 76 // Redstone torch - || id == 77 // Stone button - || id == 78 // Snow - || id == 79 // Ice - || id == 81 // Cactus - || id == 83 // Reed - || id == 85 // Fence - || id == 90) { // Portal + if (BlockType.canPassThrough(id) + && !(id == BlockID.WATER || id == BlockID.STATIONARY_WATER)) { break; } // Ice! - if (id == 8 || id == 9) { + if (id == BlockID.WATER || id == BlockID.STATIONARY_WATER) { if (setBlock(pt, ice)) { ++affected; } @@ -2171,7 +2219,7 @@ public class EditSession { } // Cover - if (id != 0) { + if (id != BlockID.AIR) { if (y == 127) { // Too high! break; } @@ -2188,42 +2236,6 @@ public class EditSession { return affected; } - private static final Set greenIgnoreBlockIds = new HashSet(Arrays.asList( - BlockID.AIR, - BlockID.BROWN_MUSHROOM, - BlockID.DEAD_BUSH, - BlockID.DETECTOR_RAIL, - BlockID.FENCE, - BlockID.FIRE, - BlockID.IRON_DOOR, - BlockID.LADDER, - BlockID.LEVER, - BlockID.LONG_GRASS, - BlockID.MINECART_TRACKS, - BlockID.PORTAL, - BlockID.POWERED_RAIL, - BlockID.RED_FLOWER, - BlockID.RED_MUSHROOM, - BlockID.REDSTONE_REPEATER_OFF, - BlockID.REDSTONE_REPEATER_ON, - BlockID.REDSTONE_TORCH_OFF, - BlockID.REDSTONE_TORCH_ON, - BlockID.REDSTONE_WIRE, - BlockID.REED, - BlockID.SAPLING, - BlockID.SIGN_POST, - BlockID.SNOW, - BlockID.STONE_BUTTON, - BlockID.STONE_PRESSURE_PLATE, - BlockID.TORCH, - BlockID.TRAP_DOOR, - BlockID.WALL_SIGN, - BlockID.WEB, - BlockID.WOODEN_DOOR, - BlockID.WOODEN_PRESSURE_PLATE, - BlockID.YELLOW_FLOWER - )); - /** * Green. * @@ -2254,8 +2266,9 @@ public class EditSession { Vector pt = new Vector(x, y, z); int id = getBlockType(pt); - if (greenIgnoreBlockIds.contains(id)) + if (BlockType.canPassThrough(id)) { continue; + } if (id == BlockID.DIRT) { if (setBlock(pt, grass)) { @@ -2294,8 +2307,8 @@ public class EditSession { */ private void makePumpkinPatch(Vector basePos) throws MaxChangedBlocksException { - // BaseBlock logBlock = new BaseBlock(17); - BaseBlock leavesBlock = new BaseBlock(18); + // BaseBlock logBlock = new BaseBlock(BlockID.LOG); + BaseBlock leavesBlock = new BaseBlock(BlockID.LEAVES); // setBlock(basePos.subtract(0, 1, 0), logBlock); setBlockIfAir(basePos, leavesBlock); @@ -2314,49 +2327,58 @@ public class EditSession { */ private void makePumpkinPatchVine(Vector basePos, Vector pos) throws MaxChangedBlocksException { - if (pos.distance(basePos) > 4) - return; - if (getBlockType(pos) != 0) - return; + if (pos.distance(basePos) > 4) return; + if (getBlockType(pos) != 0) return; for (int i = -1; i > -3; --i) { Vector testPos = pos.add(0, i, 0); - if (getBlockType(testPos) == 0) { + if (getBlockType(testPos) == BlockID.AIR) { pos = testPos; } else { break; } } - setBlockIfAir(pos, new BaseBlock(18)); + setBlockIfAir(pos, new BaseBlock(BlockID.LEAVES)); int t = prng.nextInt(4); int h = prng.nextInt(3) - 1; + BaseBlock log = new BaseBlock(BlockID.LOG); + BaseBlock pumpkin = new BaseBlock(BlockID.PUMPKIN); + if (t == 0) { - if (prng.nextBoolean()) + if (prng.nextBoolean()) { makePumpkinPatchVine(basePos, pos.add(1, 0, 0)); - if (prng.nextBoolean()) - setBlockIfAir(pos.add(1, h, -1), new BaseBlock(18)); - setBlockIfAir(pos.add(0, 0, -1), new BaseBlock(86)); + } + if (prng.nextBoolean()) { + setBlockIfAir(pos.add(1, h, -1), log); + } + setBlockIfAir(pos.add(0, 0, -1), pumpkin); } else if (t == 1) { - if (prng.nextBoolean()) + if (prng.nextBoolean()) { makePumpkinPatchVine(basePos, pos.add(0, 0, 1)); - if (prng.nextBoolean()) - setBlockIfAir(pos.add(1, h, 0), new BaseBlock(18)); - setBlockIfAir(pos.add(1, 0, 1), new BaseBlock(86)); + } + if (prng.nextBoolean()) { + setBlockIfAir(pos.add(1, h, 0), log); + } + setBlockIfAir(pos.add(1, 0, 1), pumpkin); } else if (t == 2) { - if (prng.nextBoolean()) + if (prng.nextBoolean()) { makePumpkinPatchVine(basePos, pos.add(0, 0, -1)); - if (prng.nextBoolean()) - setBlockIfAir(pos.add(-1, h, 0), new BaseBlock(18)); - setBlockIfAir(pos.add(-1, 0, 1), new BaseBlock(86)); + } + if (prng.nextBoolean()) { + setBlockIfAir(pos.add(-1, h, 0), log); + } + setBlockIfAir(pos.add(-1, 0, 1), pumpkin); } else if (t == 3) { - if (prng.nextBoolean()) + if (prng.nextBoolean()) { makePumpkinPatchVine(basePos, pos.add(-1, 0, 0)); - if (prng.nextBoolean()) - setBlockIfAir(pos.add(-1, h, -1), new BaseBlock(18)); - setBlockIfAir(pos.add(-1, 0, -1), new BaseBlock(86)); + } + if (prng.nextBoolean()) { + setBlockIfAir(pos.add(-1, h, -1), log); + } + setBlockIfAir(pos.add(-1, 0, -1), pumpkin); } } @@ -2377,8 +2399,9 @@ public class EditSession { for (int z = basePos.getBlockZ() - size; z <= basePos.getBlockZ() + size; ++z) { // Don't want to be in the ground - if (!getBlock(new Vector(x, basePos.getBlockY(), z)).isAir()) + if (!getBlock(new Vector(x, basePos.getBlockY(), z)).isAir()) { continue; + } // The gods don't want a pumpkin patch here if (Math.random() < 0.98) { continue; @@ -2387,11 +2410,11 @@ public class EditSession { for (int y = basePos.getBlockY(); y >= basePos.getBlockY() - 10; --y) { // Check if we hit the ground int t = getBlock(new Vector(x, y, z)).getType(); - if (t == 2 || t == 3) { + if (t == BlockID.GRASS || t == BlockID.DIRT) { makePumpkinPatch(new Vector(x, y + 1, z)); ++affected; break; - } else if (t != 0) { // Trees won't grow on this! + } else if (t != BlockID.AIR) { // Trees won't grow on this! break; } } @@ -2420,8 +2443,9 @@ public class EditSession { for (int z = basePos.getBlockZ() - size; z <= basePos.getBlockZ() + size; ++z) { // Don't want to be in the ground - if (!getBlock(new Vector(x, basePos.getBlockY(), z)).isAir()) + if (!getBlock(new Vector(x, basePos.getBlockY(), z)).isAir()) { continue; + } // The gods don't want a tree here if (Math.random() >= density) { continue; @@ -2430,11 +2454,11 @@ public class EditSession { for (int y = basePos.getBlockY(); y >= basePos.getBlockY() - 10; --y) { // Check if we hit the ground int t = getBlock(new Vector(x, y, z)).getType(); - if (t == 2 || t == 3) { + if (t == BlockID.GRASS || t == BlockID.DIRT) { treeGenerator.generate(this, new Vector(x, y + 1, z)); ++affected; break; - } else if (t != 0) { // Trees won't grow on this! + } else if (t != BlockID.AIR) { // Trees won't grow on this! break; } } @@ -2551,10 +2575,22 @@ public class EditSession { * * @param x * @param z - * @param minY - * minimal height - * @param maxY - * maximal height + * @param minY minimal height + * @param maxY maximal height + * @param naturalOnly look at natural blocks or all blocks + * @return height of highest block found or 'minY' + */ + public int getHighestTerrainBlock(int x, int z, int minY, int maxY) { + return getHighestTerrainBlock(x, z, minY, maxY, false); + } + + /** + * Returns the highest solid 'terrain' block which can occur naturally. + * + * @param x + * @param z + * @param minY minimal height + * @param maxY maximal height * @param naturalOnly look at natural blocks or all blocks * @return height of highest block found or 'minY' */ diff --git a/src/main/java/com/sk89q/worldedit/HeightMap.java b/src/main/java/com/sk89q/worldedit/HeightMap.java index 981579228..c3db61195 100644 --- a/src/main/java/com/sk89q/worldedit/HeightMap.java +++ b/src/main/java/com/sk89q/worldedit/HeightMap.java @@ -19,6 +19,7 @@ package com.sk89q.worldedit; */ import com.sk89q.worldedit.blocks.BaseBlock; +import com.sk89q.worldedit.blocks.BlockID; import com.sk89q.worldedit.filtering.HeightMapFilter; import com.sk89q.worldedit.regions.Region; @@ -43,7 +44,17 @@ public class HeightMap { * @param session * @param region */ + public HeightMap(EditSession session, Region region) { + this(session, region, false); + } + /** + * Constructs the HeightMap + * + * @param session + * @param region + * @param naturalOnly ignore non-natural blocks + */ public HeightMap(EditSession session, Region region, boolean naturalOnly) { this.session = session; this.region = region; @@ -99,7 +110,7 @@ public class HeightMap { int originZ = minY.getBlockZ(); int maxY = region.getMaximumPoint().getBlockY(); - BaseBlock fillerAir = new BaseBlock(0); + BaseBlock fillerAir = new BaseBlock(BlockID.AIR); int blocksChanged = 0; @@ -125,7 +136,8 @@ public class HeightMap { BaseBlock existing = session.getBlock(new Vector(X, curHeight, Z)); // Skip water/lava - if (existing.getType() < 8 || existing.getType() > 11) { + if (existing.getType() != BlockID.WATER && existing.getType() != BlockID.STATIONARY_WATER + && existing.getType() != BlockID.LAVA && existing.getType() != BlockID.STATIONARY_LAVA) { session.setBlock(new Vector(X, newHeight, Z), existing); ++blocksChanged; diff --git a/src/main/java/com/sk89q/worldedit/LocalConfiguration.java b/src/main/java/com/sk89q/worldedit/LocalConfiguration.java index c52d3c23e..d1b1208d0 100644 --- a/src/main/java/com/sk89q/worldedit/LocalConfiguration.java +++ b/src/main/java/com/sk89q/worldedit/LocalConfiguration.java @@ -19,6 +19,8 @@ package com.sk89q.worldedit; +import com.sk89q.worldedit.blocks.BlockID; +import com.sk89q.worldedit.blocks.ItemType; import com.sk89q.worldedit.snapshots.SnapshotRepository; import java.io.File; import java.util.HashSet; @@ -32,9 +34,48 @@ import java.util.Set; */ public abstract class LocalConfiguration { protected static final int[] defaultDisallowedBlocks = new int[] { - 6, 7, 14, 15, 16, 21, 22, 23, 24, 25, 26, 27, 28, 29, 39, 31, - 32, 33, 34, 36, 37, 38, 39, 40, 46, 50, 51, 56, 59, 69, 73, 74, - 75, 76, 77, 81, 83 + // dangerous stuff (physics/drops items) + BlockID.SAPLING, + BlockID.BED, + BlockID.POWERED_RAIL, + BlockID.DETECTOR_RAIL, + BlockID.LONG_GRASS, + BlockID.DEAD_BUSH, + BlockID.PISTON_EXTENSION, + BlockID.PISTON_MOVING_PIECE, + BlockID.YELLOW_FLOWER, + BlockID.RED_FLOWER, + BlockID.BROWN_MUSHROOM, + BlockID.RED_MUSHROOM, + BlockID.TNT, + BlockID.TORCH, + BlockID.FIRE, + BlockID.REDSTONE_WIRE, + BlockID.CROPS, + BlockID.MINECART_TRACKS, + BlockID.LEVER, + BlockID.REDSTONE_TORCH_OFF, + BlockID.REDSTONE_TORCH_ON, + BlockID.REDSTONE_REPEATER_OFF, + BlockID.REDSTONE_REPEATER_ON, + BlockID.STONE_BUTTON, + BlockID.CACTUS, + BlockID.REED, + // ores and stuff + BlockID.BEDROCK, + BlockID.GOLD_ORE, + BlockID.IRON_ORE, + BlockID.COAL_ORE, + BlockID.DIAMOND_ORE, + + // @TODO rethink what should be disallowed by default + // Gold and iron can be legitimately obtained, but were set to disallowed by + // default. Diamond and coal can't be legitimately obtained. Sponges, + // portals, snow, and locked chests also can't, but are allowed. None of + // these blocks poses any immediate threat. Most of the blocks (in the first + // section) are disallowed because people will accidentally set a huge area + // of them, triggering physics and a million item drops, lagging the server. + // Doors also have this effect, but are not disallowed. }; public boolean profile = false; @@ -48,13 +89,13 @@ public abstract class LocalConfiguration { public int maxBrushRadius = 6; public boolean logCommands = false; public boolean registerHelp = true; - public int wandItem = 271; + public int wandItem = ItemType.WOOD_AXE.getID(); public boolean superPickaxeDrop = true; public boolean superPickaxeManyDrop = true; public boolean noDoubleSlash = false; public boolean useInventory = false; public boolean useInventoryOverride = false; - public int navigationWand = 345; + public int navigationWand = ItemType.COMPASS.getID(); public int navigationWandMaxDistance = 50; public int scriptTimeout = 3000; public Set allowedDataCycleBlocks = new HashSet(); diff --git a/src/main/java/com/sk89q/worldedit/LocalPlayer.java b/src/main/java/com/sk89q/worldedit/LocalPlayer.java index 6d32bb1a7..84da5f3e5 100644 --- a/src/main/java/com/sk89q/worldedit/LocalPlayer.java +++ b/src/main/java/com/sk89q/worldedit/LocalPlayer.java @@ -21,7 +21,9 @@ package com.sk89q.worldedit; import java.io.File; import com.sk89q.worldedit.bags.BlockBag; +import com.sk89q.worldedit.blocks.BlockID; import com.sk89q.worldedit.blocks.BlockType; +import com.sk89q.worldedit.blocks.ItemType; import com.sk89q.worldedit.cui.CUIEvent; import com.sk89q.worldedit.util.TargetBlock; @@ -51,8 +53,11 @@ public abstract class LocalPlayer { */ public boolean isHoldingPickAxe() { int item = getItemInHand(); - return item == 257 || item == 270 || item == 274 || item == 278 - || item == 285; + return item == ItemType.IRON_PICK.getID() + || item == ItemType.WOOD_PICKAXE.getID() + || item == ItemType.STONE_PICKAXE.getID() + || item == ItemType.DIAMOND_PICKAXE.getID() + || item == ItemType.GOLD_PICKAXE.getID(); } /** @@ -150,7 +155,7 @@ public abstract class LocalPlayer { int type = world.getBlockType(new Vector(x, y - 2, z)); // Don't get put in lava! - if (type == 10 || type == 11) { + if (type == BlockID.LAVA || type == BlockID.STATIONARY_LAVA) { return false; } @@ -194,7 +199,7 @@ public abstract class LocalPlayer { int type = world.getBlockType(new Vector(x, y, z)); // Don't want to end up in lava - if (type != 0 && type != 10 && type != 11) { + if (type != BlockID.AIR && type != BlockID.LAVA && type != BlockID.STATIONARY_LAVA) { // Found a block! setPosition(new Vector(x + 0.5, y + 1, z + 0.5)); return true; @@ -236,7 +241,7 @@ public abstract class LocalPlayer { if (!BlockType.canPassThrough(world.getBlockType(new Vector(x, y, z)))) { int platformY = Math.max(initialY, y - 3 - clearance); world.setBlockType(new Vector(x, platformY, z), - BlockType.GLASS.getID()); + BlockID.GLASS); setPosition(new Vector(x + 0.5, platformY + 1, z + 0.5)); return true; } @@ -269,7 +274,7 @@ public abstract class LocalPlayer { break; } else if (y == maxY + 1) { world.setBlockType(new Vector(x, y - 2, z), - BlockType.GLASS.getID()); + BlockID.GLASS); setPosition(new Vector(x + 0.5, y - 1, z + 0.5)); return true; } diff --git a/src/main/java/com/sk89q/worldedit/LocalSession.java b/src/main/java/com/sk89q/worldedit/LocalSession.java index 79ae249a0..54e090153 100644 --- a/src/main/java/com/sk89q/worldedit/LocalSession.java +++ b/src/main/java/com/sk89q/worldedit/LocalSession.java @@ -34,6 +34,7 @@ import com.sk89q.worldedit.tools.SinglePickaxe; import com.sk89q.worldedit.tools.BlockTool; import com.sk89q.worldedit.tools.Tool; import com.sk89q.worldedit.bags.BlockBag; +import com.sk89q.worldedit.blocks.ItemType; import com.sk89q.worldedit.cui.CUIPointBasedRegion; import com.sk89q.worldedit.cui.CUIEvent; import com.sk89q.worldedit.cui.SelectionPointEvent; @@ -480,8 +481,10 @@ public class LocalSession { public void setTool(int item, Tool tool) throws InvalidToolBindException { if (item > 0 && item < 255) { throw new InvalidToolBindException(item, "Blocks can't be used"); - } else if (item == 263 || item == 348) { + /* } else if (item == ItemType.COAL.getID() || item == ItemType.LIGHTSTONE_DUST.getID()) { throw new InvalidToolBindException(item, "Item is not usuable"); + // let people deal with craftbook themselves, not everyone uses it + */ } else if (item == config.wandItem) { throw new InvalidToolBindException(item, "Already used for the wand"); } else if (item == config.navigationWand) { diff --git a/src/main/java/com/sk89q/worldedit/LocalWorld.java b/src/main/java/com/sk89q/worldedit/LocalWorld.java index 1e71370bf..360263260 100644 --- a/src/main/java/com/sk89q/worldedit/LocalWorld.java +++ b/src/main/java/com/sk89q/worldedit/LocalWorld.java @@ -22,6 +22,8 @@ package com.sk89q.worldedit; import java.util.Random; import com.sk89q.worldedit.blocks.BaseBlock; import com.sk89q.worldedit.blocks.BaseItemStack; +import com.sk89q.worldedit.blocks.BlockID; +import com.sk89q.worldedit.blocks.ItemType; import com.sk89q.worldedit.regions.Region; /** @@ -249,63 +251,65 @@ public abstract class LocalWorld { int type = getBlockType(pt); //setBlockType(pt, 0); - if (type == 1) { dropItem(pt, new BaseItemStack(4)); } // Stone - else if (type == 2) { dropItem(pt, new BaseItemStack(3)); } // Grass - else if (type == 7) { } // Bedrock - else if (type == 8) { } // Water - else if (type == 9) { } // Water - else if (type == 10) { } // Lava - else if (type == 11) { } // Lava - else if (type == 13) { // Gravel + if (type == BlockID.STONE) { dropItem(pt, new BaseItemStack(BlockID.COBBLESTONE)); } // Stone + else if (type == BlockID.GRASS) { dropItem(pt, new BaseItemStack(BlockID.DIRT)); } // Grass + else if (type == BlockID.BEDROCK) { } // Bedrock + else if (type == BlockID.WATER) { } // Water + else if (type == BlockID.STATIONARY_WATER) { } // Water + else if (type == BlockID.LAVA) { } // Lava + else if (type == BlockID.STATIONARY_LAVA) { } // Lava + else if (type == BlockID.GRAVEL) { // Gravel if (random.nextDouble() >= 0.9) { - dropItem(pt, new BaseItemStack(318)); + dropItem(pt, new BaseItemStack(ItemType.FLINT.getID())); } else { dropItem(pt, new BaseItemStack(type)); } } - else if (type == 16) { dropItem(pt, new BaseItemStack(263)); } // Coal ore - else if (type == 17) { dropItem(pt, new BaseItemStack(17, 1, (short)getBlockData(pt))); } // Log - else if (type == 18) { // Leaves + else if (type == BlockID.COAL_ORE) { dropItem(pt, new BaseItemStack(ItemType.COAL.getID())); } // Coal ore + else if (type == BlockID.LOG) { dropItem(pt, new BaseItemStack(type, 1, (short) getBlockData(pt))); } // Log + else if (type == BlockID.LEAVES) { // Leaves if (random.nextDouble() > 0.95) { - dropItem(pt, new BaseItemStack(6)); + dropItem(pt, new BaseItemStack(BlockID.SAPLING, 1, (short) getBlockData(pt))); } } - else if (type == 20) { } // Glass - else if (type == 21) { dropItem(pt, new BaseItemStack(351, 1, (short)4), (random.nextInt(5)+4)); } // Lapis Lazuli ore - else if (type == 26) { dropItem(pt, new BaseItemStack(355)); } // Bed - else if (type == 31) { if(random.nextInt(8) == 0) dropItem(pt, new BaseItemStack(295)); } // Tall Grass - else if (type == 34) { } // Piston Head - else if (type == 35) { dropItem(pt, new BaseItemStack(35, 1, (short)getBlockData(pt))); } // Cloth - else if (type == 43) { // Double step - dropItem(pt, new BaseItemStack(44, 1, (short)getBlockData(pt)), 2); + else if (type == BlockID.GLASS) { } // Glass + else if (type == BlockID.LAPIS_LAZULI_ORE) { + dropItem(pt, new BaseItemStack(ItemType.INK_SACK.getID(), 1, (short) 4), (random.nextInt(5) + 4)); + } // Lapis Lazuli ore + else if (type == BlockID.BED) { dropItem(pt, new BaseItemStack(ItemType.BED_ITEM.getID())); } // Bed + else if (type == BlockID.LONG_GRASS) { if (random.nextInt(8) == 0) dropItem(pt, new BaseItemStack(ItemType.SEEDS.getID())); } // Tall Grass + else if (type == BlockID.PISTON_EXTENSION) { } // Piston Head + else if (type == BlockID.CLOTH) { dropItem(pt, new BaseItemStack(type, 1, (short) getBlockData(pt))); } // Cloth + else if (type == BlockID.DOUBLE_STEP) { // Double step + dropItem(pt, new BaseItemStack(BlockID.STEP, 1, (short) getBlockData(pt)), 2); } - else if (type == 44) { dropItem(pt, new BaseItemStack(44, 1, (short)getBlockData(pt))); } // Step - else if (type == 47) { } // Bookshelves - else if (type == 51) { } // Fire - else if (type == 52) { } // Mob spawner - else if (type == 53) { dropItem(pt, new BaseItemStack(5)); } // Wooden stairs - else if (type == 55) { dropItem(pt, new BaseItemStack(331)); } // Redstone wire - else if (type == 56) { dropItem(pt, new BaseItemStack(264)); } // Diamond ore - else if (type == 59) { dropItem(pt, new BaseItemStack(295)); } // Crops - else if (type == 60) { dropItem(pt, new BaseItemStack(3)); } // Soil - else if (type == 62) { dropItem(pt, new BaseItemStack(61)); } // Furnace - else if (type == 63) { dropItem(pt, new BaseItemStack(323)); } // Sign post - else if (type == 64) { dropItem(pt, new BaseItemStack(324)); } // Wood door - else if (type == 67) { dropItem(pt, new BaseItemStack(4)); } // Cobblestone stairs - else if (type == 68) { dropItem(pt, new BaseItemStack(323)); } // Wall sign - else if (type == 71) { dropItem(pt, new BaseItemStack(330)); } // Iron door - else if (type == 73) { dropItem(pt, new BaseItemStack(331), (random.nextInt(2)+4)); } // Redstone ore - else if (type == 74) { dropItem(pt, new BaseItemStack(331), (random.nextInt(2)+4)); } // Glowing redstone ore - else if (type == 75) { dropItem(pt, new BaseItemStack(76)); } // Redstone torch - else if (type == 78) { } // Snow - else if (type == 79) { } // Ice - else if (type == 82) { dropItem(pt, new BaseItemStack(337), 4); } // Clay - else if (type == 83) { dropItem(pt, new BaseItemStack(338)); } // Reed - else if (type == 89) { dropItem(pt, new BaseItemStack(348), (random.nextInt(3)+2)); } // Lightstone - else if (type == 90) { } // Portal - else if (type == 93) { dropItem(pt, new BaseItemStack(356)); } // Repeater - else if (type == 94) { dropItem(pt, new BaseItemStack(356)); } // Repeater - else if (type != 0) { + else if (type == BlockID.STEP) { dropItem(pt, new BaseItemStack(type, 1, (short) getBlockData(pt))); } // Step + else if (type == BlockID.BOOKCASE) { } // Bookshelves + else if (type == BlockID.FIRE) { } // Fire + else if (type == BlockID.MOB_SPAWNER) { } // Mob spawner + else if (type == BlockID.WOODEN_STAIRS) { dropItem(pt, new BaseItemStack(BlockID.WOOD)); } // Wooden stairs + else if (type == BlockID.REDSTONE_WIRE) { dropItem(pt, new BaseItemStack(ItemType.REDSTONE_DUST.getID())); } // Redstone wire + else if (type == BlockID.DIAMOND_ORE) { dropItem(pt, new BaseItemStack(ItemType.DIAMOND.getID())); } // Diamond ore + else if (type == BlockID.CROPS) { dropItem(pt, new BaseItemStack(ItemType.SEEDS.getID())); } // Crops + else if (type == BlockID.SOIL) { dropItem(pt, new BaseItemStack(BlockID.DIRT)); } // Soil + else if (type == BlockID.BURNING_FURNACE) { dropItem(pt, new BaseItemStack(BlockID.FURNACE)); } // Furnace + else if (type == BlockID.SIGN_POST) { dropItem(pt, new BaseItemStack(ItemType.SIGN.getID())); } // Sign post + else if (type == BlockID.WOODEN_DOOR) { dropItem(pt, new BaseItemStack(ItemType.WOODEN_DOOR_ITEM.getID())); } // Wood door + else if (type == BlockID.COBBLESTONE_STAIRS) { dropItem(pt, new BaseItemStack(BlockID.COBBLESTONE)); } // Cobblestone stairs + else if (type == BlockID.WALL_SIGN) { dropItem(pt, new BaseItemStack(ItemType.SIGN.getID())); } // Wall sign + else if (type == BlockID.IRON_DOOR) { dropItem(pt, new BaseItemStack(ItemType.IRON_DOOR_ITEM.getID())); } // Iron door + else if (type == BlockID.REDSTONE_ORE) { dropItem(pt, new BaseItemStack(ItemType.REDSTONE_DUST.getID()), (random.nextInt(2) + 4)); } // Redstone ore + else if (type == BlockID.GLOWING_REDSTONE_ORE) { dropItem(pt, new BaseItemStack(ItemType.REDSTONE_DUST.getID()), (random.nextInt(2) + 4)); } // Glowing redstone ore + else if (type == BlockID.REDSTONE_TORCH_OFF) { dropItem(pt, new BaseItemStack(BlockID.REDSTONE_TORCH_ON)); } // Redstone torch + else if (type == BlockID.SNOW) { } // Snow + else if (type == BlockID.ICE) { } // Ice + else if (type == BlockID.CLAY) { dropItem(pt, new BaseItemStack(ItemType.CLAY_BALL.getID()), 4); } // Clay + else if (type == BlockID.REED) { dropItem(pt, new BaseItemStack(ItemType.SUGAR_CANE_ITEM.getID())); } // Reed + else if (type == BlockID.LIGHTSTONE) { dropItem(pt, new BaseItemStack(ItemType.LIGHTSTONE_DUST.getID()), (random.nextInt(3) + 2)); } // Lightstone + else if (type == BlockID.PORTAL) { } // Portal + else if (type == BlockID.REDSTONE_REPEATER_OFF) { dropItem(pt, new BaseItemStack(ItemType.REDSTONE_REPEATER.getID())); } // Repeater + else if (type == BlockID.REDSTONE_REPEATER_ON) { dropItem(pt, new BaseItemStack(ItemType.REDSTONE_REPEATER.getID())); } // Repeater + else if (type != BlockID.AIR) { dropItem(pt, new BaseItemStack(type)); } } diff --git a/src/main/java/com/sk89q/worldedit/WorldEdit.java b/src/main/java/com/sk89q/worldedit/WorldEdit.java index 1a27869d4..94d28bb4b 100644 --- a/src/main/java/com/sk89q/worldedit/WorldEdit.java +++ b/src/main/java/com/sk89q/worldedit/WorldEdit.java @@ -288,7 +288,7 @@ public class WorldEdit { ClothColor col = ClothColor.lookup(testID); if (col != null) { - blockType = BlockType.fromID(35); + blockType = BlockType.CLOTH; data = col.getID(); } else { throw new UnknownItemException(arg); diff --git a/src/main/java/com/sk89q/worldedit/bags/BlockBag.java b/src/main/java/com/sk89q/worldedit/bags/BlockBag.java index 69c460047..e0e2dd98e 100644 --- a/src/main/java/com/sk89q/worldedit/bags/BlockBag.java +++ b/src/main/java/com/sk89q/worldedit/bags/BlockBag.java @@ -85,7 +85,7 @@ public abstract class BlockBag { fetchBlock(BlockID.DIRT); // Look for redstone dust } else if (id == BlockID.REDSTONE_WIRE) { - fetchBlock(331); + fetchBlock(ItemType.REDSTONE_DUST.getID()); // Look for furnace } else if (id == BlockID.BURNING_FURNACE) { fetchBlock(BlockID.FURNACE); @@ -94,7 +94,7 @@ public abstract class BlockBag { fetchBlock(BlockID.REDSTONE_TORCH_ON); // Look for signs } else if (id == BlockID.WALL_SIGN || id == BlockID.SIGN_POST) { - fetchBlock(323); + fetchBlock(ItemType.SIGN.getID()); } else { throw e; } diff --git a/src/main/java/com/sk89q/worldedit/blocks/BaseBlock.java b/src/main/java/com/sk89q/worldedit/blocks/BaseBlock.java index 9266cd383..e8dfded05 100644 --- a/src/main/java/com/sk89q/worldedit/blocks/BaseBlock.java +++ b/src/main/java/com/sk89q/worldedit/blocks/BaseBlock.java @@ -108,12 +108,20 @@ public class BaseBlock { data = (byte)BlockData.rotate90Reverse(type, data); } + /** + * Flip this block. + */ + public BaseBlock flip() { + data = (byte) BlockData.flip(type, data); + return this; + } /** * Flip this block. * @param direction */ - public void flip(FlipDirection direction) { - data = (byte)BlockData.flip(type, data, direction); + public BaseBlock flip(FlipDirection direction) { + data = (byte) BlockData.flip(type, data, direction); + return this; } @Override diff --git a/src/main/java/com/sk89q/worldedit/blocks/BlockID.java b/src/main/java/com/sk89q/worldedit/blocks/BlockID.java index ff65f2d7a..446e1e863 100644 --- a/src/main/java/com/sk89q/worldedit/blocks/BlockID.java +++ b/src/main/java/com/sk89q/worldedit/blocks/BlockID.java @@ -24,7 +24,7 @@ package com.sk89q.worldedit.blocks; * * @author sk89q */ -public final class BlockID { +public final class BlockID { public static final int AIR = 0; public static final int STONE = 1; public static final int GRASS = 2; diff --git a/src/main/java/com/sk89q/worldedit/blocks/BlockType.java b/src/main/java/com/sk89q/worldedit/blocks/BlockType.java index d234394c0..7b3bd41e2 100644 --- a/src/main/java/com/sk89q/worldedit/blocks/BlockType.java +++ b/src/main/java/com/sk89q/worldedit/blocks/BlockType.java @@ -31,103 +31,103 @@ import com.sk89q.util.StringUtil; * @author sk89q */ public enum BlockType { - AIR(0, "Air", "air"), - STONE(1, "Stone", "stone", "rock"), - GRASS(2, "Grass", "grass"), - DIRT(3, "Dirt", "dirt"), - COBBLESTONE(4, "Cobblestone", "cobblestone", "cobble"), - WOOD(5, "Wood", "wood", "woodplank", "plank", "woodplanks", "planks"), - SAPLING(6, "Sapling", "sapling", "seedling"), - BEDROCK(7, "Bedrock", "adminium", "bedrock"), - WATER(8, "Water", "watermoving", "movingwater", "flowingwater", "waterflowing"), - STATIONARY_WATER(9, "Water (stationary)", "water", "waterstationary", "stationarywater", "stillwater"), - LAVA(10, "Lava", "lavamoving", "movinglava", "flowinglava", "lavaflowing"), - STATIONARY_LAVA(11, "Lava (stationary)", "lava", "lavastationary", "stationarylava", "stilllava"), - SAND(12, "Sand", "sand"), - GRAVEL(13, "Gravel", "gravel"), - GOLD_ORE(14, "Gold ore", "goldore"), - IRON_ORE(15, "Iron ore", "ironore"), - COAL_ORE(16, "Coal ore", "coalore"), - LOG(17, "Log", "log", "tree", "pine", "oak", "birch", "redwood"), - LEAVES(18, "Leaves", "leaves", "leaf"), - SPONGE(19, "Sponge", "sponge"), - GLASS(20, "Glass", "glass"), - LAPIS_LAZULI_ORE(21, "Lapis lazuli ore", "lapislazuliore", "blueore", "lapisore"), - LAPIS_LAZULI(22, "Lapis lazuli", "lapislazuli", "lapislazuliblock", "bluerock"), - DISPENSER(23, "Dispenser", "dispenser"), - SANDSTONE(24, "Sandstone", "sandstone"), - NOTE_BLOCK(25, "Note block", "musicblock", "noteblock", "note", "music", "instrument"), - BED(26, "Bed", "bed"), - POWERED_RAIL(27, "Powered Rail", "poweredrail", "boosterrail", "poweredtrack", "boostertrack", "booster"), - DETECTOR_RAIL(28, "Detector Rail", "detectorrail", "detector"), - PISTON_STICKY_BASE(29, "Sticky Piston", "stickypiston"), - WEB(30, "Web", "web", "spiderweb"), - LONG_GRASS(31, "Long grass", "longgrass", "tallgrass"), - DEAD_BUSH(32, "Shrub", "deadbush", "shrub", "deadshrub", "tumbleweed"), - PISTON_BASE(33, "Piston", "piston"), - PISTON_EXTENSION(34, "Piston extension", "pistonextendsion", "pistonhead"), - CLOTH(35, "Wool", "cloth", "wool"), - PISTON_MOVING_PIECE(36, "Piston moving piece", "movingpiston"), - YELLOW_FLOWER(37, "Yellow flower", "yellowflower", "flower"), - RED_FLOWER(38, "Red rose", "redflower", "redrose", "rose"), - BROWN_MUSHROOM(39, "Brown mushroom", "brownmushroom", "mushroom"), - RED_MUSHROOM(40, "Red mushroom", "redmushroom"), - GOLD_BLOCK(41, "Gold block", "gold", "goldblock"), - IRON_BLOCK(42, "Iron block", "iron", "ironblock"), - DOUBLE_STEP(43, "Double step", "doubleslab", "doublestoneslab", "doublestep"), - STEP(44, "Step", "slab", "stoneslab", "step", "halfstep"), - BRICK(45, "Brick", "brick", "brickblock"), - TNT(46, "TNT", "tnt", "c4", "explosive"), - BOOKCASE(47, "Bookcase", "bookshelf", "bookshelves", "bookcase", "bookcases"), - MOSSY_COBBLESTONE(48, "Cobblestone (mossy)", "mossycobblestone", "mossstone", "mossystone", "mosscobble", "mossycobble", "moss", "mossy", "sossymobblecone"), - OBSIDIAN(49, "Obsidian", "obsidian"), - TORCH(50, "Torch", "torch", "light", "candle"), - FIRE(51, "Fire", "fire", "flame", "flames"), - MOB_SPAWNER(52, "Mob spawner", "mobspawner", "spawner"), - WOODEN_STAIRS(53, "Wooden stairs", "woodstair", "woodstairs", "woodenstair", "woodenstairs"), - CHEST(54, "Chest", "chest", "storage", "storagechest"), - REDSTONE_WIRE(55, "Redstone wire", "redstone", "redstoneblock"), - DIAMOND_ORE(56, "Diamond ore", "diamondore"), - DIAMOND_BLOCK(57, "Diamond block", "diamond", "diamondblock"), - WORKBENCH(58, "Workbench", "workbench", "table", "craftingtable", "crafting"), - CROPS(59, "Crops", "crops", "crop", "plant", "plants"), - SOIL(60, "Soil", "soil", "farmland"), - FURNACE(61, "Furnace", "furnace"), - BURNING_FURNACE(62, "Furnace (burning)", "burningfurnace", "litfurnace"), - SIGN_POST(63, "Sign post", "sign", "signpost"), - WOODEN_DOOR(64, "Wooden door", "wooddoor", "woodendoor", "door"), - LADDER(65, "Ladder", "ladder"), - MINECART_TRACKS(66, "Minecart tracks", "track", "tracks", "minecrattrack", "minecarttracks", "rails", "rail"), - COBBLESTONE_STAIRS(67, "Cobblestone stairs", "cobblestonestair", "cobblestonestairs", "cobblestair", "cobblestairs"), - WALL_SIGN(68, "Wall sign", "wallsign"), - LEVER(69, "Lever", "lever", "switch", "stonelever", "stoneswitch"), - STONE_PRESSURE_PLATE(70, "Stone pressure plate", "stonepressureplate", "stoneplate"), - IRON_DOOR(71, "Iron Door", "irondoor"), - WOODEN_PRESSURE_PLATE(72, "Wooden pressure plate", "woodpressureplate", "woodplate", "woodenpressureplate", "woodenplate", "plate", "pressureplate"), - REDSTONE_ORE(73, "Redstone ore", "redstoneore"), - GLOWING_REDSTONE_ORE(74, "Glowing redstone ore", "glowingredstoneore"), - REDSTONE_TORCH_OFF(75, "Redstone torch (off)", "redstonetorchoff", "rstorchoff"), - REDSTONE_TORCH_ON(76, "Redstone torch (on)", "redstonetorch", "redstonetorchon", "rstorchon", "redtorch"), - STONE_BUTTON(77, "Stone Button", "stonebutton", "button"), - SNOW(78, "Snow", "snow"), - ICE(79, "Ice", "ice"), - SNOW_BLOCK(80, "Snow block", "snowblock"), - CACTUS(81, "Cactus", "cactus", "cacti"), - CLAY(82, "Clay", "clay"), - SUGAR_CANE(83, "Reed", "reed", "cane", "sugarcane", "sugarcanes", "vine", "vines"), - JUKEBOX(84, "Jukebox", "jukebox", "stereo", "recordplayer"), - FENCE(85, "Fence", "fence"), - PUMPKIN(86, "Pumpkin", "pumpkin"), - NETHERRACK(87, "Netherrack", "redmossycobblestone", "redcobblestone", "redmosstone", "redcobble", "netherstone", "netherrack", "nether", "hellstone"), - SOUL_SAND(88, "Soul sand", "slowmud", "mud", "soulsand", "hellmud"), - GLOWSTONE(89, "Glowstone", "brittlegold", "glowstone", "lightstone", "brimstone", "australium"), - PORTAL(90, "Portal", "portal"), - JACK_O_LANTERN(91, "Pumpkin (on)", "pumpkinlighted", "pumpkinon", "litpumpkin", "jackolantern"), - CAKE(92, "Cake", "cake", "cakeblock"), - REDSTONE_REPEATER_OFF(93, "Redstone repeater (off)", "diodeoff", "redstonerepeater", "repeater", "delayer"), - REDSTONE_REPEATER_ON(94, "Redstone repeater (on)", "diode", "diodeon", "redstonerepeateron", "repeateron", "delayeron"), - LOCKED_CHEST(95, "Locked chest", "lockedchest", "steveco", "supplycrate", "valveneedstoworkonep3nottf2kthx"), - TRAP_DOOR(96, "Trap door", "trapdoor", "hatch", "floordoor"); + AIR(BlockID.AIR, "Air", "air"), + STONE(BlockID.STONE, "Stone", "stone", "rock"), + GRASS(BlockID.GRASS, "Grass", "grass"), + DIRT(BlockID.DIRT, "Dirt", "dirt"), + COBBLESTONE(BlockID.COBBLESTONE, "Cobblestone", "cobblestone", "cobble"), + WOOD(BlockID.WOOD, "Wood", "wood", "woodplank", "plank", "woodplanks", "planks"), + SAPLING(BlockID.SAPLING, "Sapling", "sapling", "seedling"), + BEDROCK(BlockID.BEDROCK, "Bedrock", "adminium", "bedrock"), + WATER(BlockID.WATER, "Water", "watermoving", "movingwater", "flowingwater", "waterflowing"), + STATIONARY_WATER(BlockID.STATIONARY_WATER, "Water (stationary)", "water", "waterstationary", "stationarywater", "stillwater"), + LAVA(BlockID.LAVA, "Lava", "lavamoving", "movinglava", "flowinglava", "lavaflowing"), + STATIONARY_LAVA(BlockID.STATIONARY_LAVA, "Lava (stationary)", "lava", "lavastationary", "stationarylava", "stilllava"), + SAND(BlockID.SAND, "Sand", "sand"), + GRAVEL(BlockID.GRAVEL, "Gravel", "gravel"), + GOLD_ORE(BlockID.GOLD_ORE, "Gold ore", "goldore"), + IRON_ORE(BlockID.IRON_ORE, "Iron ore", "ironore"), + COAL_ORE(BlockID.COAL_ORE, "Coal ore", "coalore"), + LOG(BlockID.LOG, "Log", "log", "tree", "pine", "oak", "birch", "redwood"), + LEAVES(BlockID.LEAVES, "Leaves", "leaves", "leaf"), + SPONGE(BlockID.SPONGE, "Sponge", "sponge"), + GLASS(BlockID.GLASS, "Glass", "glass"), + LAPIS_LAZULI_ORE(BlockID.LAPIS_LAZULI_ORE, "Lapis lazuli ore", "lapislazuliore", "blueore", "lapisore"), + LAPIS_LAZULI(BlockID.LAPIS_LAZULI_BLOCK, "Lapis lazuli", "lapislazuli", "lapislazuliblock", "bluerock"), + DISPENSER(BlockID.DISPENSER, "Dispenser", "dispenser"), + SANDSTONE(BlockID.SANDSTONE, "Sandstone", "sandstone"), + NOTE_BLOCK(BlockID.NOTE_BLOCK, "Note block", "musicblock", "noteblock", "note", "music", "instrument"), + BED(BlockID.BED, "Bed", "bed"), + POWERED_RAIL(BlockID.POWERED_RAIL, "Powered Rail", "poweredrail", "boosterrail", "poweredtrack", "boostertrack", "booster"), + DETECTOR_RAIL(BlockID.DETECTOR_RAIL, "Detector Rail", "detectorrail", "detector"), + PISTON_STICKY_BASE(BlockID.PISTON_STICKY_BASE, "Sticky Piston", "stickypiston"), + WEB(BlockID.WEB, "Web", "web", "spiderweb"), + LONG_GRASS(BlockID.LONG_GRASS, "Long grass", "longgrass", "tallgrass"), + DEAD_BUSH(BlockID.DEAD_BUSH, "Shrub", "deadbush", "shrub", "deadshrub", "tumbleweed"), + PISTON_BASE(BlockID.PISTON_BASE, "Piston", "piston"), + PISTON_EXTENSION(BlockID.PISTON_EXTENSION, "Piston extension", "pistonextendsion", "pistonhead"), + CLOTH(BlockID.CLOTH, "Wool", "cloth", "wool"), + PISTON_MOVING_PIECE(BlockID.PISTON_MOVING_PIECE, "Piston moving piece", "movingpiston"), + YELLOW_FLOWER(BlockID.YELLOW_FLOWER, "Yellow flower", "yellowflower", "flower"), + RED_FLOWER(BlockID.RED_FLOWER, "Red rose", "redflower", "redrose", "rose"), + BROWN_MUSHROOM(BlockID.BROWN_MUSHROOM, "Brown mushroom", "brownmushroom", "mushroom"), + RED_MUSHROOM(BlockID.RED_MUSHROOM, "Red mushroom", "redmushroom"), + GOLD_BLOCK(BlockID.GOLD_BLOCK, "Gold block", "gold", "goldblock"), + IRON_BLOCK(BlockID.IRON_BLOCK, "Iron block", "iron", "ironblock"), + DOUBLE_STEP(BlockID.DOUBLE_STEP, "Double step", "doubleslab", "doublestoneslab", "doublestep"), + STEP(BlockID.STEP, "Step", "slab", "stoneslab", "step", "halfstep"), + BRICK(BlockID.BRICK, "Brick", "brick", "brickblock"), + TNT(BlockID.TNT, "TNT", "tnt", "c4", "explosive"), + BOOKCASE(BlockID.BOOKCASE, "Bookcase", "bookshelf", "bookshelves", "bookcase", "bookcases"), + MOSSY_COBBLESTONE(BlockID.MOSSY_COBBLESTONE, "Cobblestone (mossy)", "mossycobblestone", "mossstone", "mossystone", "mosscobble", "mossycobble", "moss", "mossy", "sossymobblecone"), + OBSIDIAN(BlockID.OBSIDIAN, "Obsidian", "obsidian"), + TORCH(BlockID.TORCH, "Torch", "torch", "light", "candle"), + FIRE(BlockID.FIRE, "Fire", "fire", "flame", "flames"), + MOB_SPAWNER(BlockID.MOB_SPAWNER, "Mob spawner", "mobspawner", "spawner"), + WOODEN_STAIRS(BlockID.WOODEN_STAIRS, "Wooden stairs", "woodstair", "woodstairs", "woodenstair", "woodenstairs"), + CHEST(BlockID.CHEST, "Chest", "chest", "storage", "storagechest"), + REDSTONE_WIRE(BlockID.REDSTONE_WIRE, "Redstone wire", "redstone", "redstoneblock"), + DIAMOND_ORE(BlockID.DIAMOND_ORE, "Diamond ore", "diamondore"), + DIAMOND_BLOCK(BlockID.DIAMOND_BLOCK, "Diamond block", "diamond", "diamondblock"), + WORKBENCH(BlockID.WORKBENCH, "Workbench", "workbench", "table", "craftingtable", "crafting"), + CROPS(BlockID.CROPS, "Crops", "crops", "crop", "plant", "plants"), + SOIL(BlockID.SOIL, "Soil", "soil", "farmland"), + FURNACE(BlockID.FURNACE, "Furnace", "furnace"), + BURNING_FURNACE(BlockID.BURNING_FURNACE, "Furnace (burning)", "burningfurnace", "litfurnace"), + SIGN_POST(BlockID.SIGN_POST, "Sign post", "sign", "signpost"), + WOODEN_DOOR(BlockID.WOODEN_DOOR, "Wooden door", "wooddoor", "woodendoor", "door"), + LADDER(BlockID.LADDER, "Ladder", "ladder"), + MINECART_TRACKS(BlockID.MINECART_TRACKS, "Minecart tracks", "track", "tracks", "minecrattrack", "minecarttracks", "rails", "rail"), + COBBLESTONE_STAIRS(BlockID.COBBLESTONE_STAIRS, "Cobblestone stairs", "cobblestonestair", "cobblestonestairs", "cobblestair", "cobblestairs"), + WALL_SIGN(BlockID.WALL_SIGN, "Wall sign", "wallsign"), + LEVER(BlockID.LEVER, "Lever", "lever", "switch", "stonelever", "stoneswitch"), + STONE_PRESSURE_PLATE(BlockID.STONE_PRESSURE_PLATE, "Stone pressure plate", "stonepressureplate", "stoneplate"), + IRON_DOOR(BlockID.IRON_DOOR, "Iron Door", "irondoor"), + WOODEN_PRESSURE_PLATE(BlockID.WOODEN_PRESSURE_PLATE, "Wooden pressure plate", "woodpressureplate", "woodplate", "woodenpressureplate", "woodenplate", "plate", "pressureplate"), + REDSTONE_ORE(BlockID.REDSTONE_ORE, "Redstone ore", "redstoneore"), + GLOWING_REDSTONE_ORE(BlockID.GLOWING_REDSTONE_ORE, "Glowing redstone ore", "glowingredstoneore"), + REDSTONE_TORCH_OFF(BlockID.REDSTONE_TORCH_OFF, "Redstone torch (off)", "redstonetorchoff", "rstorchoff"), + REDSTONE_TORCH_ON(BlockID.REDSTONE_TORCH_ON, "Redstone torch (on)", "redstonetorch", "redstonetorchon", "rstorchon", "redtorch"), + STONE_BUTTON(BlockID.STONE_BUTTON, "Stone Button", "stonebutton", "button"), + SNOW(BlockID.SNOW, "Snow", "snow"), + ICE(BlockID.ICE, "Ice", "ice"), + SNOW_BLOCK(BlockID.SNOW_BLOCK, "Snow block", "snowblock"), + CACTUS(BlockID.CACTUS, "Cactus", "cactus", "cacti"), + CLAY(BlockID.CLAY, "Clay", "clay"), + SUGAR_CANE(BlockID.REED, "Reed", "reed", "cane", "sugarcane", "sugarcanes", "vine", "vines"), + JUKEBOX(BlockID.JUKEBOX, "Jukebox", "jukebox", "stereo", "recordplayer"), + FENCE(BlockID.FENCE, "Fence", "fence"), + PUMPKIN(BlockID.PUMPKIN, "Pumpkin", "pumpkin"), + NETHERRACK(BlockID.NETHERRACK, "Netherrack", "redmossycobblestone", "redcobblestone", "redmosstone", "redcobble", "netherstone", "netherrack", "nether", "hellstone"), + SOUL_SAND(BlockID.SLOW_SAND, "Soul sand", "slowmud", "mud", "soulsand", "hellmud"), + GLOWSTONE(BlockID.LIGHTSTONE, "Glowstone", "brittlegold", "glowstone", "lightstone", "brimstone", "australium"), + PORTAL(BlockID.PORTAL, "Portal", "portal"), + JACK_O_LANTERN(BlockID.JACKOLANTERN, "Pumpkin (on)", "pumpkinlighted", "pumpkinon", "litpumpkin", "jackolantern"), + CAKE(BlockID.CAKE_BLOCK, "Cake", "cake", "cakeblock"), + REDSTONE_REPEATER_OFF(BlockID.REDSTONE_REPEATER_OFF, "Redstone repeater (off)", "diodeoff", "redstonerepeater", "repeateroff", "delayeroff"), + REDSTONE_REPEATER_ON(BlockID.REDSTONE_REPEATER_ON, "Redstone repeater (on)", "diodeon", "redstonerepeateron", "repeateron", "delayeron"), + LOCKED_CHEST(BlockID.LOCKED_CHEST, "Locked chest", "lockedchest", "steveco", "supplycrate", "valveneedstoworkonep3nottf2kthx"), + TRAP_DOOR(BlockID.TRAP_DOOR, "Trap door", "trapdoor", "hatch", "floordoor"); /** * Stores a list of dropped blocks for blocks. @@ -362,40 +362,40 @@ public enum BlockType { * @return */ public static boolean shouldPlaceLast(int id) { - return id == 6 // Saplings - || id == 26 // Beds - || id == 27 // Powered rails - || id == 28 // Detector rails - || id == 31 // Long grass - || id == 32 // Shrub - || id == 37 // Yellow flower - || id == 38 // Red flower - || id == 39 // Brown mushroom - || id == 40 // Red mush room - || id == 50 // Torch - || id == 51 // Fire - || id == 55 // Redstone wire - || id == 59 // Crops - || id == 63 // Sign post - || id == 64 // Wooden door - || id == 65 // Ladder - || id == 66 // Minecart tracks - || id == 68 // Wall sign - || id == 69 // Lever - || id == 70 // Stone pressure plate - || id == 71 // Iron door - || id == 72 // Wooden pressure plate - || id == 75 // Redstone torch (off) - || id == 76 // Redstone torch (on) - || id == 77 // Stone button - || id == 78 // Snow - || id == 81 // Cactus - || id == 83 // Reed - || id == 90 // Portal - || id == 92 // Cake - || id == 93 // Repeater (off) - || id == 94 // Repeater (on) - || id == 96; // Trap door + return id == BlockID.SAPLING + || id == BlockID.BED + || id == BlockID.POWERED_RAIL + || id == BlockID.DETECTOR_RAIL + || id == BlockID.LONG_GRASS + || id == BlockID.DEAD_BUSH + || id == BlockID.YELLOW_FLOWER + || id == BlockID.RED_FLOWER + || id == BlockID.BROWN_MUSHROOM + || id == BlockID.RED_MUSHROOM + || id == BlockID.TORCH + || id == BlockID.FIRE + || id == BlockID.REDSTONE_WIRE + || id == BlockID.CROPS + || id == BlockID.SIGN_POST + || id == BlockID.WOODEN_DOOR + || id == BlockID.LADDER + || id == BlockID.MINECART_TRACKS + || id == BlockID.WALL_SIGN + || id == BlockID.LEVER + || id == BlockID.STONE_PRESSURE_PLATE + || id == BlockID.IRON_DOOR + || id == BlockID.WOODEN_PRESSURE_PLATE + || id == BlockID.REDSTONE_TORCH_OFF + || id == BlockID.REDSTONE_TORCH_ON + || id == BlockID.STONE_BUTTON + || id == BlockID.SNOW + || id == BlockID.CACTUS + || id == BlockID.REED + || id == BlockID.PORTAL + || id == BlockID.CAKE_BLOCK + || id == BlockID.REDSTONE_REPEATER_OFF + || id == BlockID.REDSTONE_REPEATER_ON + || id == BlockID.TRAP_DOOR; } /** @@ -405,38 +405,38 @@ public enum BlockType { * @return */ public static boolean canPassThrough(int id) { - return id == 0 // Air - || id == 8 // Water - || id == 9 // Water - || id == 6 // Saplings - || id == 27 // Powered rails - || id == 28 // Detector rails - || id == 30 // Web <- someone will hate me for this - || id == 31 // Long grass - || id == 32 // Shrub - || id == 37 // Yellow flower - || id == 38 // Red flower - || id == 39 // Brown mushroom - || id == 40 // Red mush room - || id == 50 // Torch - || id == 51 // Fire - || id == 55 // Redstone wire - || id == 59 // Crops - || id == 63 // Sign post - || id == 65 // Ladder - || id == 66 // Minecart tracks - || id == 68 // Wall sign - || id == 69 // Lever - || id == 70 // Stone pressure plate - || id == 72 // Wooden pressure plate - || id == 75 // Redstone torch (off) - || id == 76 // Redstone torch (on) - || id == 77 // Stone button - || id == 78 // Snow - || id == 83 // Reed - || id == 90 // Portal - || id == 93 // Diode (off) - || id == 94; // Diode (on) + return id == BlockID.AIR + || id == BlockID.WATER + || id == BlockID.STATIONARY_WATER + || id == BlockID.SAPLING + || id == BlockID.POWERED_RAIL + || id == BlockID.DETECTOR_RAIL + || id == BlockID.WEB + || id == BlockID.LONG_GRASS + || id == BlockID.DEAD_BUSH + || id == BlockID.YELLOW_FLOWER + || id == BlockID.RED_FLOWER + || id == BlockID.BROWN_MUSHROOM + || id == BlockID.RED_MUSHROOM + || id == BlockID.TORCH + || id == BlockID.FIRE + || id == BlockID.REDSTONE_WIRE + || id == BlockID.CROPS + || id == BlockID.SIGN_POST + || id == BlockID.LADDER + || id == BlockID.MINECART_TRACKS + || id == BlockID.WALL_SIGN + || id == BlockID.LEVER + || id == BlockID.STONE_PRESSURE_PLATE + || id == BlockID.WOODEN_PRESSURE_PLATE + || id == BlockID.REDSTONE_TORCH_OFF + || id == BlockID.REDSTONE_TORCH_ON + || id == BlockID.STONE_BUTTON + || id == BlockID.SNOW + || id == BlockID.REED + || id == BlockID.PORTAL + || id == BlockID.REDSTONE_REPEATER_OFF + || id == BlockID.REDSTONE_REPEATER_ON; } /** @@ -446,53 +446,53 @@ public enum BlockType { * @return */ public static boolean usesData(int id) { - return id == 6 // Saplings - || id == 8 // Water - || id == 9 // Water - || id == 10 // Lava - || id == 11 // Lava - || id == 17 // Wood - || id == 18 // Leaves - || id == 23 // Dispenser - || id == 25 // Note Block - || id == 26 // Bed - || id == 27 // Powered rails - || id == 28 // Detector rails - || id == 29 // Sticky piston - || id == 31 // Tall grass - || id == 33 // Piston - || id == 34 // Piston extension - || id == 35 // Wool - || id == 43 // Double slab - || id == 44 // Slab - || id == 50 // Torch - || id == 53 // Wooden stairs - || id == 55 // Redstone wire - || id == 59 // Crops - || id == 60 // Soil - || id == 61 // Furnace - || id == 62 // Furnace - || id == 63 // Sign post - || id == 64 // Wooden door - || id == 65 // Ladder - || id == 66 // Minecart track - || id == 67 // Cobblestone stairs - || id == 68 // Wall sign - || id == 69 // Lever - || id == 70 // Stone pressure plate - || id == 71 // Iron door - || id == 72 // Wooden pressure plate - || id == 75 // Redstone torch (off) - || id == 76 // Redstone torch (on) - || id == 77 // Stone button - || id == 78 // Snow tile - || id == 81 // Cactus - || id == 86 // Pumpkin - || id == 91 // Jack-o-lantern - || id == 92 // Cake - || id == 93 // Redstone repeater (off) - || id == 94 // Redstone repeater (on) - || id == 96; // Trap door + return id == BlockID.SAPLING + || id == BlockID.WATER + || id == BlockID.STATIONARY_WATER + || id == BlockID.LAVA + || id == BlockID.STATIONARY_LAVA + || id == BlockID.LOG + || id == BlockID.LEAVES + || id == BlockID.DISPENSER + || id == BlockID.NOTE_BLOCK + || id == BlockID.BED + || id == BlockID.POWERED_RAIL + || id == BlockID.DETECTOR_RAIL + || id == BlockID.PISTON_STICKY_BASE + || id == BlockID.LONG_GRASS + || id == BlockID.PISTON_BASE + || id == BlockID.PISTON_EXTENSION + || id == BlockID.CLOTH + || id == BlockID.DOUBLE_STEP + || id == BlockID.STEP + || id == BlockID.TORCH + || id == BlockID.WOODEN_STAIRS + || id == BlockID.REDSTONE_WIRE + || id == BlockID.CROPS + || id == BlockID.SOIL + || id == BlockID.FURNACE + || id == BlockID.BURNING_FURNACE + || id == BlockID.SIGN_POST + || id == BlockID.WOODEN_DOOR + || id == BlockID.LADDER + || id == BlockID.MINECART_TRACKS + || id == BlockID.COBBLESTONE_STAIRS + || id == BlockID.WALL_SIGN + || id == BlockID.LEVER + || id == BlockID.STONE_PRESSURE_PLATE + || id == BlockID.IRON_DOOR + || id == BlockID.WOODEN_PRESSURE_PLATE + || id == BlockID.REDSTONE_TORCH_OFF + || id == BlockID.REDSTONE_TORCH_ON + || id == BlockID.STONE_BUTTON + || id == BlockID.SNOW + || id == BlockID.CACTUS + || id == BlockID.PUMPKIN + || id == BlockID.JACKOLANTERN + || id == BlockID.CAKE_BLOCK + || id == BlockID.REDSTONE_REPEATER_OFF + || id == BlockID.REDSTONE_REPEATER_ON + || id == BlockID.TRAP_DOOR; } /** @@ -502,10 +502,10 @@ public enum BlockType { * @return */ public static boolean isContainerBlock(int id) { - return id == 23 // Dispenser - || id == 61 // Furnace - || id == 62 // Furnace - || id == 54; // Chest + return id == BlockID.DISPENSER + || id == BlockID.FURNACE + || id == BlockID.BURNING_FURNACE + || id == BlockID.CHEST; } /** @@ -515,24 +515,24 @@ public enum BlockType { * @return */ public static boolean isRedstoneBlock(int id) { - return id == 27 // Powered rail - || id == 28 // Detector rail - || id == 29 // Sticky piston - || id == 33 // Piston - || id == 69 // Lever - || id == 70 // Stone pressure plate - || id == 72 // Wood pressure plate - || id == 76 // Redstone torch - || id == 75 // Redstone torch - || id == 77 // Stone button - || id == 55 // Redstone wire - || id == 64 // Wooden door - || id == 71 // Iron door - || id == 46 // TNT - || id == 23 // Dispenser - || id == 25 // Note block - || id == 93 // Diode (off) - || id == 94; // Diode (on) + return id == BlockID.POWERED_RAIL + || id == BlockID.DETECTOR_RAIL + || id == BlockID.PISTON_STICKY_BASE + || id == BlockID.PISTON_BASE + || id == BlockID.LEVER + || id == BlockID.STONE_PRESSURE_PLATE + || id == BlockID.WOODEN_PRESSURE_PLATE + || id == BlockID.REDSTONE_TORCH_OFF + || id == BlockID.REDSTONE_TORCH_ON + || id == BlockID.STONE_BUTTON + || id == BlockID.REDSTONE_WIRE + || id == BlockID.WOODEN_DOOR + || id == BlockID.IRON_DOOR + || id == BlockID.TNT + || id == BlockID.DISPENSER + || id == BlockID.NOTE_BLOCK + || id == BlockID.REDSTONE_REPEATER_OFF + || id == BlockID.REDSTONE_REPEATER_ON; } /** @@ -543,12 +543,11 @@ public enum BlockType { * @return */ public static boolean canTransferRedstone(int id) { - return id == 27 // Powered rail - || id == 75 // Redstone torch (off) - || id == 76 // Redstone torch (on) - || id == 55 // Redstone wire - || id == 93 // Diode (off) - || id == 94; // Diode (on) + return id == BlockID.REDSTONE_TORCH_OFF + || id == BlockID.REDSTONE_TORCH_ON + || id == BlockID.REDSTONE_WIRE + || id == BlockID.REDSTONE_REPEATER_OFF + || id == BlockID.REDSTONE_REPEATER_ON; } /** @@ -558,13 +557,13 @@ public enum BlockType { * @return */ public static boolean isRedstoneSource(int id) { - return id == 28 // Detector rail - || id == 75 // Redstone torch (off) - || id == 76 // Redstone torch (on) - || id == 69 // Lever - || id == 70 // Stone plate - || id == 72 // Wood plate - || id == 77; // Button + return id == BlockID.DETECTOR_RAIL + || id == BlockID.REDSTONE_TORCH_OFF + || id == BlockID.REDSTONE_TORCH_ON + || id == BlockID.LEVER + || id == BlockID.STONE_PRESSURE_PLATE + || id == BlockID.WOODEN_PRESSURE_PLATE + || id == BlockID.STONE_BUTTON; } /** @@ -574,9 +573,38 @@ public enum BlockType { * @return */ public static boolean isRailBlock(int id) { - return id == 27 // Powered rail - || id == 28 // Detector rail - || id == 66; // Normal rail + return id == BlockID.POWERED_RAIL + || id == BlockID.DETECTOR_RAIL + || id == BlockID.MINECART_TRACKS; + } + + /** + * Checks if the block type is naturally occuring + * + * @param id + * @return + */ + public static boolean isNaturalBlock(int id) { + return id == BlockID.STONE + || id == BlockID.GRASS + || id == BlockID.DIRT + // || id == BlockID.COBBLESTONE // technically can occur next to water and lava + || id == BlockID.BEDROCK + || id == BlockID.SAND + || id == BlockID.GRAVEL + || id == BlockID.CLAY + // hell + || id == BlockID.NETHERSTONE + || id == BlockID.SLOW_SAND + || id == BlockID.LIGHTSTONE + // ores + || id == BlockID.COAL_ORE + || id == BlockID.IRON_ORE + || id == BlockID.GOLD_ORE + || id == BlockID.LAPIS_LAZULI_ORE + || id == BlockID.DIAMOND_ORE + || id == BlockID.REDSTONE_ORE + || id == BlockID.GLOWING_REDSTONE_ORE; } /** @@ -590,36 +618,9 @@ public enum BlockType { public static int getDroppedBlock(int id) { Integer dropped = blockDrops.get(id); if (dropped == null) { - return 0; + return BlockID.AIR; } return dropped; } - /** - * Checks if the block type is "natural" - * - * @param id - * @return - */ - public static boolean isNaturalBlock(int id) { - return id == 1 // stone - || id == 2 // grass - || id == 3 // dirt - || id == 7 // bedrock - || id == 12 // sand - || id == 13 // gravel - || id == 82 // clay - // hell - || id == 87 // netherstone - || id == 88 // slowsand - || id == 89 // lightstone - // ores - || id == 14 // coal ore - || id == 15 // iron ore - || id == 16 // gold ore - || id == 21 // lapis ore - || id == 56 // diamond ore - || id == 73 // redstone ore - || id == 74; // redstone ore (active) - } } diff --git a/src/main/java/com/sk89q/worldedit/blocks/ChestBlock.java b/src/main/java/com/sk89q/worldedit/blocks/ChestBlock.java index 9f18a870c..a9e9abb14 100644 --- a/src/main/java/com/sk89q/worldedit/blocks/ChestBlock.java +++ b/src/main/java/com/sk89q/worldedit/blocks/ChestBlock.java @@ -41,7 +41,7 @@ public class ChestBlock extends BaseBlock implements TileEntityBlock, ContainerB * Construct the chest block. */ public ChestBlock() { - super(54); + super(BlockID.CHEST); items = new BaseItemStack[27]; } @@ -51,7 +51,7 @@ public class ChestBlock extends BaseBlock implements TileEntityBlock, ContainerB * @param data */ public ChestBlock(int data) { - super(54, data); + super(BlockID.CHEST, data); items = new BaseItemStack[27]; } @@ -62,7 +62,7 @@ public class ChestBlock extends BaseBlock implements TileEntityBlock, ContainerB * @param items */ public ChestBlock(int data, BaseItemStack[] items) { - super(54, data); + super(BlockID.CHEST, data); this.items = items; } diff --git a/src/main/java/com/sk89q/worldedit/blocks/DispenserBlock.java b/src/main/java/com/sk89q/worldedit/blocks/DispenserBlock.java index d03331c42..fbfd7a772 100644 --- a/src/main/java/com/sk89q/worldedit/blocks/DispenserBlock.java +++ b/src/main/java/com/sk89q/worldedit/blocks/DispenserBlock.java @@ -38,31 +38,31 @@ public class DispenserBlock extends BaseBlock implements TileEntityBlock, Contai private BaseItemStack[] items; /** - * Construct the chest block. + * Construct the dispenser block. */ public DispenserBlock() { - super(54); + super(BlockID.DISPENSER); items = new BaseItemStack[9]; } /** - * Construct the chest block. + * Construct the dispenser block. * * @param data */ public DispenserBlock(int data) { - super(23, data); + super(BlockID.DISPENSER, data); items = new BaseItemStack[9]; } /** - * Construct the chest block. + * Construct the dispenser block. * * @param data * @param items */ public DispenserBlock(int data, BaseItemStack[] items) { - super(23, data); + super(BlockID.DISPENSER, data); this.items = items; } @@ -155,7 +155,7 @@ public class DispenserBlock extends BaseBlock implements TileEntityBlock, Contai byte slot = (Byte)((ByteTag)Chunk.getChildTag(itemValues, "Slot", ByteTag.class)) .getValue(); - if (slot >= 0 && slot <= 26) { + if (slot >= 0 && slot <= 8) { newItems[slot] = new BaseItemStack(id, count, damage); } } diff --git a/src/main/java/com/sk89q/worldedit/blocks/ItemType.java b/src/main/java/com/sk89q/worldedit/blocks/ItemType.java index da9286dca..a284ff46b 100644 --- a/src/main/java/com/sk89q/worldedit/blocks/ItemType.java +++ b/src/main/java/com/sk89q/worldedit/blocks/ItemType.java @@ -33,103 +33,103 @@ import com.sk89q.util.StringUtil; */ public enum ItemType { // Blocks - AIR(0, "Air", "air"), - STONE(1, "Stone", "stone", "rock"), - GRASS(2, "Grass", "grass"), - DIRT(3, "Dirt", "dirt"), - COBBLESTONE(4, "Cobblestone", "cobblestone", "cobble"), - WOOD(5, "Wood", "wood", "woodplank", "plank", "woodplanks", "planks"), - SAPLING(6, "Sapling", "sapling", "seedling"), - BEDROCK(7, "Bedrock", "adminium", "bedrock"), - WATER(8, "Water", "watermoving", "movingwater", "flowingwater", "waterflowing"), - STATIONARY_WATER(9, "Water (stationary)", "water", "waterstationary", "stationarywater", "stillwater"), - LAVA(10, "Lava", "lavamoving", "movinglava", "flowinglava", "lavaflowing"), - STATIONARY_LAVA(11, "Lava (stationary)", "lava", "lavastationary", "stationarylava", "stilllava"), - SAND(12, "Sand", "sand"), - GRAVEL(13, "Gravel", "gravel"), - GOLD_ORE(14, "Gold ore", "goldore"), - IRON_ORE(15, "Iron ore", "ironore"), - COAL_ORE(16, "Coal ore", "coalore"), - LOG(17, "Log", "log", "tree", "pine", "oak", "birch", "redwood"), - LEAVES(18, "Leaves", "leaves", "leaf"), - SPONGE(19, "Sponge", "sponge"), - GLASS(20, "Glass", "glass"), - LAPIS_LAZULI_ORE(21, "Lapis lazuli ore", "lapislazuliore", "blueore", "lapisore"), - LAPIS_LAZULI(22, "Lapis lazuli", "lapislazuli", "lapislazuliblock", "bluerock"), - DISPENSER(23, "Dispenser", "dispenser"), - SANDSTONE(24, "Sandstone", "sandstone"), - NOTE_BLOCK(25, "Note block", "musicblock", "noteblock", "note", "music", "instrument"), - BED(26, "Bed", "bed"), - POWERED_RAIL(27, "Powered Rail", "poweredrail", "boosterrail", "poweredtrack", "boostertrack", "booster"), - DETECTOR_RAIL(28, "Detector Rail", "detectorrail", "detector"), - PISTON_STICKY_BASE(29, "Sticky Piston", "stickypiston"), - WEB(30, "Web", "web", "spiderweb"), - LONG_GRASS(31, "Long grass", "longgrass", "tallgrass"), - DEAD_BUSH(32, "Shrub", "deadbush", "shrub", "deadshrub", "tumbleweed"), - PISTON_BASE(33, "Piston", "piston"), - PISTON_EXTENSION(34, "Piston extension", "pistonhead"), - CLOTH(35, "Wool", "cloth", "wool"), - PISTON_MOVING_PIECE(36, "Piston moving piece", "movingpiston"), - YELLOW_FLOWER(37, "Yellow flower", "yellowflower", "flower"), - RED_FLOWER(38, "Red rose", "redflower", "redrose", "rose"), - BROWN_MUSHROOM(39, "Brown mushroom", "brownmushroom", "mushroom"), - RED_MUSHROOM(40, "Red mushroom", "redmushroom"), - GOLD_BLOCK(41, "Gold block", "gold", "goldblock"), - IRON_BLOCK(42, "Iron block", "iron", "ironblock"), - DOUBLE_STEP(43, "Double step", "doubleslab", "doublestoneslab", "doublestep"), - STEP(44, "Step", "slab", "stoneslab", "step", "halfstep"), - BRICK(45, "Brick", "brick", "brickblock"), - TNT(46, "TNT", "tnt", "c4", "explosive"), - BOOKCASE(47, "Bookcase", "bookshelf", "bookshelves", "bookcase", "bookcases"), - MOSSY_COBBLESTONE(48, "Cobblestone (mossy)", "mossycobblestone", "mossstone", "mossystone", "mosscobble", "mossycobble", "moss", "mossy", "sossymobblecone"), - OBSIDIAN(49, "Obsidian", "obsidian"), - TORCH(50, "Torch", "torch", "light", "candle"), - FIRE(51, "Fire", "fire", "flame", "flames"), - MOB_SPAWNER(52, "Mob spawner", "mobspawner", "spawner"), - WOODEN_STAIRS(53, "Wooden stairs", "woodstair", "woodstairs", "woodenstair", "woodenstairs"), - CHEST(54, "Chest", "chest", "storage", "storagechest"), - REDSTONE_WIRE(55, "Redstone wire", "redstone", "redstoneblock"), - DIAMOND_ORE(56, "Diamond ore", "diamondore"), - DIAMOND_BLOCK(57, "Diamond block", "diamond", "diamondblock"), - WORKBENCH(58, "Workbench", "workbench", "table", "craftingtable", "crafting"), - CROPS(59, "Crops", "crops", "crop", "plant", "plants"), - SOIL(60, "Soil", "soil", "farmland"), - FURNACE(61, "Furnace", "furnace"), - BURNING_FURNACE(62, "Furnace (burning)", "burningfurnace", "litfurnace"), - SIGN_POST(63, "Sign post", "sign", "signpost"), - WOODEN_DOOR(64, "Wooden door", "wooddoor", "woodendoor", "door"), - LADDER(65, "Ladder", "ladder"), - MINECART_TRACKS(66, "Minecart tracks", "track", "tracks", "minecrattrack", "minecarttracks", "rails", "rail"), - COBBLESTONE_STAIRS(67, "Cobblestone stairs", "cobblestonestair", "cobblestonestairs", "cobblestair", "cobblestairs"), - WALL_SIGN(68, "Wall sign", "wallsign"), - LEVER(69, "Lever", "lever", "switch", "stonelever", "stoneswitch"), - STONE_PRESSURE_PLATE(70, "Stone pressure plate", "stonepressureplate", "stoneplate"), - IRON_DOOR(71, "Iron Door", "irondoor"), - WOODEN_PRESSURE_PLATE(72, "Wooden pressure plate", "woodpressureplate", "woodplate", "woodenpressureplate", "woodenplate", "plate", "pressureplate"), - REDSTONE_ORE(73, "Redstone ore", "redstoneore"), - GLOWING_REDSTONE_ORE(74, "Glowing redstone ore", "glowingredstoneore"), - REDSTONE_TORCH_OFF(75, "Redstone torch (off)", "redstonetorchoff", "rstorchoff"), - REDSTONE_TORCH_ON(76, "Redstone torch (on)", "redstonetorch", "redstonetorchon", "rstorchon", "redtorch"), - STONE_BUTTON(77, "Stone Button", "stonebutton", "button"), - SNOW(78, "Snow", "snow"), - ICE(79, "Ice", "ice"), - SNOW_BLOCK(80, "Snow block", "snowblock"), - CACTUS(81, "Cactus", "cactus", "cacti"), - CLAY(82, "Clay", "clay"), - SUGAR_CANE(83, "Reed", "reed", "cane", "sugarcane", "sugarcanes", "vine", "vines"), - JUKEBOX(84, "Jukebox", "jukebox", "stereo", "recordplayer"), - FENCE(85, "Fence", "fence"), - PUMPKIN(86, "Pumpkin", "pumpkin"), - NETHERRACK(87, "Netherrack", "redmossycobblestone", "redcobblestone", "redmosstone", "redcobble", "netherstone", "netherrack", "nether", "hellstone"), - SOUL_SAND(88, "Soul sand", "slowmud", "mud", "soulsand", "hellmud"), - GLOWSTONE(89, "Glowstone", "brittlegold", "glowstone", "lightstone", "brimstone", "australium"), - PORTAL(90, "Portal", "portal"), - JACK_O_LANTERN(91, "Pumpkin (on)", "pumpkinlighted", "pumpkinon", "litpumpkin", "jackolantern"), - CAKE(92, "Cake", "cake", "cakeblock"), - REDSTONE_REPEATER_OFF(93, "Redstone repeater (off)", "diodeoff", "redstonerepeater", "repeater", "delayer"), - REDSTONE_REPEATER_ON(94, "Redstone repeater (on)", "diode", "diodeon", "redstonerepeateron", "repeateron", "delayeron"), - LOCKED_CHEST(95, "Locked chest", "lockedchest", "steveco", "supplycrate", "valveneedstoworkonep3nottf2kthx"), - TRAP_DOOR(96, "Trap door", "trapdoor", "hatch", "floordoor"), + AIR(BlockID.AIR, "Air", "air"), + STONE(BlockID.STONE, "Stone", "stone", "rock"), + GRASS(BlockID.GRASS, "Grass", "grass"), + DIRT(BlockID.DIRT, "Dirt", "dirt"), + COBBLESTONE(BlockID.COBBLESTONE, "Cobblestone", "cobblestone", "cobble"), + WOOD(BlockID.WOOD, "Wood", "wood", "woodplank", "plank", "woodplanks", "planks"), + SAPLING(BlockID.SAPLING, "Sapling", "sapling", "seedling"), + BEDROCK(BlockID.BEDROCK, "Bedrock", "adminium", "bedrock"), + WATER(BlockID.WATER, "Water", "watermoving", "movingwater", "flowingwater", "waterflowing"), + STATIONARY_WATER(BlockID.STATIONARY_WATER, "Water (stationary)", "water", "waterstationary", "stationarywater", "stillwater"), + LAVA(BlockID.LAVA, "Lava", "lavamoving", "movinglava", "flowinglava", "lavaflowing"), + STATIONARY_LAVA(BlockID.STATIONARY_LAVA, "Lava (stationary)", "lava", "lavastationary", "stationarylava", "stilllava"), + SAND(BlockID.SAND, "Sand", "sand"), + GRAVEL(BlockID.GRAVEL, "Gravel", "gravel"), + GOLD_ORE(BlockID.GOLD_ORE, "Gold ore", "goldore"), + IRON_ORE(BlockID.IRON_ORE, "Iron ore", "ironore"), + COAL_ORE(BlockID.COAL_ORE, "Coal ore", "coalore"), + LOG(BlockID.LOG, "Log", "log", "tree", "pine", "oak", "birch", "redwood"), + LEAVES(BlockID.LEAVES, "Leaves", "leaves", "leaf"), + SPONGE(BlockID.SPONGE, "Sponge", "sponge"), + GLASS(BlockID.GLASS, "Glass", "glass"), + LAPIS_LAZULI_ORE(BlockID.LAPIS_LAZULI_ORE, "Lapis lazuli ore", "lapislazuliore", "blueore", "lapisore"), + LAPIS_LAZULI(BlockID.LAPIS_LAZULI_BLOCK, "Lapis lazuli", "lapislazuli", "lapislazuliblock", "bluerock"), + DISPENSER(BlockID.DISPENSER, "Dispenser", "dispenser"), + SANDSTONE(BlockID.SANDSTONE, "Sandstone", "sandstone"), + NOTE_BLOCK(BlockID.NOTE_BLOCK, "Note block", "musicblock", "noteblock", "note", "music", "instrument"), + BED(BlockID.BED, "Bed", "bed"), + POWERED_RAIL(BlockID.POWERED_RAIL, "Powered Rail", "poweredrail", "boosterrail", "poweredtrack", "boostertrack", "booster"), + DETECTOR_RAIL(BlockID.DETECTOR_RAIL, "Detector Rail", "detectorrail", "detector"), + PISTON_STICKY_BASE(BlockID.PISTON_STICKY_BASE, "Sticky Piston", "stickypiston"), + WEB(BlockID.WEB, "Web", "web", "spiderweb"), + LONG_GRASS(BlockID.LONG_GRASS, "Long grass", "longgrass", "tallgrass"), + DEAD_BUSH(BlockID.DEAD_BUSH, "Shrub", "deadbush", "shrub", "deadshrub", "tumbleweed"), + PISTON_BASE(BlockID.PISTON_BASE, "Piston", "piston"), + PISTON_EXTENSION(BlockID.PISTON_EXTENSION, "Piston extension", "pistonextendsion", "pistonhead"), + CLOTH(BlockID.CLOTH, "Wool", "cloth", "wool"), + PISTON_MOVING_PIECE(BlockID.PISTON_MOVING_PIECE, "Piston moving piece", "movingpiston"), + YELLOW_FLOWER(BlockID.YELLOW_FLOWER, "Yellow flower", "yellowflower", "flower"), + RED_FLOWER(BlockID.RED_FLOWER, "Red rose", "redflower", "redrose", "rose"), + BROWN_MUSHROOM(BlockID.BROWN_MUSHROOM, "Brown mushroom", "brownmushroom", "mushroom"), + RED_MUSHROOM(BlockID.RED_MUSHROOM, "Red mushroom", "redmushroom"), + GOLD_BLOCK(BlockID.GOLD_BLOCK, "Gold block", "gold", "goldblock"), + IRON_BLOCK(BlockID.IRON_BLOCK, "Iron block", "iron", "ironblock"), + DOUBLE_STEP(BlockID.DOUBLE_STEP, "Double step", "doubleslab", "doublestoneslab", "doublestep"), + STEP(BlockID.STEP, "Step", "slab", "stoneslab", "step", "halfstep"), + BRICK(BlockID.BRICK, "Brick", "brick", "brickblock"), + TNT(BlockID.TNT, "TNT", "tnt", "c4", "explosive"), + BOOKCASE(BlockID.BOOKCASE, "Bookcase", "bookshelf", "bookshelves", "bookcase", "bookcases"), + MOSSY_COBBLESTONE(BlockID.MOSSY_COBBLESTONE, "Cobblestone (mossy)", "mossycobblestone", "mossstone", "mossystone", "mosscobble", "mossycobble", "moss", "mossy", "sossymobblecone"), + OBSIDIAN(BlockID.OBSIDIAN, "Obsidian", "obsidian"), + TORCH(BlockID.TORCH, "Torch", "torch", "light", "candle"), + FIRE(BlockID.FIRE, "Fire", "fire", "flame", "flames"), + MOB_SPAWNER(BlockID.MOB_SPAWNER, "Mob spawner", "mobspawner", "spawner"), + WOODEN_STAIRS(BlockID.WOODEN_STAIRS, "Wooden stairs", "woodstair", "woodstairs", "woodenstair", "woodenstairs"), + CHEST(BlockID.CHEST, "Chest", "chest", "storage", "storagechest"), + REDSTONE_WIRE(BlockID.REDSTONE_WIRE, "Redstone wire", "redstone", "redstoneblock"), + DIAMOND_ORE(BlockID.DIAMOND_ORE, "Diamond ore", "diamondore"), + DIAMOND_BLOCK(BlockID.DIAMOND_BLOCK, "Diamond block", "diamond", "diamondblock"), + WORKBENCH(BlockID.WORKBENCH, "Workbench", "workbench", "table", "craftingtable", "crafting"), + CROPS(BlockID.CROPS, "Crops", "crops", "crop", "plant", "plants"), + SOIL(BlockID.SOIL, "Soil", "soil", "farmland"), + FURNACE(BlockID.FURNACE, "Furnace", "furnace"), + BURNING_FURNACE(BlockID.BURNING_FURNACE, "Furnace (burning)", "burningfurnace", "litfurnace"), + SIGN_POST(BlockID.SIGN_POST, "Sign post", "sign", "signpost"), + WOODEN_DOOR(BlockID.WOODEN_DOOR, "Wooden door", "wooddoor", "woodendoor", "door"), + LADDER(BlockID.LADDER, "Ladder", "ladder"), + MINECART_TRACKS(BlockID.MINECART_TRACKS, "Minecart tracks", "track", "tracks", "minecrattrack", "minecarttracks", "rails", "rail"), + COBBLESTONE_STAIRS(BlockID.COBBLESTONE_STAIRS, "Cobblestone stairs", "cobblestonestair", "cobblestonestairs", "cobblestair", "cobblestairs"), + WALL_SIGN(BlockID.WALL_SIGN, "Wall sign", "wallsign"), + LEVER(BlockID.LEVER, "Lever", "lever", "switch", "stonelever", "stoneswitch"), + STONE_PRESSURE_PLATE(BlockID.STONE_PRESSURE_PLATE, "Stone pressure plate", "stonepressureplate", "stoneplate"), + IRON_DOOR(BlockID.IRON_DOOR, "Iron Door", "irondoor"), + WOODEN_PRESSURE_PLATE(BlockID.WOODEN_PRESSURE_PLATE, "Wooden pressure plate", "woodpressureplate", "woodplate", "woodenpressureplate", "woodenplate", "plate", "pressureplate"), + REDSTONE_ORE(BlockID.REDSTONE_ORE, "Redstone ore", "redstoneore"), + GLOWING_REDSTONE_ORE(BlockID.GLOWING_REDSTONE_ORE, "Glowing redstone ore", "glowingredstoneore"), + REDSTONE_TORCH_OFF(BlockID.REDSTONE_TORCH_OFF, "Redstone torch (off)", "redstonetorchoff", "rstorchoff"), + REDSTONE_TORCH_ON(BlockID.REDSTONE_TORCH_ON, "Redstone torch (on)", "redstonetorch", "redstonetorchon", "rstorchon", "redtorch"), + STONE_BUTTON(BlockID.STONE_BUTTON, "Stone Button", "stonebutton", "button"), + SNOW(BlockID.SNOW, "Snow", "snow"), + ICE(BlockID.ICE, "Ice", "ice"), + SNOW_BLOCK(BlockID.SNOW_BLOCK, "Snow block", "snowblock"), + CACTUS(BlockID.CACTUS, "Cactus", "cactus", "cacti"), + CLAY(BlockID.CLAY, "Clay", "clay"), + SUGAR_CANE(BlockID.REED, "Reed", "reed", "cane", "sugarcane", "sugarcanes", "vine", "vines"), + JUKEBOX(BlockID.JUKEBOX, "Jukebox", "jukebox", "stereo", "recordplayer"), + FENCE(BlockID.FENCE, "Fence", "fence"), + PUMPKIN(BlockID.PUMPKIN, "Pumpkin", "pumpkin"), + NETHERRACK(BlockID.NETHERRACK, "Netherrack", "redmossycobblestone", "redcobblestone", "redmosstone", "redcobble", "netherstone", "netherrack", "nether", "hellstone"), + SOUL_SAND(BlockID.SLOW_SAND, "Soul sand", "slowmud", "mud", "soulsand", "hellmud"), + GLOWSTONE(BlockID.LIGHTSTONE, "Glowstone", "brittlegold", "glowstone", "lightstone", "brimstone", "australium"), + PORTAL(BlockID.PORTAL, "Portal", "portal"), + JACK_O_LANTERN(BlockID.JACKOLANTERN, "Pumpkin (on)", "pumpkinlighted", "pumpkinon", "litpumpkin", "jackolantern"), + CAKE(BlockID.CAKE_BLOCK, "Cake", "cake", "cakeblock"), + REDSTONE_REPEATER_OFF(BlockID.REDSTONE_REPEATER_OFF, "Redstone repeater (off)", "diodeoff", "redstonerepeater", "repeateroff", "delayeroff"), + REDSTONE_REPEATER_ON(BlockID.REDSTONE_REPEATER_ON, "Redstone repeater (on)", "diodeon", "redstonerepeateron", "repeateron", "delayeron"), + LOCKED_CHEST(BlockID.LOCKED_CHEST, "Locked chest", "lockedchest", "steveco", "supplycrate", "valveneedstoworkonep3nottf2kthx"), + TRAP_DOOR(BlockID.TRAP_DOOR, "Trap door", "trapdoor", "hatch", "floordoor"), // Items IRON_SHOVEL(256, "Iron shovel", "ironshovel"), @@ -411,17 +411,79 @@ public enum ItemType { * @return */ public static boolean shouldNotStack(int id) { - return (id >= 256 && id <= 259) - || id == 261 - || (id >= 267 && id <= 279) - || (id >= 281 && id <= 286) - || (id >= 290 && id <= 294) - || (id >= 298 && id <= 317) - || (id >= 325 && id <= 327) - || id == 335 - || id == 354 - || id == 355 - || id >= 2256; + ItemType t = ItemType.fromID(id); + if (t == null) return false; + return t == ItemType.IRON_SHOVEL + || t == ItemType.IRON_PICK + || t == ItemType.IRON_AXE + || t == ItemType.FLINT_AND_TINDER + || t == ItemType.BOW + || t == ItemType.IRON_SWORD + || t == ItemType.WOOD_SWORD + || t == ItemType.WOOD_SHOVEL + || t == ItemType.WOOD_PICKAXE + || t == ItemType.WOOD_AXE + || t == ItemType.STONE_SWORD + || t == ItemType.STONE_SHOVEL + || t == ItemType.STONE_PICKAXE + || t == ItemType.STONE_AXE + || t == ItemType.DIAMOND_SWORD + || t == ItemType.DIAMOND_SHOVEL + || t == ItemType.DIAMOND_PICKAXE + || t == ItemType.DIAMOND_AXE + || t == ItemType.BOWL + || t == ItemType.GOLD_SWORD + || t == ItemType.GOLD_SHOVEL + || t == ItemType.GOLD_PICKAXE + || t == ItemType.GOLD_AXE + || t == ItemType.WOOD_HOE + || t == ItemType.STONE_HOE + || t == ItemType.IRON_HOE + || t == ItemType.DIAMOND_HOE + || t == ItemType.GOLD_HOE + || t == ItemType.BREAD + || t == ItemType.LEATHER_HELMET + || t == ItemType.LEATHER_CHEST + || t == ItemType.LEATHER_PANTS + || t == ItemType.LEATHER_BOOTS + || t == ItemType.CHAINMAIL_CHEST + || t == ItemType.CHAINMAIL_HELMET + || t == ItemType.CHAINMAIL_BOOTS + || t == ItemType.CHAINMAIL_PANTS + || t == ItemType.IRON_HELMET + || t == ItemType.IRON_CHEST + || t == ItemType.IRON_PANTS + || t == ItemType.IRON_BOOTS + || t == ItemType.DIAMOND_HELMET + || t == ItemType.DIAMOND_PANTS + || t == ItemType.DIAMOND_CHEST + || t == ItemType.DIAMOND_BOOTS + || t == ItemType.GOLD_HELMET + || t == ItemType.GOLD_CHEST + || t == ItemType.GOLD_PANTS + || t == ItemType.GOLD_BOOTS + || t == ItemType.RAW_PORKCHOP + || t == ItemType.COOKED_PORKCHOP + || t == ItemType.SIGN + || t == ItemType.WOODEN_DOOR_ITEM + || t == ItemType.BUCKET + || t == ItemType.WATER_BUCKET + || t == ItemType.LAVA_BUCKET + || t == ItemType.MINECART + || t == ItemType.SADDLE + || t == ItemType.IRON_DOOR_ITEM + || t == ItemType.WOOD_BOAT + || t == ItemType.MILK_BUCKET + || t == ItemType.STORAGE_MINECART + || t == ItemType.POWERED_MINECART + || t == ItemType.WATCH + || t == ItemType.RAW_FISH + || t == ItemType.COOKED_FISH + || t == ItemType.CAKE_ITEM + || t == ItemType.BED_ITEM + || t == ItemType.MAP + || t == ItemType.GOLD_RECORD + || t == ItemType.GREEN_RECORD; } /** @@ -432,7 +494,7 @@ public enum ItemType { * @return */ public static boolean usesDamageValue(int id) { - return id == 35 - || id == 351; + return id == ItemType.CLOTH.getID() + || id == ItemType.INK_SACK.getID(); } } diff --git a/src/main/java/com/sk89q/worldedit/blocks/MobSpawnerBlock.java b/src/main/java/com/sk89q/worldedit/blocks/MobSpawnerBlock.java index 5e2e2fab1..b9d58f976 100644 --- a/src/main/java/com/sk89q/worldedit/blocks/MobSpawnerBlock.java +++ b/src/main/java/com/sk89q/worldedit/blocks/MobSpawnerBlock.java @@ -44,7 +44,7 @@ public class MobSpawnerBlock extends BaseBlock implements TileEntityBlock { * */ public MobSpawnerBlock() { - super(52); + super(BlockID.MOB_SPAWNER); this.mobType = "Pig"; } @@ -54,7 +54,7 @@ public class MobSpawnerBlock extends BaseBlock implements TileEntityBlock { * @param mobType */ public MobSpawnerBlock(String mobType) { - super(52); + super(BlockID.MOB_SPAWNER); this.mobType = mobType; } @@ -64,7 +64,7 @@ public class MobSpawnerBlock extends BaseBlock implements TileEntityBlock { * @param data */ public MobSpawnerBlock(int data) { - super(52, data); + super(BlockID.MOB_SPAWNER, data); } /** @@ -74,7 +74,7 @@ public class MobSpawnerBlock extends BaseBlock implements TileEntityBlock { * @param mobType */ public MobSpawnerBlock(int data, String mobType) { - super(52, data); + super(BlockID.MOB_SPAWNER, data); this.mobType = mobType; } diff --git a/src/main/java/com/sk89q/worldedit/blocks/NoteBlock.java b/src/main/java/com/sk89q/worldedit/blocks/NoteBlock.java index e25a86f36..ce7574718 100644 --- a/src/main/java/com/sk89q/worldedit/blocks/NoteBlock.java +++ b/src/main/java/com/sk89q/worldedit/blocks/NoteBlock.java @@ -38,7 +38,7 @@ public class NoteBlock extends BaseBlock implements TileEntityBlock { * Construct the note block. */ public NoteBlock() { - super(25); + super(BlockID.NOTE_BLOCK); this.note = 0; } @@ -48,7 +48,7 @@ public class NoteBlock extends BaseBlock implements TileEntityBlock { * @param data */ public NoteBlock(int data) { - super(25, data); + super(BlockID.NOTE_BLOCK, data); this.note = 0; } @@ -59,7 +59,7 @@ public class NoteBlock extends BaseBlock implements TileEntityBlock { * @param note */ public NoteBlock(int data, byte note) { - super(25, data); + super(BlockID.NOTE_BLOCK, data); this.note = note; } diff --git a/src/main/java/com/sk89q/worldedit/bukkit/BukkitPlayerBlockBag.java b/src/main/java/com/sk89q/worldedit/bukkit/BukkitPlayerBlockBag.java index 88964da80..c6af1f0be 100644 --- a/src/main/java/com/sk89q/worldedit/bukkit/BukkitPlayerBlockBag.java +++ b/src/main/java/com/sk89q/worldedit/bukkit/BukkitPlayerBlockBag.java @@ -23,6 +23,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.bags.*; +import com.sk89q.worldedit.blocks.BlockID; public class BukkitPlayerBlockBag extends BlockBag { /** @@ -68,7 +69,7 @@ public class BukkitPlayerBlockBag extends BlockBag { */ @Override public void fetchBlock(int id) throws BlockBagException { - if (id == 0) { + if (id == BlockID.AIR) { throw new IllegalArgumentException("Can't fetch air block"); } @@ -114,7 +115,7 @@ public class BukkitPlayerBlockBag extends BlockBag { */ @Override public void storeBlock(int id) throws BlockBagException { - if (id == 0) { + if (id == BlockID.AIR) { throw new IllegalArgumentException("Can't store air block"); } diff --git a/src/main/java/com/sk89q/worldedit/bukkit/WorldEditPlugin.java b/src/main/java/com/sk89q/worldedit/bukkit/WorldEditPlugin.java index cbcd1531d..e13abc99a 100644 --- a/src/main/java/com/sk89q/worldedit/bukkit/WorldEditPlugin.java +++ b/src/main/java/com/sk89q/worldedit/bukkit/WorldEditPlugin.java @@ -135,9 +135,7 @@ public class WorldEditPlugin extends JavaPlugin { * Register the events used by WorldEdit. */ protected void registerEvents() { - @SuppressWarnings("unused") PlayerListener playerListener = new WorldEditPlayerListener(this); - @SuppressWarnings("unused") PlayerListener criticalPlayerListener = new WorldEditCriticalPlayerListener(this); // The permissions resolver has some hooks of its own diff --git a/src/main/java/com/sk89q/worldedit/commands/ClipboardCommands.java b/src/main/java/com/sk89q/worldedit/commands/ClipboardCommands.java index eb4cb3c09..e202c79cc 100644 --- a/src/main/java/com/sk89q/worldedit/commands/ClipboardCommands.java +++ b/src/main/java/com/sk89q/worldedit/commands/ClipboardCommands.java @@ -28,6 +28,7 @@ import com.sk89q.minecraft.util.commands.Logging; import static com.sk89q.minecraft.util.commands.Logging.LogMode.*; import com.sk89q.worldedit.*; import com.sk89q.worldedit.blocks.BaseBlock; +import com.sk89q.worldedit.blocks.BlockID; import com.sk89q.worldedit.data.DataException; import com.sk89q.worldedit.regions.Region; @@ -76,7 +77,7 @@ public class ClipboardCommands { LocalSession session, LocalPlayer player, EditSession editSession) throws WorldEditException { - BaseBlock block = new BaseBlock(0); + BaseBlock block = new BaseBlock(BlockID.AIR); if (args.argsLength() > 0) { block = we.getBlock(player, args.getString(0)); diff --git a/src/main/java/com/sk89q/worldedit/commands/GenerationCommands.java b/src/main/java/com/sk89q/worldedit/commands/GenerationCommands.java index 94ce3d220..ff23a9372 100644 --- a/src/main/java/com/sk89q/worldedit/commands/GenerationCommands.java +++ b/src/main/java/com/sk89q/worldedit/commands/GenerationCommands.java @@ -81,7 +81,8 @@ public class GenerationCommands { @Command( aliases = {"/hsphere"}, usage = " [,,] [raised?] ", - desc = "Generate a hollow sphere. If you specify 3 radiuses separated by commas, an ellipsoid with the dimensions x,y,z will be generated.", + desc = "Generate a hollow sphere.", + flags = "q", min = 2, max = 3 ) @@ -91,6 +92,29 @@ public class GenerationCommands { LocalSession session, LocalPlayer player, EditSession editSession) throws WorldEditException { + if (args.hasFlag('q')) { + Pattern block = we.getBlockPattern(player, args.getString(0)); + String[] radiuses = args.getString(1).split(","); + if (radiuses.length > 1) { + throw new InsufficientArgumentsException("Cannot specify q flag and multiple radiuses."); + } + double radius = Double.parseDouble(radiuses[0]); + boolean raised = args.argsLength() > 2 + ? (args.getString(2).equalsIgnoreCase("true") + || args.getString(2).equalsIgnoreCase("yes")) + : false; + + Vector pos = session.getPlacementPosition(player); + if (raised) { + pos = pos.add(0, radius, 0); + } + + int affected = editSession.makeSphere(pos, block, radius, false); + player.findFreePosition(); + player.print(affected + " block(s) have been created."); + return; + } + final Pattern block = we.getBlockPattern(player, args.getString(0)); String[] radiuses = args.getString(1).split(","); final double radiusX, radiusY, radiusZ; @@ -110,10 +134,11 @@ public class GenerationCommands { return; } final boolean raised; - if (args.argsLength() > 2) + if (args.argsLength() > 2) { raised = args.getString(2).equalsIgnoreCase("true") || args.getString(2).equalsIgnoreCase("yes"); - else + } else { raised = false; + } Vector pos = session.getPlacementPosition(player); if (raised) { @@ -127,8 +152,9 @@ public class GenerationCommands { @Command( aliases = {"/sphere"}, - usage = " [raised?] ", - desc = "Generate a filled sphere. If you specify 3 radiuses separated by commas, an ellipsoid with the dimensions x,y,z will be generated.", + usage = " [,,] [raised?] ", + desc = "Generate a filled sphere.", + flags = "q", min = 2, max = 3 ) @@ -138,6 +164,29 @@ public class GenerationCommands { LocalSession session, LocalPlayer player, EditSession editSession) throws WorldEditException { + if (args.hasFlag('q')) { + Pattern block = we.getBlockPattern(player, args.getString(0)); + String[] radiuses = args.getString(1).split(","); + if (radiuses.length > 1) { + throw new InsufficientArgumentsException("Cannot specify q flag and multiple radiuses."); + } + double radius = Double.parseDouble(radiuses[0]); + boolean raised = args.argsLength() > 2 + ? (args.getString(2).equalsIgnoreCase("true") + || args.getString(2).equalsIgnoreCase("yes")) + : false; + + Vector pos = session.getPlacementPosition(player); + if (raised) { + pos = pos.add(0, radius, 0); + } + + int affected = editSession.makeSphere(pos, block, radius, true); + player.findFreePosition(); + player.print(affected + " block(s) have been created."); + return; + } + Pattern block = we.getBlockPattern(player, args.getString(0)); String[] radiuses = args.getString(1).split(","); final double radiusX, radiusY, radiusZ; @@ -157,10 +206,11 @@ public class GenerationCommands { return; } final boolean raised; - if (args.argsLength() > 2) + if (args.argsLength() > 2) { raised = args.getString(2).equalsIgnoreCase("true") || args.getString(2).equalsIgnoreCase("yes"); - else + } else { raised = false; + } Vector pos = session.getPlacementPosition(player); if (raised) { @@ -194,7 +244,6 @@ public class GenerationCommands { if (type == null) { player.printError("Tree type '" + args.getString(1) + "' is unknown."); return; - } else { } int affected = editSession.makeForest(player.getPosition(), diff --git a/src/main/java/com/sk89q/worldedit/commands/RegionCommands.java b/src/main/java/com/sk89q/worldedit/commands/RegionCommands.java index d3488219f..7d6d052dd 100644 --- a/src/main/java/com/sk89q/worldedit/commands/RegionCommands.java +++ b/src/main/java/com/sk89q/worldedit/commands/RegionCommands.java @@ -28,6 +28,7 @@ import com.sk89q.minecraft.util.commands.Logging; import static com.sk89q.minecraft.util.commands.Logging.LogMode.*; import com.sk89q.worldedit.*; import com.sk89q.worldedit.blocks.BaseBlock; +import com.sk89q.worldedit.blocks.BlockID; import com.sk89q.worldedit.filtering.GaussianKernel; import com.sk89q.worldedit.filtering.HeightMapFilter; import com.sk89q.worldedit.masks.Mask; @@ -243,7 +244,7 @@ public class RegionCommands { if (args.argsLength() > 2) { replace = we.getBlock(player, args.getString(2)); } else { - replace = new BaseBlock(0); + replace = new BaseBlock(BlockID.AIR); } int affected = editSession.moveCuboidRegion(session.getSelection(player.getWorld()), diff --git a/src/main/java/com/sk89q/worldedit/data/BlockData.java b/src/main/java/com/sk89q/worldedit/data/BlockData.java index 312fdadcb..797d6a5ac 100644 --- a/src/main/java/com/sk89q/worldedit/data/BlockData.java +++ b/src/main/java/com/sk89q/worldedit/data/BlockData.java @@ -308,6 +308,17 @@ public final class BlockData { return data; } + /** + * Flip a block's data value. + * + * @param type + * @param data + * @return + */ + public static int flip(int type, int data) { + return rotate90(type, rotate90(type, data)); + } + /** * Flip a block's data value. * diff --git a/src/main/java/com/sk89q/worldedit/masks/ExistingBlockMask.java b/src/main/java/com/sk89q/worldedit/masks/ExistingBlockMask.java index 05ac66585..904c61ea1 100644 --- a/src/main/java/com/sk89q/worldedit/masks/ExistingBlockMask.java +++ b/src/main/java/com/sk89q/worldedit/masks/ExistingBlockMask.java @@ -21,9 +21,10 @@ package com.sk89q.worldedit.masks; import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.Vector; +import com.sk89q.worldedit.blocks.BlockID; public class ExistingBlockMask implements Mask { public boolean matches(EditSession editSession, Vector pos) { - return editSession.getBlockType(pos) != 0; + return editSession.getBlockType(pos) != BlockID.AIR; } } diff --git a/src/main/java/com/sk89q/worldedit/tools/DistanceWand.java b/src/main/java/com/sk89q/worldedit/tools/DistanceWand.java index 84b7d2bd7..0ca554fc5 100644 --- a/src/main/java/com/sk89q/worldedit/tools/DistanceWand.java +++ b/src/main/java/com/sk89q/worldedit/tools/DistanceWand.java @@ -84,10 +84,6 @@ public class DistanceWand extends BrushTool implements DoubleActionTraceTool { return null; } - // Bug workaround - if (target.getBlockX() == 0 && target.getBlockY() == 0 && target.getBlockZ() == 0) { - return null; - } return target; } } diff --git a/src/main/java/com/sk89q/worldedit/tools/FloodFillTool.java b/src/main/java/com/sk89q/worldedit/tools/FloodFillTool.java index 64f5d2f52..e9985f017 100644 --- a/src/main/java/com/sk89q/worldedit/tools/FloodFillTool.java +++ b/src/main/java/com/sk89q/worldedit/tools/FloodFillTool.java @@ -49,7 +49,7 @@ public class FloodFillTool implements BlockTool { int initialType = world.getBlockType(clicked); - if (initialType == 0) { + if (initialType == BlockID.AIR) { return true; } diff --git a/src/main/java/com/sk89q/worldedit/tools/RecursivePickaxe.java b/src/main/java/com/sk89q/worldedit/tools/RecursivePickaxe.java index bf25b4160..f8c2763d9 100644 --- a/src/main/java/com/sk89q/worldedit/tools/RecursivePickaxe.java +++ b/src/main/java/com/sk89q/worldedit/tools/RecursivePickaxe.java @@ -49,7 +49,7 @@ public class RecursivePickaxe implements BlockTool { int initialType = world.getBlockType(clicked); - if (initialType == 0) { + if (initialType == BlockID.AIR) { return true; } diff --git a/src/main/java/com/sk89q/worldedit/tools/SinglePickaxe.java b/src/main/java/com/sk89q/worldedit/tools/SinglePickaxe.java index e1138b1b6..2f0b3e9d6 100644 --- a/src/main/java/com/sk89q/worldedit/tools/SinglePickaxe.java +++ b/src/main/java/com/sk89q/worldedit/tools/SinglePickaxe.java @@ -40,15 +40,13 @@ public class SinglePickaxe implements BlockTool { if (world.getBlockType(clicked) == BlockID.BEDROCK && !player.canDestroyBedrock()) { return true; - } else if (world.getBlockType(clicked) == BlockID.TNT) { - return false; } if (config.superPickaxeDrop) { world.simulateBlockMine(clicked); } - world.setBlockType(clicked, 0); + world.setBlockType(clicked, BlockID.AIR); return true; } diff --git a/src/main/java/com/sk89q/worldedit/tools/brushes/SmoothBrush.java b/src/main/java/com/sk89q/worldedit/tools/brushes/SmoothBrush.java index e607922d4..9d6851dba 100644 --- a/src/main/java/com/sk89q/worldedit/tools/brushes/SmoothBrush.java +++ b/src/main/java/com/sk89q/worldedit/tools/brushes/SmoothBrush.java @@ -33,6 +33,10 @@ public class SmoothBrush implements Brush { private int iterations; private boolean naturalOnly; + public SmoothBrush(int iterations) { + this(iterations, false); + } + public SmoothBrush(int iterations, boolean naturalOnly) { this.iterations = iterations; this.naturalOnly = naturalOnly; diff --git a/src/main/java/com/sk89q/worldedit/util/TreeGenerator.java b/src/main/java/com/sk89q/worldedit/util/TreeGenerator.java index 26f4c8c83..b11efd28c 100644 --- a/src/main/java/com/sk89q/worldedit/util/TreeGenerator.java +++ b/src/main/java/com/sk89q/worldedit/util/TreeGenerator.java @@ -28,6 +28,7 @@ import com.sk89q.worldedit.LocalWorld; import com.sk89q.worldedit.MaxChangedBlocksException; import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.blocks.BaseBlock; +import com.sk89q.worldedit.blocks.BlockID; /** * Tree generator. @@ -177,8 +178,8 @@ public class TreeGenerator { int trunkHeight = (int) Math.floor(Math.random() * 2) + 3; int height = (int) Math.floor(Math.random() * 5) + 8; - BaseBlock logBlock = new BaseBlock(17); - BaseBlock leavesBlock = new BaseBlock(18); + BaseBlock logBlock = new BaseBlock(BlockID.LOG); + BaseBlock leavesBlock = new BaseBlock(BlockID.LEAVES); // Create trunk for (int i = 0; i < trunkHeight; ++i) {