RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
RangedAmmunition.java
1package com.osroyale.game.world.entity.combat.ranged;
2
3import com.osroyale.game.Animation;
4import com.osroyale.game.Graphic;
5import com.osroyale.game.Projectile;
6import com.osroyale.game.UpdatePriority;
7import com.osroyale.game.world.entity.combat.CombatImpact;
8import com.osroyale.game.world.entity.combat.projectile.CombatProjectile;
9import com.osroyale.game.world.entity.mob.Mob;
10import com.osroyale.game.world.items.Item;
11import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap;
12import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
13
14import java.util.Optional;
15
16import static com.osroyale.game.world.entity.combat.projectile.CombatProjectile.getDefinition;
17
38
39public enum RangedAmmunition {
40 BRONZE_JAVELIN(false, 825, 831, 5642, 5648) {
41 @Override
42 public CombatProjectile getProjectile() {
43 return getDefinition("Bronze javelin");
44 }
45 },
46 IRON_JAVELIN(false, 826, 832, 5643, 5649) {
47 @Override
48 public CombatProjectile getProjectile() {
49 return getDefinition("Iron javelin");
50 }
51 },
52 STEEL_JAVELIN(false, 827, 833, 5644, 5650) {
53 @Override
54 public CombatProjectile getProjectile() {
55 return getDefinition("Steel javelin");
56 }
57 },
58 MITHRIL_JAVELIN(false, 828, 834, 5645, 5651) {
59 @Override
60 public CombatProjectile getProjectile() {
61 return getDefinition("Mithril javelin");
62 }
63 },
64 ADAMANT_JAVELIN(false, 829, 835, 5646, 5652) {
65 @Override
66 public CombatProjectile getProjectile() {
67 return getDefinition("Adamant javelin");
68 }
69 },
70 RUNE_JAVELIN(false, 830, 836, 5647, 5653) {
71 @Override
72 public CombatProjectile getProjectile() {
73 return getDefinition("Rune javelin");
74 }
75 },
76 DRAGON_JAVELIN(false, 19484, 19486, 19488, 19490) {
77 @Override
78 public CombatProjectile getProjectile() {
79 return getDefinition("Dragon javelin");
80 }
81 },
82
83 BRONZE_THROWNAXE(true, 800) {
84 @Override
85 public CombatProjectile getProjectile() {
86 return getDefinition("Bronze thrownaxe");
87 }
88 },
89 IRON_THROWNAXE(true, 801) {
90 @Override
91 public CombatProjectile getProjectile() {
92 return getDefinition("Iron thrownaxe");
93 }
94 },
95 STEEL_THROWNAXE(true, 802) {
96 @Override
97 public CombatProjectile getProjectile() {
98 return getDefinition("Steel thrownaxe");
99 }
100 },
101 MITHRIL_THROWNAXE(true, 803) {
102 @Override
103 public CombatProjectile getProjectile() {
104 return getDefinition("Mithril thrownaxe");
105 }
106 },
107 ADAMANT_THROWNAXE(true, 804) {
108 @Override
109 public CombatProjectile getProjectile() {
110 return getDefinition("Adamant thrownaxe");
111 }
112 },
113 RUNE_THROWNAXE(true, 805) {
114 @Override
115 public CombatProjectile getProjectile() {
116 return getDefinition("Rune thrownaxe");
117 }
118 },
119 DRAGON_THROWNAXE(true, 20849) {
120 @Override
121 public CombatProjectile getProjectile() {
122 return getDefinition("Dragon thrownaxe");
123 }
124 },
125
126 BRONZE_DART(true, 806, 812, 5628, 5635) {
127 @Override
128 public CombatProjectile getProjectile() {
129 return getDefinition("Bronze dart");
130 }
131 },
132 CRAWS_BOW(false, 22550) {
133
134 @Override
135 public CombatProjectile getProjectile() {
136 return getDefinition("Craw's bow");
137 }
138 },
139 HEFIN(false, 25867) { //RED
140
141 @Override
142 public CombatProjectile getProjectile() {
143 return getDefinition("Hefin");
144 }
145 },
146 IORWERTH(false, 25886) { //BLACK 25886
147
148 @Override
149 public CombatProjectile getProjectile() {
150 return getDefinition("Iorwerth");
151 }
152 },
153 TRAHEAERN(false, 25888) { //PURPLE
154
155 @Override
156 public CombatProjectile getProjectile() {
157 return getDefinition("Traheaern");
158 }
159 },
160 CADARN(false, 25890) { //GREEN
161
162 @Override
163 public CombatProjectile getProjectile() {
164 return getDefinition("Cadarn");
165 }
166 },
167 CRWYS(false, 25892) { //YELLOW
168
169 @Override
170 public CombatProjectile getProjectile() {
171 return getDefinition("Crwys");
172 }
173 },
174 AMLODD(false, 25896) { //BLUE
175
176 @Override
177 public CombatProjectile getProjectile() {
178 return getDefinition("Amlodd");
179 }
180 },
181 MEILYR(false, 25884, 25865, 25894) { //WHITE
182
183 @Override
184 public CombatProjectile getProjectile() {
185 return getDefinition("Meilyr");
186 }
187 },
188
189
190
191 IRON_DART(true, 807, 813, 5629, 5636) {
192 @Override
193 public CombatProjectile getProjectile() {
194 return getDefinition("Iron dart");
195 }
196 },
197 BLACK_DART(true, 3093, 3094, 5631, 5638) {
198 @Override
199 public CombatProjectile getProjectile() {
200 return getDefinition("Black dart");
201 }
202 },
203 STEEL_DART(true, 808, 814, 5630, 5637) {
204 @Override
205 public CombatProjectile getProjectile() {
206 return getDefinition("Steel dart");
207 }
208 },
209 MITHRIL_DART(true, 809, 815, 5632, 5639) {
210 @Override
211 public CombatProjectile getProjectile() {
212 return getDefinition("Mithril dart");
213 }
214 },
215 ADAMANT_DART(true, 810, 816, 5633, 5640) {
216 @Override
217 public CombatProjectile getProjectile() {
218 return getDefinition("Adamant dart");
219 }
220 },
221 RUNE_DART(true, 811, 817, 5634, 5641) {
222 @Override
223 public CombatProjectile getProjectile() {
224 return getDefinition("Rune dart");
225 }
226 },
227 DRAGON_DART(true, 11230, 11231, 11233, 11234) {
228 @Override
229 public CombatProjectile getProjectile() {
230 return getDefinition("Dragon dart");
231 }
232 },
233
234 BRONZE_KNIFE(true, 864, 870, 5654, 5651) {
235 @Override
236 public CombatProjectile getProjectile() {
237 return getDefinition("Bronze knife");
238 }
239 },
240 IRON_KNIFE(true, 863, 871, 5655, 5662) {
241 @Override
242 public CombatProjectile getProjectile() {
243 return getDefinition("Iron knife");
244 }
245 },
246 BLACK_KNIFE(true, 869, 874, 5658, 5665) {
247 @Override
248 public CombatProjectile getProjectile() {
249 return getDefinition("Black knife");
250 }
251 },
252 STEEL_KNIFE(true, 865, 872, 5656, 5663) {
253 @Override
254 public CombatProjectile getProjectile() {
255 return getDefinition("Steel knife");
256 }
257 },
258 MITHRIL_KNIFE(true, 866, 873, 5657, 5664) {
259 @Override
260 public CombatProjectile getProjectile() {
261 return getDefinition("Mithril knife");
262 }
263 },
264 ADAMANT_KNIFE(true, 867, 875, 5659, 5666) {
265 @Override
266 public CombatProjectile getProjectile() {
267 return getDefinition("Adamant knife");
268 }
269 },
270 DRAGON_BOLTS(true, 21932, 21934, 21936, 21938, 21940, 21942, 21944, 21946, 21948, 21950) {
271 @Override
272 public CombatProjectile getProjectile() {
273 return getDefinition("Dragon Bolts");
274 }
275 },
276 RUNE_KNIFE(true, 868, 876, 5660, 5667) {
277 @Override
278 public CombatProjectile getProjectile() {
279 return getDefinition("Rune knife");
280 }
281 },
282 DRAGON_KNIFE(true, 22804, 22810) {
283 @Override
284 public CombatProjectile getProjectile() {
285 return getDefinition("Dragon knife");
286 }
287 },
288
289 DOUBLE_BRONZE_ARROW(true, darkBows(), 882, 883, 5616, 5622) {
290 @Override
291 public CombatProjectile getProjectile() {
292 return getDefinition("Bronze arrow");
293 }
294 },
295 DOUBLE_IRON_ARROW(true, darkBows(), 884, 885, 5617, 5623) {
296 @Override
297 public CombatProjectile getProjectile() {
298 return getDefinition("Iron arrow");
299 }
300 },
301 DOUBLE_STEEL_ARROW(true, darkBows(), 886, 887, 5618, 5624) {
302 @Override
303 public CombatProjectile getProjectile() {
304 return getDefinition("Steel arrow");
305 }
306 },
307 DOUBLE_MITHRIL_ARROW(true, darkBows(), 888, 889, 5619, 5625) {
308 @Override
309 public CombatProjectile getProjectile() {
310 return getDefinition("Mithril arrow");
311 }
312 },
313 DOUBLE_ADAMANT_ARROW(true, darkBows(), 890, 891, 5620, 5626) {
314 @Override
315 public CombatProjectile getProjectile() {
316 return getDefinition("Adamant arrow");
317 }
318 },
319 DOUBLE_RUNE_ARROW(true, darkBows(), 892, 893, 5621, 5627) {
320 @Override
321 public CombatProjectile getProjectile() {
322 return getDefinition("Rune arrow");
323 }
324 },
325 DOUBLE_DRAGON_ARROW(true, darkBows(), 11212, 11227, 11228, 11229) {
326 @Override
327 public CombatProjectile getProjectile() {
328 return getDefinition("Dragon arrow");
329 }
330 },
331
332 BRONZE_ARROW(true, 882, 883, 5616, 5622) {
333 @Override
334 public CombatProjectile getProjectile() {
335 return getDefinition("Bronze arrow");
336 }
337 },
338 IRON_ARROW(true, 884, 885, 5617, 5623) {
339 @Override
340 public CombatProjectile getProjectile() {
341 return getDefinition("Iron arrow");
342 }
343 },
344 STEEL_ARROW(true, 886, 887, 5618, 5624) {
345 @Override
346 public CombatProjectile getProjectile() {
347 return getDefinition("Steel arrow");
348 }
349 },
350 MITHRIL_ARROW(true, 888, 889, 5619, 5625) {
351 @Override
352 public CombatProjectile getProjectile() {
353 return getDefinition("Mithril arrow");
354 }
355 },
356 ADAMANT_ARROW(true, 890, 891, 5620, 5626) {
357 @Override
358 public CombatProjectile getProjectile() {
359 return getDefinition("Adamant arrow");
360 }
361 },
362 RUNE_ARROW(true, 892, 893, 5621, 5627) {
363 @Override
364 public CombatProjectile getProjectile() {
365 return getDefinition("Rune arrow");
366 }
367 },
368 DRAGON_ARROW(true, 11212, 11227, 11228, 11229) {
369 @Override
370 public CombatProjectile getProjectile() {
371 return getDefinition("Dragon arrow");
372 }
373 },
374
375 BRONZE_BOLTS(true, 877, 878, 6061, 6062, 879, 9236) {
376 @Override
377 public CombatProjectile getProjectile() {
378 return getDefinition("Bronze bolts");
379 }
380 },
381 BLURITE_BOLTS(true, 9139, 9286, 9293, 9300, 9335, 9237) {
382 @Override
383 public CombatProjectile getProjectile() {
384 return getDefinition("Blurite bolts");
385 }
386 },
387 IRON_BOLTS(true, 9140, 9287, 9294, 9301, 880, 9238) {
388 @Override
389 public CombatProjectile getProjectile() {
390 return getDefinition("Iron bolts");
391 }
392 },
393 SILVER_BOLTS(true, 9145, 9292, 9299, 9306) {
394 @Override
395 public CombatProjectile getProjectile() {
396 return getDefinition("Silver bolts");
397 }
398 },
399 STEEL_BOLTS(true, 9141, 9288, 9295, 9302, 9336, 9239) {
400 @Override
401 public CombatProjectile getProjectile() {
402 return getDefinition("Steel bolts");
403 }
404 },
405 MITHRIL_BOLTS(true, 9142, 9289, 9296, 9303, 9337, 9240, 9338, 9241) {
406 @Override
407 public CombatProjectile getProjectile() {
408 return getDefinition("Mithril bolts");
409 }
410 },
411 ADAMANT_BOLTS(true, 9143, 9290, 9297, 9304, 9339, 9242, 9340, 9243) {
412 @Override
413 public CombatProjectile getProjectile() {
414 return getDefinition("Adamant bolts");
415 }
416 },
417 RUNITE_BOLTS(true, 9144, 9291, 9298, 9305, 9341, 9244, 9342, 9245) {
418 @Override
419 public CombatProjectile getProjectile() {
420 return getDefinition("Runite bolts");
421 }
422 },
423
424 BRUTAL_BRONZE_ARROW(true, 4773) {
425 @Override
426 public CombatProjectile getProjectile() {
427 return getDefinition("Bronze brutal");
428 }
429 },
430 BRUTAL_IRON_ARROW(true, 4778) {
431 @Override
432 public CombatProjectile getProjectile() {
433 return getDefinition("Iron brutal");
434 }
435 },
436 BRUTAL_BLACK_ARROW(true, 4783) {
437 @Override
438 public CombatProjectile getProjectile() {
439 return getDefinition("Steel brutal");
440 }
441 },
442 BRUTAL_STEEL_ARROW(true, 4788) {
443 @Override
444 public CombatProjectile getProjectile() {
445 return getDefinition("Black brutal");
446 }
447 },
448 BRUTAL_MITHRIL_ARROW(true, 4793) {
449 @Override
450 public CombatProjectile getProjectile() {
451 return getDefinition("Mithril brutal");
452 }
453 },
454 BRUTAL_ADAMANT_ARROW(true, 4798) {
455 @Override
456 public CombatProjectile getProjectile() {
457 return getDefinition("Adamant brutal");
458 }
459 },
460 BRUTAL_RUNE_ARROW(true, 4803) {
461 @Override
462 public CombatProjectile getProjectile() {
463 return getDefinition("Rune brutal");
464 }
465 },
466
467 TOKTZ_XIL_UL(true, 6522) {
468 @Override
469 public CombatProjectile getProjectile() {
470 return getDefinition("Toktz-xil-ul");
471 }
472 },
473 BONE_BOLT(true, 8882) {
474 @Override
475 public CombatProjectile getProjectile() {
476 return getDefinition("Bone bolts");
477 }
478 },
479 OGRE_ARROW(true, 2866) {
480 @Override
481 public CombatProjectile getProjectile() {
482 return getDefinition("Ogre arrow");
483 }
484 },
485 ICE_ARROW(true, 78) {
486 @Override
487 public CombatProjectile getProjectile() {
488 return getDefinition("Ice arrows");
489 }
490 },
491
492 TRAINING_ARROWS(true, 9706) {
493 @Override
494 public CombatProjectile getProjectile() {
495 return getDefinition("Training arrows");
496 }
497 },
498 BOLT_RACK(false, 4740) {
499 @Override
500 public CombatProjectile getProjectile() {
501 return getDefinition("Bolt rack");
502 }
503 },
504
505 BROAD_TIPPED_BOLTS(true, 13280) {
506 @Override
507 public CombatProjectile getProjectile() {
508 return getDefinition("Broad-tipped bolts");
509 }
510 },
511 BROAD_ARROW(true, 4160) {
512 @Override
513 public CombatProjectile getProjectile() {
514 return getDefinition("Broad arrow");
515 }
516 },
517
518 CHINCHOMPA(false, 10033) {
519 @Override
520 public CombatProjectile getProjectile() {
521 return getDefinition("Chinchompa");
522 }
523 },
524 RED_CHINCHOMPA(false, 10034) {
525 @Override
526 public CombatProjectile getProjectile() {
527 return getDefinition("Red chinchompa");
528 }
529 },
530
531 KEBBIT_BOLT(true, 10158) {
532 @Override
533 public CombatProjectile getProjectile() {
534 return getDefinition("Kebbit bolts");
535 }
536 },
537 LONG_KEBBIT_BOLT(true, 10159) {
538 @Override
539 public CombatProjectile getProjectile() {
540 return getDefinition("Long kebbit bolts");
541 }
542 },
543
544 GUAM_TAR(false, 10142) {
545 @Override
546 public CombatProjectile getProjectile() {
547 return getDefinition("Guam tar");
548 }
549 },
550 MARRENTIL_TAR(false, 10143) {
551 @Override
552 public CombatProjectile getProjectile() {
553 return getDefinition("Marrentill tar");
554 }
555 },
556 TARROMIN_TAR(false, 10144) {
557 @Override
558 public CombatProjectile getProjectile() {
559 return getDefinition("Tarromin tar");
560 }
561 },
562 HARRALANDER_TAR(false, 10145) {
563 @Override
564 public CombatProjectile getProjectile() {
565 return getDefinition("Harralander tar");
566 }
567 };
568
569 private final boolean droppable;
570 private final int[] ids;
571 private final int[] weapons;
572
573 RangedAmmunition(boolean droppable, int... ids) {
574 this.droppable = droppable;
575 this.ids = ids;
576 this.weapons = new int[0];
577 }
578
579 RangedAmmunition(boolean droppable, int[] weapons, int... ids) {
580 this.droppable = droppable;
581 this.ids = ids;
582 this.weapons = weapons;
583 }
584
585 private static final RangedAmmunition[] values = values();
586
587 private static final Int2ObjectMap<RangedAmmunition> itemIdToType = new Int2ObjectArrayMap<>(values.length);
588
589 static {
590 for (final RangedAmmunition value : values) {
591 final int[] ids = value.ids;
592 if (ids != null) {
593 for (int id : ids) {
594 itemIdToType.putIfAbsent(id, value);
595 }
596 }
597 }
598 }
599
600 public static RangedAmmunition forItemId(final int itemId) {
601 return itemIdToType.get(itemId);
602 }
603
604 public abstract CombatProjectile getProjectile();
605
606 private static int[] darkBows() {
607 return new int[] { 11235, 12765, 12766, 12767, 12768 };
608 }
609
610 public void sendProjectile(Mob attacker, Mob defender) {
611 getProjectile().sendProjectile(attacker, defender);
612 switch (this) {
613 case DOUBLE_BRONZE_ARROW:
614 case DOUBLE_IRON_ARROW:
615 case DOUBLE_STEEL_ARROW:
616 case DOUBLE_MITHRIL_ARROW:
617 case DOUBLE_ADAMANT_ARROW:
618 case DOUBLE_RUNE_ARROW:
619 case DOUBLE_DRAGON_ARROW:
620 Projectile second = getProjectile().getProjectile().get().copy();
621 second.setDuration(15 + second.getDuration());
622 second.setCurve(32);
623 second.send(attacker, defender);
624 break;
625 }
626 }
627
628 public Optional<Graphic> getStart(int id) {
629 switch (id) {
630 case 9236:
631 case 9237:
632 case 9238:
633 case 9239:
634 case 9240:
635 case 9241:
636 case 9242:
637 case 9243:
638 case 9244:
639 case 9245:
640 return getDefinition(new Item(id).getName()).getStart();
641 }
642 int itemId;
643 switch (this) {
644 case DOUBLE_BRONZE_ARROW:
645 itemId = 1104;
646 break;
647 case DOUBLE_IRON_ARROW:
648 itemId = 1105;
649 break;
650 case DOUBLE_STEEL_ARROW:
651 itemId = 1106;
652 break;
653 case DOUBLE_MITHRIL_ARROW:
654 itemId = 1107;
655 break;
656 case DOUBLE_ADAMANT_ARROW:
657 itemId = 1108;
658 break;
659 case DOUBLE_RUNE_ARROW:
660 itemId = 1109;
661 break;
662 case DOUBLE_DRAGON_ARROW:
663 itemId = 1111;
664 break;
665 default:
666 return getProjectile().getStart();
667 }
668 return Optional.of(new Graphic(itemId, 0, true, UpdatePriority.HIGH));
669 }
670
671 public static RangedAmmunition find(Item weapon, Item item) {
672 if (item == null) return null;
673 for (RangedAmmunition ammo : values()) {
674 if (ammo.weapons.length > 0 && weapon != null) {
675 for (int weaponId : ammo.weapons) {
676 if (weaponId == weapon.getId()) {
677 for (int id : ammo.ids) {
678 if (id == item.getId()) {
679 return ammo;
680 }
681 }
682 }
683 }
684 } else {
685 for (int id : ammo.ids) {
686 if (id == item.getId()) {
687 return ammo;
688 }
689 }
690 }
691 }
692 return null;
693 }
694
695 public Optional<Animation> getAnimation(int id) {
696 switch (id) {
697 case 9236:
698 case 9237:
699 case 9238:
700 case 9239:
701 case 9240:
702 case 9241:
703 case 9242:
704 case 9243:
705 case 9244:
706 case 9245:
707 return getDefinition(new Item(id).getName()).getAnimation();
708 }
709 return getProjectile().getAnimation();
710 }
711
712 public Optional<Graphic> getEnd(int id) {
713 switch (id) {
714 case 9236:
715 case 9237:
716 case 9238:
717 case 9239:
718 case 9240:
719 case 9241:
720 case 9242:
721 case 9243:
722 case 9244:
723 case 9245:
724 return getDefinition(new Item(id).getName()).getEnd();
725 }
726 return getProjectile().getEnd();
727 }
728
729 public Optional<CombatImpact> getEffect(int id) {
730 switch (id) {
731 case 9236:
732 case 9237:
733 case 9238:
734 case 9239:
735 case 9240:
736 case 9241:
737 case 9242:
738 case 9243:
739 case 9244:
740 case 9245:
741 return getDefinition(new Item(id).getName()).getEffect();
742 }
743 return getProjectile().getEffect();
744 }
745
746 public boolean isDroppable() {
747 return droppable;
748 }
749
750 public boolean isDart() {
751 switch (this) {
752 case BRONZE_DART:
753 case IRON_DART:
754 case STEEL_DART:
755 case BLACK_DART:
756 case MITHRIL_DART:
757 case ADAMANT_DART:
758 case RUNE_DART:
759 case DRAGON_DART:
760 return true;
761 }
762 return false;
763 }
764
765 public int getRemoval() {
766 switch (this) {
767 case DOUBLE_BRONZE_ARROW:
768 case DOUBLE_IRON_ARROW:
769 case DOUBLE_STEEL_ARROW:
770 case DOUBLE_MITHRIL_ARROW:
771 case DOUBLE_ADAMANT_ARROW:
772 case DOUBLE_RUNE_ARROW:
773 case DOUBLE_DRAGON_ARROW:
774 return 2;
775 default:
776 return 1;
777 }
778 }
779
780}