39public enum RangedAmmunition {
40 BRONZE_JAVELIN(
false, 825, 831, 5642, 5648) {
43 return getDefinition(
"Bronze javelin");
46 IRON_JAVELIN(
false, 826, 832, 5643, 5649) {
49 return getDefinition(
"Iron javelin");
52 STEEL_JAVELIN(
false, 827, 833, 5644, 5650) {
55 return getDefinition(
"Steel javelin");
58 MITHRIL_JAVELIN(
false, 828, 834, 5645, 5651) {
61 return getDefinition(
"Mithril javelin");
64 ADAMANT_JAVELIN(
false, 829, 835, 5646, 5652) {
67 return getDefinition(
"Adamant javelin");
70 RUNE_JAVELIN(
false, 830, 836, 5647, 5653) {
73 return getDefinition(
"Rune javelin");
76 DRAGON_JAVELIN(
false, 19484, 19486, 19488, 19490) {
79 return getDefinition(
"Dragon javelin");
83 BRONZE_THROWNAXE(
true, 800) {
86 return getDefinition(
"Bronze thrownaxe");
89 IRON_THROWNAXE(
true, 801) {
92 return getDefinition(
"Iron thrownaxe");
95 STEEL_THROWNAXE(
true, 802) {
98 return getDefinition(
"Steel thrownaxe");
101 MITHRIL_THROWNAXE(
true, 803) {
104 return getDefinition(
"Mithril thrownaxe");
107 ADAMANT_THROWNAXE(
true, 804) {
110 return getDefinition(
"Adamant thrownaxe");
113 RUNE_THROWNAXE(
true, 805) {
116 return getDefinition(
"Rune thrownaxe");
119 DRAGON_THROWNAXE(
true, 20849) {
122 return getDefinition(
"Dragon thrownaxe");
126 BRONZE_DART(
true, 806, 812, 5628, 5635) {
129 return getDefinition(
"Bronze dart");
132 CRAWS_BOW(
false, 22550) {
136 return getDefinition(
"Craw's bow");
139 HEFIN(
false, 25867) {
143 return getDefinition(
"Hefin");
146 IORWERTH(
false, 25886) {
150 return getDefinition(
"Iorwerth");
153 TRAHEAERN(
false, 25888) {
157 return getDefinition(
"Traheaern");
160 CADARN(
false, 25890) {
164 return getDefinition(
"Cadarn");
167 CRWYS(
false, 25892) {
171 return getDefinition(
"Crwys");
174 AMLODD(
false, 25896) {
178 return getDefinition(
"Amlodd");
181 MEILYR(
false, 25884, 25865, 25894) {
185 return getDefinition(
"Meilyr");
191 IRON_DART(
true, 807, 813, 5629, 5636) {
194 return getDefinition(
"Iron dart");
197 BLACK_DART(
true, 3093, 3094, 5631, 5638) {
200 return getDefinition(
"Black dart");
203 STEEL_DART(
true, 808, 814, 5630, 5637) {
206 return getDefinition(
"Steel dart");
209 MITHRIL_DART(
true, 809, 815, 5632, 5639) {
212 return getDefinition(
"Mithril dart");
215 ADAMANT_DART(
true, 810, 816, 5633, 5640) {
218 return getDefinition(
"Adamant dart");
221 RUNE_DART(
true, 811, 817, 5634, 5641) {
224 return getDefinition(
"Rune dart");
227 DRAGON_DART(
true, 11230, 11231, 11233, 11234) {
230 return getDefinition(
"Dragon dart");
234 BRONZE_KNIFE(
true, 864, 870, 5654, 5651) {
237 return getDefinition(
"Bronze knife");
240 IRON_KNIFE(
true, 863, 871, 5655, 5662) {
243 return getDefinition(
"Iron knife");
246 BLACK_KNIFE(
true, 869, 874, 5658, 5665) {
249 return getDefinition(
"Black knife");
252 STEEL_KNIFE(
true, 865, 872, 5656, 5663) {
255 return getDefinition(
"Steel knife");
258 MITHRIL_KNIFE(
true, 866, 873, 5657, 5664) {
261 return getDefinition(
"Mithril knife");
264 ADAMANT_KNIFE(
true, 867, 875, 5659, 5666) {
267 return getDefinition(
"Adamant knife");
270 DRAGON_BOLTS(
true, 21932, 21934, 21936, 21938, 21940, 21942, 21944, 21946, 21948, 21950) {
273 return getDefinition(
"Dragon Bolts");
276 RUNE_KNIFE(
true, 868, 876, 5660, 5667) {
279 return getDefinition(
"Rune knife");
282 DRAGON_KNIFE(
true, 22804, 22810) {
285 return getDefinition(
"Dragon knife");
289 DOUBLE_BRONZE_ARROW(
true, darkBows(), 882, 883, 5616, 5622) {
292 return getDefinition(
"Bronze arrow");
295 DOUBLE_IRON_ARROW(
true, darkBows(), 884, 885, 5617, 5623) {
298 return getDefinition(
"Iron arrow");
301 DOUBLE_STEEL_ARROW(
true, darkBows(), 886, 887, 5618, 5624) {
304 return getDefinition(
"Steel arrow");
307 DOUBLE_MITHRIL_ARROW(
true, darkBows(), 888, 889, 5619, 5625) {
310 return getDefinition(
"Mithril arrow");
313 DOUBLE_ADAMANT_ARROW(
true, darkBows(), 890, 891, 5620, 5626) {
316 return getDefinition(
"Adamant arrow");
319 DOUBLE_RUNE_ARROW(
true, darkBows(), 892, 893, 5621, 5627) {
322 return getDefinition(
"Rune arrow");
325 DOUBLE_DRAGON_ARROW(
true, darkBows(), 11212, 11227, 11228, 11229) {
328 return getDefinition(
"Dragon arrow");
332 BRONZE_ARROW(
true, 882, 883, 5616, 5622) {
335 return getDefinition(
"Bronze arrow");
338 IRON_ARROW(
true, 884, 885, 5617, 5623) {
341 return getDefinition(
"Iron arrow");
344 STEEL_ARROW(
true, 886, 887, 5618, 5624) {
347 return getDefinition(
"Steel arrow");
350 MITHRIL_ARROW(
true, 888, 889, 5619, 5625) {
353 return getDefinition(
"Mithril arrow");
356 ADAMANT_ARROW(
true, 890, 891, 5620, 5626) {
359 return getDefinition(
"Adamant arrow");
362 RUNE_ARROW(
true, 892, 893, 5621, 5627) {
365 return getDefinition(
"Rune arrow");
368 DRAGON_ARROW(
true, 11212, 11227, 11228, 11229) {
371 return getDefinition(
"Dragon arrow");
375 BRONZE_BOLTS(
true, 877, 878, 6061, 6062, 879, 9236) {
378 return getDefinition(
"Bronze bolts");
381 BLURITE_BOLTS(
true, 9139, 9286, 9293, 9300, 9335, 9237) {
384 return getDefinition(
"Blurite bolts");
387 IRON_BOLTS(
true, 9140, 9287, 9294, 9301, 880, 9238) {
390 return getDefinition(
"Iron bolts");
393 SILVER_BOLTS(
true, 9145, 9292, 9299, 9306) {
396 return getDefinition(
"Silver bolts");
399 STEEL_BOLTS(
true, 9141, 9288, 9295, 9302, 9336, 9239) {
402 return getDefinition(
"Steel bolts");
405 MITHRIL_BOLTS(
true, 9142, 9289, 9296, 9303, 9337, 9240, 9338, 9241) {
408 return getDefinition(
"Mithril bolts");
411 ADAMANT_BOLTS(
true, 9143, 9290, 9297, 9304, 9339, 9242, 9340, 9243) {
414 return getDefinition(
"Adamant bolts");
417 RUNITE_BOLTS(
true, 9144, 9291, 9298, 9305, 9341, 9244, 9342, 9245) {
420 return getDefinition(
"Runite bolts");
424 BRUTAL_BRONZE_ARROW(
true, 4773) {
427 return getDefinition(
"Bronze brutal");
430 BRUTAL_IRON_ARROW(
true, 4778) {
433 return getDefinition(
"Iron brutal");
436 BRUTAL_BLACK_ARROW(
true, 4783) {
439 return getDefinition(
"Steel brutal");
442 BRUTAL_STEEL_ARROW(
true, 4788) {
445 return getDefinition(
"Black brutal");
448 BRUTAL_MITHRIL_ARROW(
true, 4793) {
451 return getDefinition(
"Mithril brutal");
454 BRUTAL_ADAMANT_ARROW(
true, 4798) {
457 return getDefinition(
"Adamant brutal");
460 BRUTAL_RUNE_ARROW(
true, 4803) {
463 return getDefinition(
"Rune brutal");
467 TOKTZ_XIL_UL(
true, 6522) {
470 return getDefinition(
"Toktz-xil-ul");
473 BONE_BOLT(
true, 8882) {
476 return getDefinition(
"Bone bolts");
479 OGRE_ARROW(
true, 2866) {
482 return getDefinition(
"Ogre arrow");
485 ICE_ARROW(
true, 78) {
488 return getDefinition(
"Ice arrows");
492 TRAINING_ARROWS(
true, 9706) {
495 return getDefinition(
"Training arrows");
498 BOLT_RACK(
false, 4740) {
501 return getDefinition(
"Bolt rack");
505 BROAD_TIPPED_BOLTS(
true, 13280) {
508 return getDefinition(
"Broad-tipped bolts");
511 BROAD_ARROW(
true, 4160) {
514 return getDefinition(
"Broad arrow");
518 CHINCHOMPA(
false, 10033) {
521 return getDefinition(
"Chinchompa");
524 RED_CHINCHOMPA(
false, 10034) {
527 return getDefinition(
"Red chinchompa");
531 KEBBIT_BOLT(
true, 10158) {
534 return getDefinition(
"Kebbit bolts");
537 LONG_KEBBIT_BOLT(
true, 10159) {
540 return getDefinition(
"Long kebbit bolts");
544 GUAM_TAR(
false, 10142) {
547 return getDefinition(
"Guam tar");
550 MARRENTIL_TAR(
false, 10143) {
553 return getDefinition(
"Marrentill tar");
556 TARROMIN_TAR(
false, 10144) {
559 return getDefinition(
"Tarromin tar");
562 HARRALANDER_TAR(
false, 10145) {
565 return getDefinition(
"Harralander tar");
569 private final boolean droppable;
570 private final int[] ids;
571 private final int[] weapons;
573 RangedAmmunition(
boolean droppable,
int... ids) {
574 this.droppable = droppable;
576 this.weapons =
new int[0];
579 RangedAmmunition(
boolean droppable,
int[] weapons,
int... ids) {
580 this.droppable = droppable;
582 this.weapons = weapons;
585 private static final RangedAmmunition[] values = values();
587 private static final Int2ObjectMap<RangedAmmunition> itemIdToType =
new Int2ObjectArrayMap<>(values.length);
590 for (
final RangedAmmunition value : values) {
591 final int[] ids = value.ids;
594 itemIdToType.putIfAbsent(
id, value);
600 public static RangedAmmunition forItemId(
final int itemId) {
601 return itemIdToType.get(itemId);
606 private static int[] darkBows() {
607 return new int[] { 11235, 12765, 12766, 12767, 12768 };
610 public void sendProjectile(
Mob attacker,
Mob defender) {
611 getProjectile().sendProjectile(attacker, defender);
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());
623 second.send(attacker, defender);
628 public Optional<Graphic> getStart(
int id) {
640 return getDefinition(
new Item(
id).getName()).getStart();
644 case DOUBLE_BRONZE_ARROW:
647 case DOUBLE_IRON_ARROW:
650 case DOUBLE_STEEL_ARROW:
653 case DOUBLE_MITHRIL_ARROW:
656 case DOUBLE_ADAMANT_ARROW:
659 case DOUBLE_RUNE_ARROW:
662 case DOUBLE_DRAGON_ARROW:
666 return getProjectile().getStart();
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()) {
685 for (
int id : ammo.ids) {
686 if (
id == item.getId()) {
695 public Optional<Animation> getAnimation(
int id) {
707 return getDefinition(
new Item(
id).getName()).getAnimation();
709 return getProjectile().getAnimation();
712 public Optional<Graphic> getEnd(
int id) {
724 return getDefinition(
new Item(
id).getName()).getEnd();
726 return getProjectile().getEnd();
729 public Optional<CombatImpact> getEffect(
int id) {
741 return getDefinition(
new Item(
id).getName()).getEffect();
743 return getProjectile().getEffect();
746 public boolean isDroppable() {
750 public boolean isDart() {
765 public int getRemoval() {
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: