From e291cccb94608d366440a51e1c46b555a8b5925d Mon Sep 17 00:00:00 2001 From: Matthew Miller Date: Sun, 1 Jul 2018 23:55:59 +1000 Subject: [PATCH] Move simulateBlockMine up to the platforms. --- .../com/sk89q/worldedit/blocks/BlockID.java | 36 -- .../com/sk89q/worldedit/blocks/BlockType.java | 466 ------------------ .../com/sk89q/worldedit/blocks/ItemID.java | 63 --- .../sk89q/worldedit/world/AbstractWorld.java | 23 - .../com/sk89q/worldedit/world/NullWorld.java | 4 + .../com/sk89q/worldedit/forge/ForgeWorld.java | 16 +- .../sk89q/worldedit/sponge/SpongeWorld.java | 5 + 7 files changed, 20 insertions(+), 593 deletions(-) delete mode 100644 worldedit-core/src/main/java/com/sk89q/worldedit/blocks/ItemID.java diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/BlockID.java b/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/BlockID.java index f9e7c43b7..b396728c3 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/BlockID.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/BlockID.java @@ -30,14 +30,10 @@ public final class BlockID { public static final int STONE = 1; public static final int GRASS = 2; public static final int DIRT = 3; - public static final int COBBLESTONE = 4; - public static final int WOOD = 5; // PLANKS public static final int SAPLING = 6; public static final int BEDROCK = 7; public static final int WATER = 8; // FLOWING_WATER public static final int STATIONARY_WATER = 9; // WATER - public static final int LAVA = 10; // FLOWING_LAVA - public static final int STATIONARY_LAVA = 11; // LAVA public static final int SAND = 12; public static final int GRAVEL = 13; public static final int GOLD_ORE = 14; @@ -45,13 +41,9 @@ public final class BlockID { public static final int COAL_ORE = 16; public static final int LOG = 17; public static final int LEAVES = 18; - public static final int SPONGE = 19; public static final int GLASS = 20; public static final int LAPIS_LAZULI_ORE = 21; // LAPIS_ORE - public static final int LAPIS_LAZULI_BLOCK = 22; // LAPIS_BLOCK public static final int DISPENSER = 23; - public static final int SANDSTONE = 24; - public static final int NOTE_BLOCK = 25; // NOTEBLOCK public static final int BED = 26; public static final int POWERED_RAIL = 27; // GOLDEN_RAIL public static final int DETECTOR_RAIL = 28; @@ -61,21 +53,13 @@ public final class BlockID { public static final int DEAD_BUSH = 32; // DEADBUSH public static final int PISTON_BASE = 33; // PISTON public static final int PISTON_EXTENSION = 34; // PISTON_HEAD - public static final int CLOTH = 35; // WOOL public static final int PISTON_MOVING_PIECE = 36; // PISTON_EXTENSION public static final int YELLOW_FLOWER = 37; public static final int RED_FLOWER = 38; public static final int BROWN_MUSHROOM = 39; public static final int RED_MUSHROOM = 40; - public static final int GOLD_BLOCK = 41; - public static final int IRON_BLOCK = 42; - public static final int DOUBLE_STEP = 43; // DOUBLE_STONE_SLAB public static final int STEP = 44; // STONE_SLAB - public static final int BRICK = 45; // BRICK_BLOCK public static final int TNT = 46; - public static final int BOOKCASE = 47; // BOOKSHELF - public static final int MOSSY_COBBLESTONE = 48; - public static final int OBSIDIAN = 49; public static final int TORCH = 50; public static final int FIRE = 51; public static final int MOB_SPAWNER = 52; @@ -85,10 +69,7 @@ public final class BlockID { public static final int CHEST = 54; public static final int REDSTONE_WIRE = 55; public static final int DIAMOND_ORE = 56; - public static final int DIAMOND_BLOCK = 57; - public static final int WORKBENCH = 58; // CRAFTING_TABLE public static final int CROPS = 59; // WHEAT - public static final int SOIL = 60; // FARMLAND public static final int FURNACE = 61; public static final int BURNING_FURNACE = 62; // LIT_FURNACE public static final int SIGN_POST = 63; // STANDING_SIGN @@ -108,11 +89,9 @@ public final class BlockID { public static final int STONE_BUTTON = 77; public static final int SNOW = 78; // SNOW_LAYER public static final int ICE = 79; - public static final int SNOW_BLOCK = 80; // SNOW public static final int CACTUS = 81; public static final int CLAY = 82; public static final int REED = 83; // REEDS - public static final int JUKEBOX = 84; public static final int FENCE = 85; public static final int PUMPKIN = 86; @Deprecated @@ -128,13 +107,10 @@ public final class BlockID { @Deprecated public static final int LOCKED_CHEST = 95; public static final int TRAP_DOOR = 96; // TRAPDOOR - public static final int SILVERFISH_BLOCK = 97; // MONSTER_EGG - public static final int STONE_BRICK = 98; // STONEBRICK public static final int BROWN_MUSHROOM_CAP = 99; // BROWN_MUSHROOM_BLOCK public static final int RED_MUSHROOM_CAP = 100; // RED_MUSHROOM_BLOCK public static final int IRON_BARS = 101; public static final int GLASS_PANE = 102; - public static final int MELON_BLOCK = 103; public static final int PUMPKIN_STEM = 104; public static final int MELON_STEM = 105; public static final int VINE = 106; @@ -143,19 +119,13 @@ public final class BlockID { public static final int STONE_BRICK_STAIRS = 109; public static final int MYCELIUM = 110; public static final int LILY_PAD = 111; // WATERLILY - public static final int NETHER_BRICK = 112; public static final int NETHER_BRICK_FENCE = 113; public static final int NETHER_BRICK_STAIRS = 114; public static final int NETHER_WART = 115; public static final int ENCHANTMENT_TABLE = 116; // ENCHANTING_TABLE public static final int BREWING_STAND = 117; public static final int CAULDRON = 118; - 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 REDSTONE_LAMP_OFF = 123; // REDSTONE_LAMP - public static final int REDSTONE_LAMP_ON = 124; // LIT_REDSTONE_LAMP - public static final int DOUBLE_WOODEN_STEP = 125; // DOUBLE_WOODEN_SLAB public static final int WOODEN_STEP = 126; // WOODEN_SLAB public static final int COCOA_PLANT = 127; // COCOA public static final int SANDSTONE_STAIRS = 128; @@ -163,11 +133,9 @@ public final class BlockID { public static final int ENDER_CHEST = 130; public static final int TRIPWIRE_HOOK = 131; public static final int TRIPWIRE = 132; - public static final int EMERALD_BLOCK = 133; public static final int SPRUCE_WOOD_STAIRS = 134; // SPRUCE_STAIRS public static final int BIRCH_WOOD_STAIRS = 135; // BRUCE_STAIRS public static final int JUNGLE_WOOD_STAIRS = 136; // JUNGLE_STAIRS - public static final int COMMAND_BLOCK = 137; public static final int COBBLESTONE_WALL = 139; public static final int FLOWER_POT = 140; public static final int CARROTS = 141; @@ -181,10 +149,8 @@ public final class BlockID { public static final int COMPARATOR_OFF = 149; // UNPOWERED_COMPARATOR public static final int COMPARATOR_ON = 150; // COMPARATOR public static final int DAYLIGHT_SENSOR = 151; // DAYLIGHT_DETECTOR - public static final int REDSTONE_BLOCK = 152; public static final int QUARTZ_ORE = 153; public static final int HOPPER = 154; - public static final int QUARTZ_BLOCK = 155; public static final int QUARTZ_STAIRS = 156; public static final int ACTIVATOR_RAIL = 157; public static final int DROPPER = 158; @@ -198,8 +164,6 @@ public final class BlockID { public static final int IRON_TRAP_DOOR = 167; public static final int HAY_BLOCK = 170; public static final int CARPET = 171; - public static final int HARDENED_CLAY = 172; - public static final int COAL_BLOCK = 173; public static final int PACKED_ICE = 174; public static final int DOUBLE_PLANT = 175; public static final int STANDING_BANNER = 176; diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/BlockType.java b/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/BlockType.java index 064562a82..44ccf731c 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/BlockType.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/BlockType.java @@ -27,11 +27,8 @@ import com.sk89q.worldedit.blocks.type.BlockStateHolder; import java.util.HashMap; import java.util.HashSet; import java.util.Map; -import java.util.Random; import java.util.Set; -import javax.annotation.Nullable; - /** * Block types. * @@ -460,469 +457,6 @@ public enum BlockType { return isTranslucent.contains(id); } - /** - * HashMap for getBlockBagItem. - */ - private static final Map dataBlockBagItems = new HashMap<>(); - private static final Map nonDataBlockBagItems = new HashMap<>(); - private static final BaseItem doNotDestroy = new BaseItemStack(BlockID.AIR, 0); - static { - /* - * rules: - * - * 1. block yields itself => addIdentity - * 2. block is part of a 2-block object => drop an appropriate item for one of the 2 blocks - * 3. block can be placed by right-clicking an obtainable item on the ground => use that item - * 4. block yields more than one item => addIdentities - * 5. block yields exactly one item => use that item - * 6. block is a liquid => drop nothing - * 7. block is created from thin air by the game other than by the map generator => drop nothing - */ - - nonDataBlockBagItems.put(BlockID.STONE, new BaseItem(BlockID.COBBLESTONE)); // rule 5 - nonDataBlockBagItems.put(BlockID.GRASS, new BaseItem(BlockID.DIRT)); // rule 5 - addIdentities(BlockID.DIRT, 3); // rule 1 - addIdentity(BlockID.COBBLESTONE); // rule 1 - addIdentities(BlockID.WOOD, 6); // rule 1 - addIdentities(BlockID.SAPLING, 6); // rule 1 - nonDataBlockBagItems.put(BlockID.BEDROCK, doNotDestroy); // exception - // WATER, rule 6 - // STATIONARY_WATER, rule 6 - // LAVA, rule 6 - // STATIONARY_LAVA, rule 6 - addIdentity(BlockID.SAND); // rule 1 - addIdentity(BlockID.GRAVEL); // rule 1 - addIdentity(BlockID.GOLD_ORE); // rule 1 - addIdentity(BlockID.IRON_ORE); // rule 1 - nonDataBlockBagItems.put(BlockID.COAL_ORE, new BaseItem(ItemID.COAL)); // rule 5 - addIdentities(BlockID.LOG, 4); // rule 1 - addIdentities(BlockID.LEAVES, 4); // rule 1 with shears, otherwise rule 3 - addIdentity(BlockID.SPONGE); // rule 1 - addIdentity(BlockID.GLASS); // rule 3 - addIdentity(BlockID.LAPIS_LAZULI_ORE); // rule 4 - addIdentity(BlockID.LAPIS_LAZULI_BLOCK); // rule 1 - addIdentity(BlockID.DISPENSER); // rule 1 - addIdentity(BlockID.SANDSTONE); // rule 1 - addIdentity(BlockID.NOTE_BLOCK); // rule 1 - addIdentities(BlockID.BED, 8); // rule 2 - addIdentity(BlockID.POWERED_RAIL); // rule 1 - addIdentity(BlockID.DETECTOR_RAIL); // rule 1 - addIdentity(BlockID.PISTON_STICKY_BASE); - nonDataBlockBagItems.put(BlockID.WEB, new BaseItem(ItemID.STRING)); // rule 5 - // LONG_GRASS - // DEAD_BUSH - addIdentity(BlockID.PISTON_BASE); - // PISTON_EXTENSION, rule 7 - addIdentities(BlockID.CLOTH, 16); // rule 1 - // PISTON_MOVING_PIECE, rule 7 - addIdentity(BlockID.YELLOW_FLOWER); // rule 1 - addIdentity(BlockID.RED_FLOWER); // rule 1 - addIdentity(BlockID.BROWN_MUSHROOM); // rule 1 - addIdentity(BlockID.RED_MUSHROOM); // rule 1 - addIdentity(BlockID.GOLD_BLOCK); // rule 1 - addIdentity(BlockID.IRON_BLOCK); // rule 1 - addIdentities(BlockID.DOUBLE_STEP, 7); // rule 3 - addIdentities(BlockID.STEP, 7); // rule 1 - addIdentity(BlockID.BRICK); // rule 1 - addIdentity(BlockID.TNT); - addIdentity(BlockID.BOOKCASE); // rule 3 - addIdentity(BlockID.MOSSY_COBBLESTONE); // rule 1 - addIdentity(BlockID.OBSIDIAN); // rule 1 - addIdentity(BlockID.TORCH); // rule 1 - // FIRE - // MOB_SPAWNER - addIdentity(BlockID.OAK_WOOD_STAIRS); // rule 1 - addIdentity(BlockID.CHEST); // rule 1 - nonDataBlockBagItems.put(BlockID.REDSTONE_WIRE, new BaseItem(ItemID.REDSTONE_DUST)); // rule 3 - nonDataBlockBagItems.put(BlockID.DIAMOND_ORE, new BaseItem(ItemID.DIAMOND)); // rule 5 - addIdentity(BlockID.DIAMOND_BLOCK); // rule 1 - addIdentity(BlockID.WORKBENCH); // rule 1 - nonDataBlockBagItems.put(BlockID.CROPS, new BaseItem(ItemID.SEEDS)); // rule 3 - nonDataBlockBagItems.put(BlockID.SOIL, new BaseItem(BlockID.DIRT)); // rule 5 - addIdentity(BlockID.FURNACE); // rule 1 - nonDataBlockBagItems.put(BlockID.BURNING_FURNACE, new BaseItem(BlockID.FURNACE)); - nonDataBlockBagItems.put(BlockID.SIGN_POST, new BaseItem(ItemID.SIGN)); // rule 3 - addIdentities(BlockID.WOODEN_DOOR, 8); // rule 2 - addIdentity(BlockID.LADDER); // rule 1 - addIdentity(BlockID.MINECART_TRACKS); // rule 1 - addIdentity(BlockID.COBBLESTONE_STAIRS); // rule 3 - nonDataBlockBagItems.put(BlockID.WALL_SIGN, new BaseItem(ItemID.SIGN)); // rule 3 - addIdentity(BlockID.LEVER); // rule 1 - addIdentity(BlockID.STONE_PRESSURE_PLATE); // rule 1 - addIdentities(BlockID.IRON_DOOR, 8); // rule 2 - addIdentity(BlockID.WOODEN_PRESSURE_PLATE); // rule 1 - addIdentity(BlockID.REDSTONE_ORE); // rule 4 - nonDataBlockBagItems.put(BlockID.GLOWING_REDSTONE_ORE, new BaseItem(BlockID.REDSTONE_ORE)); // rule 4 - nonDataBlockBagItems.put(BlockID.REDSTONE_TORCH_OFF, new BaseItem(BlockID.REDSTONE_TORCH_ON)); // rule 3 - addIdentity(BlockID.REDSTONE_TORCH_ON); // rule 1 - addIdentity(BlockID.STONE_BUTTON); // rule 1 - addIdentity(BlockID.SNOW); // rule 1 - addIdentity(BlockID.ICE); // exception - addIdentity(BlockID.SNOW_BLOCK); // rule 3 - addIdentity(BlockID.CACTUS); - addIdentity(BlockID.CLAY); // rule 3 - nonDataBlockBagItems.put(BlockID.REED, new BaseItem(ItemID.SUGAR_CANE_ITEM)); // rule 3 - addIdentity(BlockID.JUKEBOX); // rule 1 - addIdentity(BlockID.FENCE); // rule 1 - addIdentity(BlockID.PUMPKIN); // rule 1 - addIdentity(BlockID.NETHERRACK); // rule 1 - addIdentity(BlockID.SLOW_SAND); // rule 1 - addIdentity(BlockID.LIGHTSTONE); // rule 4 - // PORTAL - addIdentity(BlockID.JACKOLANTERN); // rule 1 - nonDataBlockBagItems.put(BlockID.CAKE_BLOCK, new BaseItem(ItemID.CAKE_ITEM)); // rule 3 - nonDataBlockBagItems.put(BlockID.REDSTONE_REPEATER_OFF, new BaseItem(ItemID.REDSTONE_REPEATER)); // rule 3 - nonDataBlockBagItems.put(BlockID.REDSTONE_REPEATER_ON, new BaseItem(ItemID.REDSTONE_REPEATER)); // rule 3 - addIdentities(BlockID.STAINED_GLASS_PANE, 16); // ??? - addIdentity(BlockID.TRAP_DOOR); // rule 1 - nonDataBlockBagItems.put(BlockID.SILVERFISH_BLOCK, doNotDestroy); // exception - addIdentity(BlockID.STONE_BRICK); // rule 1 - addIdentity(BlockID.BROWN_MUSHROOM_CAP); - addIdentity(BlockID.RED_MUSHROOM_CAP); - addIdentity(BlockID.IRON_BARS); // rule 1 - addIdentity(BlockID.GLASS_PANE); // rule 1 - addIdentity(BlockID.MELON_BLOCK); // rule 3 - nonDataBlockBagItems.put(BlockID.PUMPKIN_STEM, new BaseItem(ItemID.PUMPKIN_SEEDS)); // rule 3 - nonDataBlockBagItems.put(BlockID.MELON_STEM, new BaseItem(ItemID.MELON_SEEDS)); // rule 3 - nonDataBlockBagItems.put(BlockID.VINE, doNotDestroy); // exception - addIdentity(BlockID.FENCE_GATE); // rule 1 - addIdentity(BlockID.BRICK_STAIRS); // rule 3 - addIdentity(BlockID.STONE_BRICK_STAIRS); // rule 3 - - // 1.9 blocks - nonDataBlockBagItems.put(BlockID.MYCELIUM, new BaseItem(BlockID.DIRT)); - addIdentity(BlockID.LILY_PAD); - addIdentity(BlockID.NETHER_BRICK); - addIdentity(BlockID.NETHER_BRICK_FENCE); - addIdentity(BlockID.NETHER_BRICK_STAIRS); - nonDataBlockBagItems.put(BlockID.NETHER_WART, new BaseItem(ItemID.NETHER_WART_SEED)); - addIdentity(BlockID.ENCHANTMENT_TABLE); - nonDataBlockBagItems.put(BlockID.BREWING_STAND, new BaseItem(ItemID.BREWING_STAND)); - nonDataBlockBagItems.put(BlockID.CAULDRON, new BaseItem(ItemID.CAULDRON)); - nonDataBlockBagItems.put(BlockID.END_PORTAL, doNotDestroy); - nonDataBlockBagItems.put(BlockID.END_PORTAL_FRAME, doNotDestroy); - addIdentity(BlockID.END_STONE); - - addIdentity(BlockID.REDSTONE_LAMP_OFF); - nonDataBlockBagItems.put(BlockID.REDSTONE_LAMP_ON, new BaseItem(BlockID.REDSTONE_LAMP_OFF)); - - addIdentities(BlockID.DOUBLE_WOODEN_STEP, 7); // rule 3 - addIdentities(BlockID.WOODEN_STEP, 7); // rule 1 - nonDataBlockBagItems.put(BlockID.COCOA_PLANT, new BaseItem(ItemID.INK_SACK)); // rule 3 TODO data removed - addIdentity(BlockID.SANDSTONE_STAIRS); // rule 1 - nonDataBlockBagItems.put(BlockID.EMERALD_ORE, new BaseItem(ItemID.EMERALD)); // rule 5 - addIdentity(BlockID.ENDER_CHEST); // rule 3 - addIdentity(BlockID.TRIPWIRE_HOOK); // rule 1 - nonDataBlockBagItems.put(BlockID.TRIPWIRE, new BaseItem(ItemID.STRING)); // rule 3 - addIdentity(BlockID.EMERALD_BLOCK); // rule 1 - addIdentity(BlockID.SPRUCE_WOOD_STAIRS); // rule 1 - addIdentity(BlockID.BIRCH_WOOD_STAIRS); // rule 1 - addIdentity(BlockID.JUNGLE_WOOD_STAIRS); // rule 1 - addIdentity(BlockID.COMMAND_BLOCK); // rule 1 - addIdentities(BlockID.COBBLESTONE_WALL, 1); // rule 4 - nonDataBlockBagItems.put(BlockID.FLOWER_POT, new BaseItemStack(ItemID.FLOWER_POT)); // rule 3 - nonDataBlockBagItems.put(BlockID.CARROTS, new BaseItemStack(ItemID.CARROT)); // rule 3 - nonDataBlockBagItems.put(BlockID.POTATOES, new BaseItemStack(ItemID.POTATO)); // rule 3 - addIdentity(BlockID.WOODEN_BUTTON); // rule 1 - nonDataBlockBagItems.put(BlockID.HEAD, doNotDestroy); // exception, can't handle TE data - addIdentities(BlockID.ANVIL, 2); // rule 4 - addIdentity(BlockID.TRAPPED_CHEST); // rule 1 - addIdentity(BlockID.PRESSURE_PLATE_LIGHT); // rule 1 - addIdentity(BlockID.PRESSURE_PLATE_HEAVY); // rule 1 - nonDataBlockBagItems.put(BlockID.COMPARATOR_OFF, new BaseItemStack(ItemID.COMPARATOR)); // rule 3 - nonDataBlockBagItems.put(BlockID.COMPARATOR_ON, new BaseItemStack(ItemID.COMPARATOR)); // rule 3 - addIdentity(BlockID.DAYLIGHT_SENSOR); // rule 1 - addIdentity(BlockID.REDSTONE_BLOCK); // rule 1 - nonDataBlockBagItems.put(BlockID.QUARTZ_ORE, new BaseItemStack(ItemID.NETHER_QUARTZ)); // rule 3 - addIdentity(BlockID.HOPPER); // rule 1 - addIdentities(BlockID.QUARTZ_BLOCK, 1); // rule 4 - for (int i = 2; i <= 4; i++) { - dataBlockBagItems.put(typeDataKey(BlockID.QUARTZ_BLOCK, i), new BaseItem(BlockID.QUARTZ_BLOCK)); // rule 4, quartz pillars TODO data - // removed - } - addIdentity(BlockID.QUARTZ_STAIRS); // rule 1 - addIdentity(BlockID.ACTIVATOR_RAIL); // rule 1 - addIdentity(BlockID.DROPPER); // rule 1 - - addIdentities(BlockID.STAINED_CLAY, 16); // rule 1 - addIdentity(BlockID.HAY_BLOCK); // rule 1 - addIdentities(BlockID.CARPET, 16); // rule 1 - addIdentity(BlockID.HARDENED_CLAY); // rule 1 - addIdentity(BlockID.COAL_BLOCK); // rule 1 - - addIdentities(BlockID.LOG2, 1); - addIdentities(BlockID.LEAVES2, 1); - addIdentity(BlockID.ACACIA_STAIRS); - addIdentity(BlockID.DARK_OAK_STAIRS); - addIdentity(BlockID.PACKED_ICE); - addIdentities(BlockID.STAINED_GLASS_PANE, 16); - addIdentities(BlockID.DOUBLE_PLANT, 6); - - addIdentities(BlockID.ACACIA_DOOR, 8); // rule 2 - addIdentities(BlockID.BIRCH_DOOR, 8); // rule 2 - addIdentities(BlockID.JUNGLE_DOOR, 8); // rule 2 - addIdentities(BlockID.DARK_OAK_DOOR, 8); // rule 2 - addIdentities(BlockID.SPRUCE_DOOR, 8); // rule 2 - } - - /** - * Get the block or item that this block can be constructed from. If nothing is - * dropped, a block with a BaseItemStack of type AIR and size 0 will be returned. - * If the block should not be destroyed (i.e. bedrock), null will be returned. - * - * @param type the type of of the block - * @param data the data value of the block - * @return the item or null - */ - @Nullable - public static BaseItem getBlockBagItem(int type, int data) { - BaseItem dropped = nonDataBlockBagItems.get(type); - if (dropped != null) return dropped; - - dropped = dataBlockBagItems.get(typeDataKey(type, data)); - - if (dropped == null) { - return new BaseItemStack(BlockID.AIR, 0); - } - - if (dropped == doNotDestroy) { - return null; - } - - return dropped; - } - - private static void addIdentity(int type) { - nonDataBlockBagItems.put(type, new BaseItem(type)); - } - - private static void addIdentities(int type, int maxData) { - for (int data = 0; data < maxData; ++data) { - dataBlockBagItems.put(typeDataKey(type, data), new BaseItem(type)); // TODO data removed - } - } - - private static final Random random = new Random(); - - /** - * Get the block drop for a block. - * - * @param id the type ID of the block - * @param data the data value - * @return an item or null - */ - @Nullable - public static BaseItemStack getBlockDrop(int id, short data) { - int store; - switch (id) { - case BlockID.STONE: - return new BaseItemStack(BlockID.COBBLESTONE); - - case BlockID.GRASS: - return new BaseItemStack(BlockID.DIRT); - - case BlockID.GRAVEL: - if (random.nextInt(10) == 0) { - return new BaseItemStack(ItemID.FLINT); - } else { - return new BaseItemStack(BlockID.GRAVEL); - } - - case BlockID.COAL_ORE: - return new BaseItemStack(ItemID.COAL); - - case BlockID.LEAVES: - if (random.nextDouble() > 0.95) { - return new BaseItemStack(BlockID.SAPLING, 1, data); - } else { - return null; - } - - case BlockID.LAPIS_LAZULI_ORE: - return new BaseItemStack(ItemID.INK_SACK, random.nextInt(5) + 4, (short) 4); - - case BlockID.BED: - return new BaseItemStack(ItemID.BED_ITEM); - - case BlockID.LONG_GRASS: - if (random.nextInt(8) == 0) { - return new BaseItemStack(ItemID.SEEDS); - } else { - return null; - } - - case BlockID.DOUBLE_STEP: - return new BaseItemStack(BlockID.STEP, 2, data); - - case BlockID.REDSTONE_WIRE: - return new BaseItemStack(ItemID.REDSTONE_DUST); - - case BlockID.DIAMOND_ORE: - return new BaseItemStack(ItemID.DIAMOND); - - case BlockID.CROPS: - if (data == 7) return new BaseItemStack(ItemID.WHEAT); - return new BaseItemStack(ItemID.SEEDS); - - case BlockID.SOIL: - return new BaseItemStack(BlockID.DIRT); - - case BlockID.BURNING_FURNACE: - return new BaseItemStack(BlockID.FURNACE); - - case BlockID.SIGN_POST: - return new BaseItemStack(ItemID.SIGN); - - case BlockID.WOODEN_DOOR: - return new BaseItemStack(ItemID.WOODEN_DOOR_ITEM); - - case BlockID.WALL_SIGN: - return new BaseItemStack(ItemID.SIGN); - - case BlockID.IRON_DOOR: - return new BaseItemStack(ItemID.IRON_DOOR_ITEM); - - case BlockID.REDSTONE_ORE: - case BlockID.GLOWING_REDSTONE_ORE: - return new BaseItemStack(ItemID.REDSTONE_DUST, (random.nextInt(2) + 4)); - - case BlockID.REDSTONE_TORCH_OFF: - return new BaseItemStack(BlockID.REDSTONE_TORCH_ON); - - case BlockID.CLAY: - return new BaseItemStack(ItemID.CLAY_BALL, 4); - - case BlockID.REED: - return new BaseItemStack(ItemID.SUGAR_CANE_ITEM); - - case BlockID.LIGHTSTONE: - return new BaseItemStack(ItemID.LIGHTSTONE_DUST, (random.nextInt(3) + 2)); - - case BlockID.REDSTONE_REPEATER_OFF: - case BlockID.REDSTONE_REPEATER_ON: - return new BaseItemStack(ItemID.REDSTONE_REPEATER); - - case BlockID.BROWN_MUSHROOM_CAP: - store = random.nextInt(10); - if (store == 0) { - return new BaseItemStack(BlockID.BROWN_MUSHROOM, 2); - } else if (store == 1) { - return new BaseItemStack(BlockID.BROWN_MUSHROOM); - } else { - return null; - } - - case BlockID.RED_MUSHROOM_CAP: - store = random.nextInt(10); - if (store == 0) { - return new BaseItemStack(BlockID.RED_MUSHROOM, 2); - } else if (store == 1) { - return new BaseItemStack(BlockID.RED_MUSHROOM); - } else { - return null; - } - - case BlockID.MELON_BLOCK: - return new BaseItemStack(ItemID.MELON, (random.nextInt(5) + 3)); - - case BlockID.PUMPKIN_STEM: - return new BaseItemStack(ItemID.PUMPKIN_SEEDS); - - case BlockID.MELON_STEM: - return new BaseItemStack(ItemID.MELON_SEEDS); - - case BlockID.MYCELIUM: - return new BaseItemStack(BlockID.DIRT); - - case BlockID.LILY_PAD: - return new BaseItemStack(BlockID.LILY_PAD); - - case BlockID.NETHER_WART: - return new BaseItemStack(ItemID.NETHER_WART_SEED, random.nextInt(3) + 1); - - case BlockID.BREWING_STAND: - return new BaseItemStack(ItemID.BREWING_STAND); - - case BlockID.CAULDRON: - return new BaseItemStack(ItemID.CAULDRON); - - case BlockID.REDSTONE_LAMP_ON: - return new BaseItemStack(BlockID.REDSTONE_LAMP_OFF); - - case BlockID.DOUBLE_WOODEN_STEP: - return new BaseItemStack(BlockID.WOODEN_STEP, 2, data); - - case BlockID.COCOA_PLANT: - return new BaseItemStack(ItemID.INK_SACK, (data >= 2 ? 3 : 1), (short) 3); - - case BlockID.EMERALD_ORE: - return new BaseItemStack(ItemID.EMERALD); - - case BlockID.TRIPWIRE: - return new BaseItemStack(ItemID.STRING); - - case BlockID.FLOWER_POT: - return new BaseItemStack(ItemID.FLOWER_POT); - - case BlockID.CARROTS: - return new BaseItemStack(ItemID.CARROT, random.nextInt(3) + 1); - - case BlockID.POTATOES: - return new BaseItemStack(ItemID.POTATO, random.nextInt(3) + 1); - - case BlockID.COMPARATOR_OFF: - case BlockID.COMPARATOR_ON: - return new BaseItemStack(ItemID.COMPARATOR); - - case BlockID.QUARTZ_ORE: - return new BaseItemStack(ItemID.NETHER_QUARTZ); - - case BlockID.QUARTZ_BLOCK: - return new BaseItemStack(BlockID.QUARTZ_BLOCK, 1, (data >= 2 ? 2 : data)); - - case BlockID.LOG: - return new BaseItemStack(BlockID.LOG, 1, (short) (data & 0x3)); // strip orientation data - - case BlockID.HAY_BLOCK: - return new BaseItemStack(BlockID.HAY_BLOCK); // strip orientation data - - case BlockID.OAK_WOOD_STAIRS: - case BlockID.COBBLESTONE_STAIRS: - case BlockID.BRICK_STAIRS: - case BlockID.STONE_BRICK_STAIRS: - case BlockID.NETHER_BRICK_STAIRS: - case BlockID.SPRUCE_WOOD_STAIRS: - case BlockID.BIRCH_WOOD_STAIRS: - case BlockID.JUNGLE_WOOD_STAIRS: - case BlockID.QUARTZ_STAIRS: - return new BaseItemStack(id); // strip data from stairs - - case BlockID.BEDROCK: - case BlockID.WATER: - case BlockID.STATIONARY_WATER: - case BlockID.LAVA: - case BlockID.STATIONARY_LAVA: - case BlockID.GLASS: - case BlockID.STAINED_GLASS_PANE: - case BlockID.PISTON_EXTENSION: - case BlockID.BOOKCASE: - case BlockID.FIRE: - case BlockID.MOB_SPAWNER: - case BlockID.SNOW: - case BlockID.ICE: - case BlockID.PORTAL: - case BlockID.AIR: - case BlockID.SILVERFISH_BLOCK: - case BlockID.VINE: - case BlockID.END_PORTAL: - case BlockID.END_PORTAL_FRAME: - case BlockID.HEAD: - return null; - } - - return new BaseItemStack(id); - } - private static final Map dataAttachments = new HashMap<>(); private static final Map nonDataAttachments = new HashMap<>(); static { diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/ItemID.java b/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/ItemID.java deleted file mode 100644 index 92ccdd370..000000000 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/ItemID.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * WorldEdit, a Minecraft world manipulation toolkit - * Copyright (C) sk89q - * Copyright (C) WorldEdit team and contributors - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - -package com.sk89q.worldedit.blocks; - -/** - * List of item IDs. - * - * {@deprecated Please use {@link com.sk89q.worldedit.blocks.type.ItemTypes}} - */ -@Deprecated -public final class ItemID { - - public static final int COAL = 263; - public static final int DIAMOND = 264; - public static final int STRING = 287; - public static final int SEEDS = 295; - public static final int WHEAT = 296; - public static final int FLINT = 318; - public static final int SIGN = 323; - public static final int WOODEN_DOOR_ITEM = 324; - public static final int IRON_DOOR_ITEM = 330; - public static final int REDSTONE_DUST = 331; - public static final int CLAY_BALL = 337; - public static final int SUGAR_CANE_ITEM = 338; - public static final int LIGHTSTONE_DUST = 348; - public static final int INK_SACK = 351; - public static final int CAKE_ITEM = 354; - public static final int BED_ITEM = 355; - public static final int REDSTONE_REPEATER = 356; - public static final int MELON = 360; - public static final int PUMPKIN_SEEDS = 361; - public static final int MELON_SEEDS = 362; - public static final int NETHER_WART_SEED = 372; - public static final int BREWING_STAND = 379; - public static final int CAULDRON = 380; - public static final int EMERALD = 388; - public static final int FLOWER_POT = 390; - public static final int CARROT = 391; - public static final int POTATO = 392; - public static final int COMPARATOR = 404; - public static final int NETHER_QUARTZ = 406; - - private ItemID() { - } - -} diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/AbstractWorld.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/AbstractWorld.java index e838ff098..ce5b6fc8d 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/AbstractWorld.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/AbstractWorld.java @@ -22,10 +22,8 @@ package com.sk89q.worldedit.world; import com.sk89q.worldedit.BlockVector2D; import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.WorldEditException; -import com.sk89q.worldedit.blocks.BaseBlock; import com.sk89q.worldedit.blocks.BaseItem; import com.sk89q.worldedit.blocks.BaseItemStack; -import com.sk89q.worldedit.blocks.BlockType; import com.sk89q.worldedit.blocks.type.BlockState; import com.sk89q.worldedit.blocks.type.BlockStateHolder; import com.sk89q.worldedit.blocks.type.BlockTypes; @@ -77,27 +75,6 @@ public abstract class AbstractWorld implements World { } } - @Override - public void simulateBlockMine(Vector pt) { - BaseBlock block = getLazyBlock(pt); - BaseItemStack stack = BlockType.getBlockDrop(block.getId(), (short) block.getData()); - - if (stack != null) { - final int amount = stack.getAmount(); - if (amount > 1) { - dropItem(pt, new BaseItemStack(stack.getType(), stack.getNbtData(), 1), amount); - } else { - dropItem(pt, stack, amount); - } - } - - try { - setBlock(pt, BlockTypes.AIR.getDefaultState()); - } catch (WorldEditException e) { - throw new RuntimeException(e); - } - } - @Override public void checkLoadedChunk(Vector pt) { } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/NullWorld.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/NullWorld.java index 9bfaa02fe..b50e2c3f4 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/NullWorld.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/NullWorld.java @@ -87,6 +87,10 @@ public class NullWorld extends AbstractWorld { public void dropItem(Vector position, BaseItemStack item) { } + @Override + public void simulateBlockMine(Vector position) { + } + @Override public boolean regenerate(Region region, EditSession editSession) { return false; diff --git a/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgeWorld.java b/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgeWorld.java index f086e171d..2e30ab7f3 100644 --- a/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgeWorld.java +++ b/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgeWorld.java @@ -19,6 +19,8 @@ package com.sk89q.worldedit.forge; +import static com.google.common.base.Preconditions.checkNotNull; + import com.google.common.io.Files; import com.sk89q.jnbt.CompoundTag; import com.sk89q.worldedit.BlockVector; @@ -45,8 +47,6 @@ import com.sk89q.worldedit.util.Location; import com.sk89q.worldedit.util.TreeGenerator.TreeType; import com.sk89q.worldedit.world.AbstractWorld; import com.sk89q.worldedit.world.biome.BaseBiome; -import com.sk89q.worldedit.world.registry.Registries; - import net.minecraft.block.Block; import net.minecraft.block.BlockLeaves; import net.minecraft.block.BlockOldLeaf; @@ -88,15 +88,13 @@ import net.minecraft.world.gen.feature.WorldGenTrees; import net.minecraft.world.gen.feature.WorldGenerator; import net.minecraftforge.common.DimensionManager; -import javax.annotation.Nullable; - import java.io.File; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; import java.util.Random; -import static com.google.common.base.Preconditions.checkNotNull; +import javax.annotation.Nullable; /** * An adapter to Minecraft worlds for WorldEdit. @@ -267,6 +265,14 @@ public class ForgeWorld extends AbstractWorld { getWorld().spawnEntity(entity); } + @Override + public void simulateBlockMine(Vector position) { + BlockPos pos = ForgeAdapter.toBlockPos(position); + IBlockState state = getWorld().getBlockState(pos); + state.getBlock().dropBlockAsItem(getWorld(), pos, state, 0); + getWorld().setBlockToAir(pos); + } + @Override public boolean regenerate(Region region, EditSession editSession) { // Don't even try to regen if it's going to fail. diff --git a/worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongeWorld.java b/worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongeWorld.java index a0eb80ed9..33b2b6f5f 100644 --- a/worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongeWorld.java +++ b/worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongeWorld.java @@ -215,6 +215,11 @@ public abstract class SpongeWorld extends AbstractWorld { getWorld().spawnEntity(entity); } + @Override + public void simulateBlockMine(Vector position) { + // TODO + } + @Override public int hashCode() { return getWorld().hashCode();