From 51dd7a0c9ced11023f19aef0b75166567afa0b1f Mon Sep 17 00:00:00 2001 From: zml2008 Date: Sun, 27 Nov 2011 15:29:26 -0800 Subject: [PATCH] Improved handling of valid blocks not in BlockType and added dragon egg to BlockType --- .../java/com/sk89q/worldedit/WorldEdit.java | 162 +++++++++--------- .../com/sk89q/worldedit/blocks/BlockID.java | 1 + .../com/sk89q/worldedit/blocks/BlockType.java | 3 +- .../com/sk89q/worldedit/blocks/ItemType.java | 1 + 4 files changed, 89 insertions(+), 78 deletions(-) diff --git a/src/main/java/com/sk89q/worldedit/WorldEdit.java b/src/main/java/com/sk89q/worldedit/WorldEdit.java index 9ae47dc09..957506d14 100644 --- a/src/main/java/com/sk89q/worldedit/WorldEdit.java +++ b/src/main/java/com/sk89q/worldedit/WorldEdit.java @@ -321,53 +321,57 @@ public class WorldEdit { data = 0; } } catch (NumberFormatException e) { - switch (blockType) { - case CLOTH: - ClothColor col = ClothColor.lookup(typeAndData[1]); + if (blockType != null) { + switch (blockType) { + case CLOTH: + ClothColor col = ClothColor.lookup(typeAndData[1]); - if (col != null) { - data = col.getID(); - } else { - throw new InvalidItemException(arg, "Unknown cloth color '" + typeAndData[1] + "'"); - } - break; - - case STEP: - case DOUBLE_STEP: - BlockType dataType = BlockType.lookup(typeAndData[1]); - - if (dataType != null) { - switch (dataType) { - case STONE: - data = 0; + if (col != null) { + data = col.getID(); + } else { + throw new InvalidItemException(arg, "Unknown cloth color '" + typeAndData[1] + "'"); + } break; - case SANDSTONE: - data = 1; - break; + case STEP: + case DOUBLE_STEP: + BlockType dataType = BlockType.lookup(typeAndData[1]); - case WOOD: - data = 2; - break; + if (dataType != null) { + switch (dataType) { + case STONE: + data = 0; + break; - case COBBLESTONE: - data = 3; + case SANDSTONE: + data = 1; + break; + + case WOOD: + data = 2; + break; + + case COBBLESTONE: + data = 3; + break; + case BRICK: + data = 4; + break; + case STONE_BRICK: + data = 5; + + default: + throw new InvalidItemException(arg, "Invalid step type '" + typeAndData[1] + "'"); + } + } else { + throw new InvalidItemException(arg, "Unknown step type '" + typeAndData[1] + "'"); + } break; - case BRICK: - data = 4; - break; - case STONE_BRICK: - data = 5; default: - throw new InvalidItemException(arg, "Invalid step type '" + typeAndData[1] + "'"); - } - } else { - throw new InvalidItemException(arg, "Unknown step type '" + typeAndData[1] + "'"); + throw new InvalidItemException(arg, "Unknown data value '" + typeAndData[1] + "'"); } - break; - - default: + } else { throw new InvalidItemException(arg, "Unknown data value '" + typeAndData[1] + "'"); } } @@ -375,49 +379,53 @@ public class WorldEdit { // Check if the item is allowed if (allAllowed || player.hasPermission("worldedit.anyblock") || !config.disallowedBlocks.contains(blockId)) { - switch (blockType) { - case SIGN_POST: - case WALL_SIGN: - // Allow special sign text syntax - String[] text = new String[4]; - text[0] = blockAndExtraData.length > 1 ? blockAndExtraData[1] : ""; - text[1] = blockAndExtraData.length > 2 ? blockAndExtraData[2] : ""; - text[2] = blockAndExtraData.length > 3 ? blockAndExtraData[3] : ""; - text[3] = blockAndExtraData.length > 4 ? blockAndExtraData[4] : ""; - return new SignBlock(blockType.getID(), data, text); + if (blockType != null) { + switch (blockType) { + case SIGN_POST: + case WALL_SIGN: + // Allow special sign text syntax + String[] text = new String[4]; + text[0] = blockAndExtraData.length > 1 ? blockAndExtraData[1] : ""; + text[1] = blockAndExtraData.length > 2 ? blockAndExtraData[2] : ""; + text[2] = blockAndExtraData.length > 3 ? blockAndExtraData[3] : ""; + text[3] = blockAndExtraData.length > 4 ? blockAndExtraData[4] : ""; + return new SignBlock(blockType.getID(), data, text); - case MOB_SPAWNER: - // Allow setting mob spawn type - if (blockAndExtraData.length > 1) { - String mobName = blockAndExtraData[1]; - for (MobType mobType : MobType.values()) { - if (mobType.getName().toLowerCase().equals(mobName.toLowerCase())) { - mobName = mobType.getName(); - break; + case MOB_SPAWNER: + // Allow setting mob spawn type + if (blockAndExtraData.length > 1) { + String mobName = blockAndExtraData[1]; + for (MobType mobType : MobType.values()) { + if (mobType.getName().toLowerCase().equals(mobName.toLowerCase())) { + mobName = mobType.getName(); + break; + } + } + if (!server.isValidMobType(mobName)) { + throw new InvalidItemException(arg, "Unknown mob type '" + mobName + "'"); + } + return new MobSpawnerBlock(data, mobName); + } else { + return new MobSpawnerBlock(data, MobType.PIG.getName()); } - } - if (!server.isValidMobType(mobName)) { - throw new InvalidItemException(arg, "Unknown mob type '" + mobName + "'"); - } - return new MobSpawnerBlock(data, mobName); - } else { - return new MobSpawnerBlock(data, MobType.PIG.getName()); - } - case NOTE_BLOCK: - // Allow setting note - if (blockAndExtraData.length > 1) { - byte note = Byte.parseByte(blockAndExtraData[1]); - if (note < 0 || note > 24) { - throw new InvalidItemException(arg, "Out of range note value: '" + blockAndExtraData[1] + "'"); - } else { - return new NoteBlock(data, note); - } - } else { - return new NoteBlock(data, (byte) 0); - } + case NOTE_BLOCK: + // Allow setting note + if (blockAndExtraData.length > 1) { + byte note = Byte.parseByte(blockAndExtraData[1]); + if (note < 0 || note > 24) { + throw new InvalidItemException(arg, "Out of range note value: '" + blockAndExtraData[1] + "'"); + } else { + return new NoteBlock(data, note); + } + } else { + return new NoteBlock(data, (byte) 0); + } - default: + default: + return new BaseBlock(blockId, data); + } + } else { return new BaseBlock(blockId, data); } } diff --git a/src/main/java/com/sk89q/worldedit/blocks/BlockID.java b/src/main/java/com/sk89q/worldedit/blocks/BlockID.java index 2d2139b5c..347303f5b 100644 --- a/src/main/java/com/sk89q/worldedit/blocks/BlockID.java +++ b/src/main/java/com/sk89q/worldedit/blocks/BlockID.java @@ -148,4 +148,5 @@ public final class BlockID { public static final int END_PORTAL = 119; public static final int END_PORTAL_FRAME = 120; public static final int END_STONE = 121; + public static final int DRAGON_EGG = 122; } diff --git a/src/main/java/com/sk89q/worldedit/blocks/BlockType.java b/src/main/java/com/sk89q/worldedit/blocks/BlockType.java index 0f2b2b22d..b9922faa7 100644 --- a/src/main/java/com/sk89q/worldedit/blocks/BlockType.java +++ b/src/main/java/com/sk89q/worldedit/blocks/BlockType.java @@ -157,7 +157,8 @@ public enum BlockType { CAULDRON(BlockID.CAULDRON, "Cauldron"), END_PORTAL(BlockID.END_PORTAL, "End Portal", "endportal", "blackstuff", "airportal", "weirdblackstuff"), END_PORTAL_FRAME(BlockID.END_PORTAL_FRAME, "End Portal Frame", "endportalframe", "airportalframe", "crystalblock"), - END_STONE(BlockID.END_STONE, "End Stone", "endstone", "enderstone", "endersand"); + END_STONE(BlockID.END_STONE, "End Stone", "endstone", "enderstone", "endersand"), + DRAGON_EGG(BlockID.DRAGON_EGG, "Dragon Egg", "dragonegg", "dragons"); /** * Stores a map of the IDs for fast access. diff --git a/src/main/java/com/sk89q/worldedit/blocks/ItemType.java b/src/main/java/com/sk89q/worldedit/blocks/ItemType.java index 63549b284..96ad3538c 100644 --- a/src/main/java/com/sk89q/worldedit/blocks/ItemType.java +++ b/src/main/java/com/sk89q/worldedit/blocks/ItemType.java @@ -158,6 +158,7 @@ public enum ItemType { END_PORTAL(BlockID.END_PORTAL, "End Portal", "endportal", "blackstuff", "airportal", "weirdblackstuff"), END_PORTAL_FRAME(BlockID.END_PORTAL_FRAME, "End Portal Frame", "endportalframe", "airportalframe", "crystalblock"), END_STONE(BlockID.END_STONE, "End Stone", "endstone", "enderstone", "endersand"), + DRAGON_EGG(BlockID.DRAGON_EGG, "Dragon Egg", "dragonegg", "dragons"), // Items IRON_SHOVEL(ItemID.IRON_SHOVEL, "Iron shovel", "ironshovel"),