RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
Crafting.java
1package com.osroyale.content.skill.impl.crafting;
2
3import com.osroyale.Config;
4import com.osroyale.content.skillcape.SkillCape;
5import com.osroyale.content.activity.randomevent.RandomEventHandler;
6import com.osroyale.content.store.Store;
7import com.osroyale.net.packet.out.SendInputAmount;
8import com.osroyale.net.packet.out.SendChatBoxInterface;
9import com.osroyale.net.packet.out.SendItemOnInterfaceZoom;
10import com.osroyale.net.packet.out.SendMessage;
11import com.osroyale.net.packet.out.SendString;
12import com.osroyale.game.Animation;
13import com.osroyale.game.action.Action;
14import com.osroyale.game.action.policy.WalkablePolicy;
15import com.osroyale.game.world.entity.mob.player.Player;
16import com.osroyale.content.event.impl.*;
17import com.osroyale.content.skill.impl.crafting.impl.*;
18import com.osroyale.game.world.entity.skill.Skill;
19import com.osroyale.game.world.items.Item;
20import com.osroyale.game.world.object.GameObject;
21import com.osroyale.util.Utility;
22
23import java.util.HashMap;
24
66
67public class Crafting extends Skill {
68
70 private static final String CRAFTABLE_KEY = "CRAFTABLE_KEY";
71
73 private final static HashMap<Integer, Craftable> CRAFTABLES = new HashMap<>();
74
76 private static final Object[][] LEATHER_ARMOR_IDS = {
77 {8635, 1, Leather.LEATHER_BODY}, {8634, 5, Leather.LEATHER_BODY}, {8633, 10, Leather.LEATHER_BODY},
78 {8638, 1, Leather.LEATHER_GLOVES}, {8637, 5, Leather.LEATHER_GLOVES}, {8636, 10, Leather.LEATHER_GLOVES},
79 {8641, 1, Leather.LEATHER_BOOTS}, {8640, 5, Leather.LEATHER_BOOTS}, {8639, 10, Leather.LEATHER_BOOTS},
80 {8644, 1, Leather.LEATHER_VANBRACES}, {8643, 5, Leather.LEATHER_VANBRACES}, {8642, 10, Leather.LEATHER_VANBRACES},
81 {8647, 1, Leather.LEATHER_CHAPS}, {8646, 5, Leather.LEATHER_CHAPS}, {8645, 10, Leather.LEATHER_CHAPS},
82 {8650, 1, Leather.LEATHER_COIF}, {8649, 5, Leather.LEATHER_COIF}, {8648, 10, Leather.LEATHER_COIF},
83 {8653, 1, Leather.LEATHER_COWL}, {8652, 5, Leather.LEATHER_COWL}, {8651, 10, Leather.LEATHER_COWL},
84 };
85
86 public Crafting(int level, double experience) {
87 super(Skill.CRAFTING, level, experience);
88 }
89
90 public static void addCraftable(Craftable craftable) {
91 if (CRAFTABLES.put(craftable.getWith().getId(), craftable) != null) {
92 System.out.println("[Crafting] Conflicting item values: " + craftable.getWith().getId() + " Type: " + craftable.getName());
93 }
94 }
95
96 private static Craftable getCraftable(int use, int with) {
97 return CRAFTABLES.get(use) == null ? CRAFTABLES.get(with) : CRAFTABLES.get(use);
98 }
99
100 @Override
101 protected boolean clickObject(Player player, ObjectInteractionEvent event) {
102 if (event.getObject().getId() == 4309 && event.getOpcode() == 1) {
103 Spinning.open(player);
104 return true;
105 }
106
107 if (event.getObject().getId() == 11601 && event.getOpcode() == 0) {
108 Jewellery.open(player);
109 return true;
110 }
111
112 return false;
113 }
114
115 @Override
116 protected boolean clickNpc(Player player, NpcInteractionEvent event) {
117 if (event.getNpc().id == 5811) {
118 if (event.getOpcode() == 0) {
119 Tanning.open(player);
120 } else if (event.getOpcode() == 1) {
121 Store.STORES.get("Crafting Store").open(player);
122 }
123 return true;
124 }
125
126 return false;
127 }
128
129 @Override
130 protected boolean useItem(Player player, ItemOnObjectInteractionEvent event) {
131 Item item = event.getItem();
132 GameObject object = event.getObject();
133
134 if (object.getId() == 16469 && (item.getId() == 1783 || item.getId() == 1781)) {
135 Glass.craft(player, Glass.GlassData.MOLTEN_GLASS, 28);
136 return true;
137 }
138
139 return false;
140 }
141
142 @Override
143 protected boolean useItem(Player player, ItemOnItemInteractionEvent event) {
144 Item first = event.getFirst();
145 Item second = event.getSecond();
146
147 if (Stringing.useItem(player, first, second)) {
148 return true;
149 }
150
151 if (first.getId() == 1785 && second.getId() == 1775 || first.getId() == 1775 && second.getId() == 1785) {
152 Glass.open(player);
153 return true;
154 }
155
156 if ((first.getId() == 1733 && second.getId() == 1741) || (first.getId() == 1741 && second.getId() == 1733)) {
157 player.attributes.set(CRAFTABLE_KEY, "HIDE");
158 player.interfaceManager.open(2311);
159 return true;
160 }
161
162 Craftable craftable = getCraftable(first.getId(), second.getId());
163
164 if (craftable == null) {
165 return false;
166 }
167
168 if (!craftable.getUse().equalIds(first) && !craftable.getUse().equalIds(second)) {
169 player.message("You need to use this with " + Utility.getAOrAn(craftable.getUse().getName()) + " " + craftable.getUse().getName().toLowerCase() + " to craft this item.");
170 return true;
171 }
172
173 switch (craftable.getCraftableItems().length) {
174
175 case 1:
176 player.attributes.set(CRAFTABLE_KEY, craftable);
177 player.send(new SendString("\\n \\n \\n \\n" + craftable.getCraftableItems()[0].getProduct().getName(), 2799));
178 player.send(new SendItemOnInterfaceZoom(1746, 170, craftable.getCraftableItems()[0].getProduct().getId()));
179 player.send(new SendChatBoxInterface(4429));
180 return true;
181 case 2:
182 player.attributes.set(CRAFTABLE_KEY, craftable);
183 player.send(new SendItemOnInterfaceZoom(8869, 170, craftable.getCraftableItems()[0].getProduct().getId()));
184 player.send(new SendItemOnInterfaceZoom(8870, 170, craftable.getCraftableItems()[1].getProduct().getId()));
185 player.send(new SendString("\\n \\n \\n \\n".concat(craftable.getCraftableItems()[0].getProduct().getName().replace("d'hide ", "")), 8874));
186 player.send(new SendString("\\n \\n \\n \\n".concat(craftable.getCraftableItems()[1].getProduct().getName().replace("d'hide ", "")), 8878));
187 player.send(new SendChatBoxInterface(8866));
188 return true;
189 case 3:
190 player.attributes.set(CRAFTABLE_KEY, craftable);
191 player.send(new SendItemOnInterfaceZoom(8883, 170, craftable.getCraftableItems()[0].getProduct().getId()));
192 player.send(new SendItemOnInterfaceZoom(8884, 170, craftable.getCraftableItems()[1].getProduct().getId()));
193 player.send(new SendItemOnInterfaceZoom(8885, 170, craftable.getCraftableItems()[2].getProduct().getId()));
194 player.send(new SendString("\\n \\n \\n \\n".concat(craftable.getCraftableItems()[0].getProduct().getName().replace("d'hide ", "")), 8889));
195 player.send(new SendString("\\n \\n \\n \\n".concat(craftable.getCraftableItems()[1].getProduct().getName().replace("d'hide ", "")), 8893));
196 player.send(new SendString("\\n \\n \\n \\n".concat(craftable.getCraftableItems()[2].getProduct().getName().replace("d'hide ", "")), 8897));
197 player.send(new SendChatBoxInterface(8880));
198 return true;
199 case 4:
200 player.attributes.set(CRAFTABLE_KEY, craftable);
201 player.send(new SendItemOnInterfaceZoom(8902, 170, craftable.getCraftableItems()[0].getProduct().getId()));
202 player.send(new SendItemOnInterfaceZoom(8903, 170, craftable.getCraftableItems()[1].getProduct().getId()));
203 player.send(new SendItemOnInterfaceZoom(8904, 170, craftable.getCraftableItems()[2].getProduct().getId()));
204 player.send(new SendItemOnInterfaceZoom(8905, 170, craftable.getCraftableItems()[3].getProduct().getId()));
205 player.send(new SendString("\\n \\n \\n \\n".concat(craftable.getCraftableItems()[0].getProduct().getName().replace("d'hide ", "")), 8909));
206 player.send(new SendString("\\n \\n \\n \\n".concat(craftable.getCraftableItems()[1].getProduct().getName().replace("d'hide ", "")), 8913));
207 player.send(new SendString("\\n \\n \\n \\n".concat(craftable.getCraftableItems()[2].getProduct().getName().replace("d'hide ", "")), 8917));
208 player.send(new SendString("\\n \\n \\n \\n".concat(craftable.getCraftableItems()[3].getProduct().getName().replace("d'hide ", "")), 8921));
209 player.send(new SendChatBoxInterface(8899));
210 return true;
211 case 5:
212 player.attributes.set(CRAFTABLE_KEY, craftable);
213 player.send(new SendItemOnInterfaceZoom(8941, 170, craftable.getCraftableItems()[0].getProduct().getId()));
214 player.send(new SendItemOnInterfaceZoom(8942, 170, craftable.getCraftableItems()[1].getProduct().getId()));
215 player.send(new SendItemOnInterfaceZoom(8943, 170, craftable.getCraftableItems()[2].getProduct().getId()));
216 player.send(new SendItemOnInterfaceZoom(8944, 170, craftable.getCraftableItems()[3].getProduct().getId()));
217 player.send(new SendItemOnInterfaceZoom(8945, 170, craftable.getCraftableItems()[4].getProduct().getId()));
218 player.send(new SendString("\\n \\n \\n \\n".concat("Body"), 8949));
219 player.send(new SendString("\\n \\n \\n \\n".concat("Chaps"), 8953));
220 player.send(new SendString("\\n \\n \\n \\n".concat("Vambraces"), 8957));
221 player.send(new SendString("\\n \\n \\n \\n".concat("Bandana"), 8961));
222 player.send(new SendString("\\n \\n \\n \\n".concat("Boots"), 8965));
223 player.send(new SendChatBoxInterface(8938));
224 return true;
225
226 default:
227 return false;
228 }
229 }
230
231 @Override
232 protected boolean clickButton(Player player, ClickButtonInteractionEvent event) {
233 if (Tanning.click(player, event.getButton())) {
234 return true;
235 }
236
237 if (Glass.click(player, event.getButton())) {
238 return true;
239 }
240
241 if (!player.attributes.has(CRAFTABLE_KEY)) {
242 return false;
243 }
244
245 int button = event.getButton();
246
247 if (button == 2422) {
248 return false;
249 }
250
251 if (String.valueOf(player.attributes.getObject(CRAFTABLE_KEY)).equals("HIDE")) {
252 for (Object[] i : LEATHER_ARMOR_IDS) {
253 if ((int) i[0] == button) {
254 player.interfaceManager.close();
255 start(player, (Craftable) i[2], 0, (int) i[1]);
256 return true;
257 }
258 }
259 }
260
261 Craftable craftable = player.attributes.get(CRAFTABLE_KEY, Craftable.class);
262
263 switch (button) {
264
265 /* Option 1 - Make all */
266 case 1747:
267 start(player, craftable, 0, player.inventory.computeAmountForId(craftable.getWith().getId()));
268 return true;
269
270 /* Option 1 - Make 1 */
271 case 2799:
272 case 8909:
273 case 8874:
274 case 8889:
275 case 8949:
276 start(player, craftable, 0, 1);
277 return true;
278
279 /* Option 1 - Make 5 */
280 case 2798:
281 case 8908:
282 case 8873:
283 case 8888:
284 case 8948:
285 start(player, craftable, 0, 5);
286 return true;
287
288 /* Option 1 - Make 10 */
289 case 1748:
290 case 8907:
291 case 8872:
292 case 8887:
293 case 8947:
294 start(player, craftable, 0, 10);
295 return true;
296
297 /* Option 1 - Make X */
298 case 8906:
299 case 8871:
300 case 8886:
301 case 6212:
302 case 8946:
303 player.send(new SendInputAmount("Enter amount", 10, input -> start(player, craftable, 0, Integer.parseInt(input))));
304 return true;
305
306 /* Option 2 - Make 1 */
307 case 8913:
308 case 8878:
309 case 8893:
310 case 8953:
311 start(player, craftable, 1, 1);
312 return true;
313
314 /* Option 2 - Make 5 */
315 case 8912:
316 case 8877:
317 case 8892:
318 case 8952:
319 start(player, craftable, 1, 5);
320 return true;
321
322 /* Option 2 - Make 10 */
323 case 8911:
324 case 8876:
325 case 8891:
326 case 8951:
327 start(player, craftable, 1, 10);
328 return true;
329
330 /* Option 2 - Make X */
331 case 8910:
332 case 8875:
333 case 8890:
334 case 8950:
335 player.send(new SendInputAmount("Enter amount", 10, input -> start(player, craftable, 1, Integer.parseInt(input))));
336 return true;
337
338 /* Option 3 - Make 1 */
339 case 8917:
340 case 8897:
341 case 8957:
342 start(player, craftable, 2, 1);
343 return true;
344
345 /* Option 3 - Make 5 */
346 case 8916:
347 case 8896:
348 case 8956:
349 start(player, craftable, 2, 5);
350 return true;
351
352 /* Option 3 - Make 10 */
353 case 8915:
354 case 8895:
355 case 8955:
356 start(player, craftable, 2, 10);
357 return true;
358
359 /* Option 3 - Make X */
360 case 8914:
361 case 8894:
362 case 8954:
363 player.send(new SendInputAmount("Enter amount", 10, input -> start(player, craftable, 2, Integer.parseInt(input))));
364 return true;
365
366 /* Option 4 - Make 1 */
367 case 8921:
368 case 8961:
369 start(player, craftable, 3, 1);
370 return true;
371
372 /* Option 4 - Make 5 */
373 case 8920:
374 case 8960:
375 start(player, craftable, 3, 5);
376 return true;
377
378 /* Option 4 - Make 10 */
379 case 8919:
380 case 8959:
381 start(player, craftable, 3, 10);
382 return true;
383
384 /* Option 4 - Make X */
385 case 8918:
386 case 8958:
387 player.send(new SendInputAmount("Enter amount", 10, input -> start(player, craftable, 3, Integer.parseInt(input))));
388 return true;
389
390 /* Option 5 - Make 1 */
391 case 8965:
392 start(player, craftable, 4, 1);
393 return true;
394
395 /* Option 5 - Make 5 */
396 case 8964:
397 start(player, craftable, 4, 5);
398 return true;
399
400 /* Option 5 - Make 10 */
401 case 8963:
402 start(player, craftable, 4, 10);
403 return true;
404
405 /* Option 5 - Make X */
406 case 8962:
407 player.send(new SendInputAmount("Enter amount", 10, input -> start(player, craftable, 4, Integer.parseInt(input))));
408 return true;
409
410 default:
411 return false;
412 }
413 }
414
415 public boolean craft(Player player, int index, int amount) {
416 Craftable craftable = player.attributes.get(CRAFTABLE_KEY);
417 return start(player, craftable, index, amount);
418 }
419
420 public boolean start(Player player, Craftable craftable, int index, int amount) {
421 if (craftable == null) {
422 return false;
423 }
424
425 player.attributes.remove(CRAFTABLE_KEY);
426
427 CraftableItem item = craftable.getCraftableItems()[index];
428
429 player.interfaceManager.close();
430
431 if (player.skills.getLevel(Skill.CRAFTING) < item.getLevel()) {
432 player.dialogueFactory.sendStatement("<col=369>You need a Crafting level of " + item.getLevel() + " to do that.").execute();
433 return true;
434 }
435
436 if (!player.inventory.containsAll(craftable.getIngredients(index))) {
437 Item requiredItem = craftable.getCraftableItems()[index].getRequiredItem();
438 Item product = craftable.getCraftableItems()[index].getProduct();
439 String productAmount = "";
440
441 if (product.getName().contains("vamb")) {
442 productAmount = " pair of";
443 } else if (!product.getName().endsWith("s")) {
444 productAmount = " " + Utility.getAOrAn(product.getName());
445 }
446
447 player.send(new SendMessage("You need " + requiredItem.getAmount() + " piece" + (requiredItem.getAmount() > 1 ? "s" : "") + " of " + requiredItem.getName().toLowerCase() + " to make" + productAmount + " " + product.getName().toLowerCase() + "."));
448 return true;
449 }
450
451 player.action.execute(craft(player, craftable, item, index, amount), true);
452 return true;
453 }
454
455 private Action<Player> craft(Player player, Craftable craftable, CraftableItem item, int index, int amount) {
456 return new Action<Player>(player, 2, true) {
457 int iterations = 0;
458
459 @Override
460 public void execute() {
461 player.animate(new Animation(craftable.getAnimation()));
462 player.skills.addExperience(Skill.CRAFTING, item.getExperience() * Config.CRAFTING_MODIFICATION);
463
464 final boolean saveMaterial = SkillCape.isEquipped(player, SkillCape.CRAFTING) && Utility.random(1, 3) == 1;
465 if (!saveMaterial) {
466 player.inventory.removeAll(craftable.getIngredients(index));
467 }
468 player.inventory.addOrDrop(item.getProduct());
469 player.playerAssistant.activateSkilling(1);
470 RandomEventHandler.trigger(player);
471
472 if (craftable.getProductionMessage() != null) {
473 player.send(new SendMessage(craftable.getProductionMessage()));
474 }
475
476// if (craftable.getName() == "Gem") {
477// AchievementHandler.activateTask(player, AchievementList.CUT_250_GEMS, 1);
478// }
479
480 if (++iterations == amount) {
481 cancel();
482 return;
483 }
484
485 if (!player.inventory.containsAll(craftable.getIngredients(index))) {
486 cancel();
487 player.send(new SendMessage("<col=369>You have run out of materials."));
488 return;
489 }
490 }
491
492 @Override
493 public String getName() {
494 return "Crafting";
495 }
496
497 @Override
498 public boolean prioritized() {
499 return false;
500 }
501
502 @Override
503 public WalkablePolicy getWalkablePolicy() {
505 }
506 };
507 }
508}
static final double CRAFTING_MODIFICATION
Definition Config.java:295
final DialogueFactory sendStatement(String... lines)
static boolean click(Player player, int button)
Definition Glass.java:106
static void craft(Player player, GlassData glass, int amount)
Definition Glass.java:176
static boolean useItem(Player player, Item used, Item with)
static boolean click(Player player, int button)
Definition Tanning.java:153
static String getName(int skill)
Definition Skill.java:502
Skill(int skill, int level, double experience)
Definition Skill.java:221
void addExperience(int id, double experience)
boolean removeAll(Collection<? extends Item > items)
static String getAOrAn(String nextWord)
Definition Utility.java:153