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