Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
at develop 241 lines 16 kB view raw
1package net.minecraft.server; 2 3import java.util.ArrayList; 4import java.util.Collections; 5import java.util.HashMap; 6import java.util.List; 7 8import uk.betacraft.uberbukkit.Uberbukkit; 9import uk.betacraft.uberbukkit.UberbukkitConfig; 10 11public class CraftingManager { 12 13 private static final CraftingManager a = new CraftingManager(); 14 private List b = new ArrayList(); 15 16 public static final CraftingManager getInstance() { 17 return a; 18 } 19 20 private CraftingManager() { 21 (new RecipesTools()).a(this); 22 (new RecipesWeapons()).a(this); 23 (new RecipeIngots()).a(this); 24 (new RecipesFood()).a(this); 25 (new RecipesCrafting()).a(this); 26 (new RecipesArmor()).a(this); 27 // uberbukkit 28 if (Uberbukkit.getTargetPVN() >= 8) { 29 (new RecipesDyes()).a(this); 30 this.registerShapedRecipe(new ItemStack(Block.SANDSTONE), new Object[] { "##", "##", Character.valueOf('#'), Block.SAND }); 31 this.registerShapedRecipe(new ItemStack(Block.NOTE_BLOCK, 1), new Object[] { "###", "#X#", "###", Character.valueOf('#'), Block.WOOD, Character.valueOf('X'), Item.REDSTONE }); 32 this.registerShapedRecipe(new ItemStack(Block.DISPENSER, 1), new Object[] { "###", "#X#", "#R#", Character.valueOf('#'), Block.COBBLESTONE, Character.valueOf('X'), Item.BOW, Character.valueOf('R'), Item.REDSTONE }); 33 this.registerShapedRecipe(new ItemStack(Item.CAKE, 1), new Object[] { "AAA", "BEB", "CCC", Character.valueOf('A'), Item.MILK_BUCKET, Character.valueOf('B'), Item.SUGAR, Character.valueOf('C'), Item.WHEAT, Character.valueOf('E'), Item.EGG }); 34 this.registerShapedRecipe(new ItemStack(Item.SUGAR, 1), new Object[] { "#", Character.valueOf('#'), Item.SUGAR_CANE }); 35 } 36 37 if (Uberbukkit.getTargetPVN() >= 9) { 38 this.registerShapedRecipe(new ItemStack(Item.DIODE, 1), new Object[] { "#X#", "III", Character.valueOf('#'), Block.REDSTONE_TORCH_ON, Character.valueOf('X'), Item.REDSTONE, Character.valueOf('I'), Block.STONE }); 39 this.registerShapedRecipe(new ItemStack(Item.BED, 1), new Object[] { "###", "XXX", Character.valueOf('#'), Block.WOOL, Character.valueOf('X'), Block.WOOD }); 40 41 // pressure plate recipe 42 this.registerShapedRecipe(new ItemStack(Block.STONE_PLATE, 1), new Object[] { "##", Character.valueOf('#'), Block.STONE }); 43 this.registerShapedRecipe(new ItemStack(Block.WOOD_PLATE, 1), new Object[] { "##", Character.valueOf('#'), Block.WOOD }); 44 } else { 45 this.registerShapedRecipe(new ItemStack(Block.STONE_PLATE, 1), new Object[] { "###", Character.valueOf('#'), Block.STONE }); 46 this.registerShapedRecipe(new ItemStack(Block.WOOD_PLATE, 1), new Object[] { "###", Character.valueOf('#'), Block.WOOD }); 47 } 48 49 if (Uberbukkit.getTargetPVN() >= 11) { 50 this.registerShapedRecipe(new ItemStack(Block.GOLDEN_RAIL, 6), new Object[] { "X X", "X#X", "XRX", Character.valueOf('X'), Item.GOLD_INGOT, Character.valueOf('R'), Item.REDSTONE, Character.valueOf('#'), Item.STICK }); 51 this.registerShapedRecipe(new ItemStack(Block.DETECTOR_RAIL, 6), new Object[] { "X X", "X#X", "XRX", Character.valueOf('X'), Item.IRON_INGOT, Character.valueOf('R'), Item.REDSTONE, Character.valueOf('#'), Block.STONE_PLATE }); 52 } 53 54 if (Uberbukkit.getTargetPVN() >= 12) { 55 this.registerShapedRecipe(new ItemStack(Item.MAP, 1), new Object[] { "###", "#X#", "###", Character.valueOf('#'), Item.PAPER, Character.valueOf('X'), Item.COMPASS }); 56 } 57 58 if (Uberbukkit.getTargetPVN() >= 14) { 59 this.registerShapedRecipe(new ItemStack(Block.PISTON, 1), new Object[] { "TTT", "#X#", "#R#", Character.valueOf('#'), Block.COBBLESTONE, Character.valueOf('X'), Item.IRON_INGOT, Character.valueOf('R'), Item.REDSTONE, Character.valueOf('T'), Block.WOOD }); 60 this.registerShapedRecipe(new ItemStack(Block.PISTON_STICKY, 1), new Object[] { "S", "P", Character.valueOf('S'), Item.SLIME_BALL, Character.valueOf('P'), Block.PISTON }); 61 } 62 63 if (!UberbukkitConfig.getInstance().getBoolean("mechanics.glowstone_pre1_6_6", false)) { 64 this.registerShapedRecipe(new ItemStack(Block.GLOWSTONE, 1), new Object[] { "##", "##", Character.valueOf('#'), Item.GLOWSTONE_DUST }); 65 } else { 66 this.registerShapedRecipe(new ItemStack(Block.GLOWSTONE, 1), new Object[] { "###", "###", "###", Character.valueOf('#'), Item.GLOWSTONE_DUST }); 67 } 68 69 if (!UberbukkitConfig.getInstance().getBoolean("mechanics.wool_recipe_pre1_6_6", false)) { 70 this.registerShapedRecipe(new ItemStack(Block.WOOL, 1), new Object[] { "##", "##", Character.valueOf('#'), Item.STRING }); 71 } else { 72 this.registerShapedRecipe(new ItemStack(Block.WOOL, 1), new Object[] { "###", "###", "###", Character.valueOf('#'), Item.STRING }); 73 } 74 75 if (UberbukkitConfig.getInstance().getBoolean("mechanics.old_slab_recipe", false)) { 76 this.registerShapedRecipe(new ItemStack(Block.STEP, 3, 0), new Object[] { "###", Character.valueOf('#'), Block.COBBLESTONE }); 77 if (Uberbukkit.getTargetPVN() >= 9) { 78 this.registerShapedRecipe(new ItemStack(Block.STEP, 3, 1), new Object[] { "###", Character.valueOf('#'), Block.SANDSTONE }); 79 this.registerShapedRecipe(new ItemStack(Block.STEP, 3, 2), new Object[] { "###", Character.valueOf('#'), Block.WOOD }); 80 } 81 } else { 82 this.registerShapedRecipe(new ItemStack(Block.STEP, 3, 0), new Object[] { "###", Character.valueOf('#'), Block.STONE }); 83 if (Uberbukkit.getTargetPVN() >= 9) { 84 this.registerShapedRecipe(new ItemStack(Block.STEP, 3, 3), new Object[] { "###", Character.valueOf('#'), Block.COBBLESTONE }); 85 this.registerShapedRecipe(new ItemStack(Block.STEP, 3, 1), new Object[] { "###", Character.valueOf('#'), Block.SANDSTONE }); 86 this.registerShapedRecipe(new ItemStack(Block.STEP, 3, 2), new Object[] { "###", Character.valueOf('#'), Block.WOOD }); 87 } 88 } 89 90 this.registerShapedRecipe(new ItemStack(Item.PAPER, 3), new Object[] { "###", Character.valueOf('#'), Item.SUGAR_CANE }); 91 this.registerShapedRecipe(new ItemStack(Item.BOOK, 1), new Object[] { "#", "#", "#", Character.valueOf('#'), Item.PAPER }); 92 this.registerShapedRecipe(new ItemStack(Block.FENCE, 2), new Object[] { "###", "###", Character.valueOf('#'), Item.STICK }); 93 this.registerShapedRecipe(new ItemStack(Block.JUKEBOX, 1), new Object[] { "###", "#X#", "###", Character.valueOf('#'), Block.WOOD, Character.valueOf('X'), Item.DIAMOND }); 94 this.registerShapedRecipe(new ItemStack(Block.BOOKSHELF, 1), new Object[] { "###", "XXX", "###", Character.valueOf('#'), Block.WOOD, Character.valueOf('X'), Item.BOOK }); 95 this.registerShapedRecipe(new ItemStack(Block.SNOW_BLOCK, 1), new Object[] { "##", "##", Character.valueOf('#'), Item.SNOW_BALL }); 96 this.registerShapedRecipe(new ItemStack(Block.CLAY, 1), new Object[] { "##", "##", Character.valueOf('#'), Item.CLAY_BALL }); 97 this.registerShapedRecipe(new ItemStack(Block.BRICK, 1), new Object[] { "##", "##", Character.valueOf('#'), Item.CLAY_BRICK }); 98 this.registerShapedRecipe(new ItemStack(Block.TNT, 1), new Object[] { "X#X", "#X#", "X#X", Character.valueOf('X'), Item.SULPHUR, Character.valueOf('#'), Block.SAND }); 99 100 // uberbukkit 101 ItemStack ladder = new ItemStack(Block.LADDER, 2); 102 if (UberbukkitConfig.getInstance().getBoolean("mechanics.allow_ladder_gap", false)) { 103 ladder = new ItemStack(Block.LADDER, 1); 104 } 105 this.registerShapedRecipe(ladder, new Object[] { "# #", "###", "# #", Character.valueOf('#'), Item.STICK }); 106 107 this.registerShapedRecipe(new ItemStack(Item.WOOD_DOOR, 1), new Object[] { "##", "##", "##", Character.valueOf('#'), Block.WOOD }); 108 if (Uberbukkit.getTargetPVN() >= 13) { 109 this.registerShapedRecipe(new ItemStack(Block.TRAP_DOOR, 2), new Object[] { "###", "###", Character.valueOf('#'), Block.WOOD }); 110 } 111 this.registerShapedRecipe(new ItemStack(Item.IRON_DOOR, 1), new Object[] { "##", "##", "##", Character.valueOf('#'), Item.IRON_INGOT }); 112 this.registerShapedRecipe(new ItemStack(Item.SIGN, 1), new Object[] { "###", "###", " X ", Character.valueOf('#'), Block.WOOD, Character.valueOf('X'), Item.STICK }); 113 114 this.registerShapedRecipe(new ItemStack(Block.WOOD, 4), new Object[] { "#", Character.valueOf('#'), Block.LOG }); 115 this.registerShapedRecipe(new ItemStack(Item.STICK, 4), new Object[] { "#", "#", Character.valueOf('#'), Block.WOOD }); 116 this.registerShapedRecipe(new ItemStack(Block.TORCH, 4), new Object[] { "X", "#", Character.valueOf('X'), Item.COAL, Character.valueOf('#'), Item.STICK }); 117 this.registerShapedRecipe(new ItemStack(Block.TORCH, 4), new Object[] { "X", "#", Character.valueOf('X'), new ItemStack(Item.COAL, 1, 1), Character.valueOf('#'), Item.STICK }); 118 this.registerShapedRecipe(new ItemStack(Item.BOWL, 4), new Object[] { "# #", " # ", Character.valueOf('#'), Block.WOOD }); 119 this.registerShapedRecipe(new ItemStack(Block.RAILS, 16), new Object[] { "X X", "X#X", "X X", Character.valueOf('X'), Item.IRON_INGOT, Character.valueOf('#'), Item.STICK }); 120 this.registerShapedRecipe(new ItemStack(Item.MINECART, 1), new Object[] { "# #", "###", Character.valueOf('#'), Item.IRON_INGOT }); 121 this.registerShapedRecipe(new ItemStack(Block.JACK_O_LANTERN, 1), new Object[] { "A", "B", Character.valueOf('A'), Block.PUMPKIN, Character.valueOf('B'), Block.TORCH }); 122 this.registerShapedRecipe(new ItemStack(Item.STORAGE_MINECART, 1), new Object[] { "A", "B", Character.valueOf('A'), Block.CHEST, Character.valueOf('B'), Item.MINECART }); 123 this.registerShapedRecipe(new ItemStack(Item.POWERED_MINECART, 1), new Object[] { "A", "B", Character.valueOf('A'), Block.FURNACE, Character.valueOf('B'), Item.MINECART }); 124 this.registerShapedRecipe(new ItemStack(Item.BOAT, 1), new Object[] { "# #", "###", Character.valueOf('#'), Block.WOOD }); 125 this.registerShapedRecipe(new ItemStack(Item.BUCKET, 1), new Object[] { "# #", " # ", Character.valueOf('#'), Item.IRON_INGOT }); 126 this.registerShapedRecipe(new ItemStack(Item.FLINT_AND_STEEL, 1), new Object[] { "A ", " B", Character.valueOf('A'), Item.IRON_INGOT, Character.valueOf('B'), Item.FLINT }); 127 this.registerShapedRecipe(new ItemStack(Item.BREAD, 1), new Object[] { "###", Character.valueOf('#'), Item.WHEAT }); 128 this.registerShapedRecipe(new ItemStack(Block.WOOD_STAIRS, 4), new Object[] { "# ", "## ", "###", Character.valueOf('#'), Block.WOOD }); 129 this.registerShapedRecipe(new ItemStack(Item.FISHING_ROD, 1), new Object[] { " #", " #X", "# X", Character.valueOf('#'), Item.STICK, Character.valueOf('X'), Item.STRING }); 130 this.registerShapedRecipe(new ItemStack(Block.COBBLESTONE_STAIRS, 4), new Object[] { "# ", "## ", "###", Character.valueOf('#'), Block.COBBLESTONE }); 131 this.registerShapedRecipe(new ItemStack(Item.PAINTING, 1), new Object[] { "###", "#X#", "###", Character.valueOf('#'), Item.STICK, Character.valueOf('X'), Block.WOOL }); 132 this.registerShapedRecipe(new ItemStack(Item.GOLDEN_APPLE, 1), new Object[] { "###", "#X#", "###", Character.valueOf('#'), Block.GOLD_BLOCK, Character.valueOf('X'), Item.APPLE }); 133 this.registerShapedRecipe(new ItemStack(Block.LEVER, 1), new Object[] { "X", "#", Character.valueOf('#'), Block.COBBLESTONE, Character.valueOf('X'), Item.STICK }); 134 this.registerShapedRecipe(new ItemStack(Block.REDSTONE_TORCH_ON, 1), new Object[] { "X", "#", Character.valueOf('#'), Item.STICK, Character.valueOf('X'), Item.REDSTONE }); 135 136 this.registerShapedRecipe(new ItemStack(Item.WATCH, 1), new Object[] { " # ", "#X#", " # ", Character.valueOf('#'), Item.GOLD_INGOT, Character.valueOf('X'), Item.REDSTONE }); 137 this.registerShapedRecipe(new ItemStack(Item.COMPASS, 1), new Object[] { " # ", "#X#", " # ", Character.valueOf('#'), Item.IRON_INGOT, Character.valueOf('X'), Item.REDSTONE }); 138 this.registerShapedRecipe(new ItemStack(Block.STONE_BUTTON, 1), new Object[] { "#", "#", Character.valueOf('#'), Block.STONE }); 139 140 Collections.sort(this.b, new RecipeSorter(this)); 141 System.out.println(this.b.size() + " recipes"); 142 } 143 144 public void registerShapedRecipe(ItemStack itemstack, Object... aobject) { // CraftBukkit - default -> public 145 String s = ""; 146 int i = 0; 147 int j = 0; 148 int k = 0; 149 150 if (aobject[i] instanceof String[]) { 151 String[] astring = (String[]) ((String[]) aobject[i++]); 152 153 for (int l = 0; l < astring.length; ++l) { 154 String s1 = astring[l]; 155 156 ++k; 157 j = s1.length(); 158 s = s + s1; 159 } 160 } else { 161 while (aobject[i] instanceof String) { 162 String s2 = (String) aobject[i++]; 163 164 ++k; 165 j = s2.length(); 166 s = s + s2; 167 } 168 } 169 170 HashMap hashmap; 171 172 for (hashmap = new HashMap(); i < aobject.length; i += 2) { 173 Character character = (Character) aobject[i]; 174 ItemStack itemstack1 = null; 175 176 if (aobject[i + 1] instanceof Item) { 177 itemstack1 = new ItemStack((Item) aobject[i + 1]); 178 } else if (aobject[i + 1] instanceof Block) { 179 itemstack1 = new ItemStack((Block) aobject[i + 1], 1, -1); 180 } else if (aobject[i + 1] instanceof ItemStack) { 181 itemstack1 = (ItemStack) aobject[i + 1]; 182 } 183 184 hashmap.put(character, itemstack1); 185 } 186 187 ItemStack[] aitemstack = new ItemStack[j * k]; 188 189 for (int i1 = 0; i1 < j * k; ++i1) { 190 char c0 = s.charAt(i1); 191 192 if (hashmap.containsKey(Character.valueOf(c0))) { 193 aitemstack[i1] = ((ItemStack) hashmap.get(Character.valueOf(c0))).cloneItemStack(); 194 } else { 195 aitemstack[i1] = null; 196 } 197 } 198 199 this.b.add(new ShapedRecipes(j, k, aitemstack, itemstack)); 200 } 201 202 public void registerShapelessRecipe(ItemStack itemstack, Object... aobject) { // CraftBukkit - default -> public 203 ArrayList arraylist = new ArrayList(); 204 Object[] aobject1 = aobject; 205 int i = aobject.length; 206 207 for (int j = 0; j < i; ++j) { 208 Object object = aobject1[j]; 209 210 if (object instanceof ItemStack) { 211 arraylist.add(((ItemStack) object).cloneItemStack()); 212 } else if (object instanceof Item) { 213 arraylist.add(new ItemStack((Item) object)); 214 } else { 215 if (!(object instanceof Block)) { 216 throw new RuntimeException("Invalid shapeless recipy!"); 217 } 218 219 arraylist.add(new ItemStack((Block) object)); 220 } 221 } 222 223 this.b.add(new ShapelessRecipes(itemstack, arraylist)); 224 } 225 226 public ItemStack craft(InventoryCrafting inventorycrafting) { 227 for (int i = 0; i < this.b.size(); ++i) { 228 CraftingRecipe craftingrecipe = (CraftingRecipe) this.b.get(i); 229 230 if (craftingrecipe.a(inventorycrafting)) { 231 return craftingrecipe.b(inventorycrafting); 232 } 233 } 234 235 return null; 236 } 237 238 public List b() { 239 return this.b; 240 } 241}