Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
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}