36public enum CombatSpell {
37 WIND_STRIKE(
Spellbook.MODERN, 1152, 1, 5.5f,
null,
38 getDefinition(
"Wind Strike"),
45 WATER_STRIKE(
Spellbook.MODERN, 1154, 5, 7.5f,
null,
46 getDefinition(
"Water Strike"),
54 EARTH_STRIKE(
Spellbook.MODERN, 1156, 9, 9.5f,
null,
55 getDefinition(
"Earth Strike"),
63 FIRE_STRIKE(
Spellbook.MODERN, 1158, 13, 11.5f,
null,
64 getDefinition(
"Fire Strike"),
72 WIND_BOLT(
Spellbook.MODERN, 1160, 17, 13.5f,
null,
73 getDefinition(
"Wind Bolt"),
80 WATER_BOLT(
Spellbook.MODERN, 1163, 23, 16.5f,
null,
81 getDefinition(
"Water Bolt"),
89 EARTH_BOLT(
Spellbook.MODERN, 1166, 29, 19.5f,
null,
90 getDefinition(
"Earth Bolt"),
98 FIRE_BOLT(
Spellbook.MODERN, 1169, 35, 22.5f,
null,
99 getDefinition(
"Fire Bolt"),
107 CRUMBLE_UNDEAD(
Spellbook.MODERN, 1171, 39, 24.0f,
null,
108 getDefinition(
"Crumble Undead"),
115 WIND_BLAST(
Spellbook.MODERN, 1172, 41, 25.5f,
null,
116 getDefinition(
"Wind Blast"),
123 WATER_BLAST(
Spellbook.MODERN, 1175, 47, 28.5f,
null,
124 getDefinition(
"Water Blast"),
132 EARTH_BLAST(
Spellbook.MODERN, 1177, 53, 31.5f,
null,
133 getDefinition(
"Earth Blast"),
141 FIRE_BLAST(
Spellbook.MODERN, 1181, 59, 34.5f,
null,
142 getDefinition(
"Fire Blast"),
150 WIND_WAVE(
Spellbook.MODERN, 1183, 62, 36.0f,
null,
151 getDefinition(
"Wind Wave"),
158 WATER_WAVE(
Spellbook.MODERN, 1185, 65, 37.5f,
null,
159 getDefinition(
"Water Wave"),
167 EARTH_WAVE(
Spellbook.MODERN, 1188, 70, 40.0f,
null,
168 getDefinition(
"Earth Wave"),
176 FIRE_WAVE(
Spellbook.MODERN, 1189, 75, 42.5f,
null,
177 getDefinition(
"Fire Wave"),
185 SARADOMIN_STRIKE(
Spellbook.MODERN, 1190, 60, 20.0f,
null,
186 getDefinition(
"Saradomin Strike"),
194 CLAWS_OF_GUTHIX(
Spellbook.MODERN, 1191, 60, 20.0f,
null,
195 getDefinition(
"Claws of Guthix"),
203 FLAMES_OF_ZAMORAK(
Spellbook.MODERN, 1192, 60, 20.0f,
null,
204 getDefinition(
"Flames of Zamorak"),
212 BIND(
Spellbook.MODERN, 1572, 20, 30.0f,
null,
213 getDefinition(
"Bind"),
221 IBAN_BLAST(
Spellbook.MODERN, 1539, 50, 30.0f,
new Item(1409),
222 getDefinition(
"Iban Blast"),
229 MAGIC_DART(
Spellbook.MODERN, 12037, 50, 30.0f,
new Item(4170),
230 getDefinition(
"Magic Dart"),
237 SNARE(
Spellbook.MODERN, 1582, 50, 60.0f,
null,
238 getDefinition(
"Snare"),
246 ENTANGLE(
Spellbook.MODERN, 1592, 79, 89.0f,
null,
247 getDefinition(
"Entangle"),
255 CONFUSE(
Spellbook.MODERN, 1153, 3, 13.0f,
null,
256 getDefinition(
"Confuse"),
264 WEAKEN(
Spellbook.MODERN, 1157, 11, 20.5f,
null,
265 getDefinition(
"Weaken"),
273 CURSE(
Spellbook.MODERN, 1161, 19, 29.0f,
null,
274 getDefinition(
"Curse"),
282 VULNERABILITY(
Spellbook.MODERN, 1542, 66, 76.0f,
null,
283 getDefinition(
"Vulnerability"),
291 ENFEEBLE(
Spellbook.MODERN, 1543, 73, 83.0f,
null,
292 getDefinition(
"Enfeeble"),
300 STUN(
Spellbook.MODERN, 1562, 73, 90.0f,
null,
301 getDefinition(
"Stun"),
309 TELE_BLOCK(
Spellbook.MODERN, 12445, 85, 42.5f,
null,
310 getDefinition(
"Teleblock"),
318 WIND_SURGE(
Spellbook.MODERN, 40140, 82, 44.5f,
null,
319 getDefinition(
"Wind Surge"),
326 WATER_SURGE(
Spellbook.MODERN, 40150, 85, 46.5f,
null,
327 getDefinition(
"Water Surge"),
335 EARTH_SURGE(
Spellbook.MODERN, 40170, 90, 48.5f,
null,
336 getDefinition(
"Earth Surge"),
344 FIRE_SURGE(
Spellbook.MODERN, 40190, 95, 50.5f,
null,
345 getDefinition(
"Fire Surge"),
353 ICE_RUSH(
Spellbook.ANCIENT, 12861, 58, 34.0f,
null,
354 getDefinition(
"Ice Rush"),
362 ICE_BLITZ(
Spellbook.ANCIENT, 12871, 82, 46.0f,
null,
363 getDefinition(
"Ice Blitz"),
371 ICE_BURST(
Spellbook.ANCIENT, 12881, 70, 40.0f,
null,
372 getDefinition(
"Ice Burst"),
380 ICE_BARRAGE(
Spellbook.ANCIENT, 12891, 94, 52.0f,
null,
381 getDefinition(
"Ice Barrage"),
389 BLOOD_RUSH(
Spellbook.ANCIENT, 12901, 56, 33.0f,
null,
390 getDefinition(
"Blood Rush"),
398 BLOOD_BLITZ(
Spellbook.ANCIENT, 12911, 80, 45.0f,
null,
399 getDefinition(
"Blood Blitz"),
406 BLOOD_BURST(
Spellbook.ANCIENT, 12919, 68, 39.0f,
null,
407 getDefinition(
"Blood Burst"),
415 BLOOD_BARRAGE(
Spellbook.ANCIENT, 12929, 92, 51.0f,
null,
416 getDefinition(
"Blood Barrage"),
424 SMOKE_RUSH(
Spellbook.ANCIENT, 12939, 50, 30.0f,
null,
425 getDefinition(
"Smoke Rush"),
434 SMOKE_BLITZ(
Spellbook.ANCIENT, 12951, 74, 42.0f,
null,
435 getDefinition(
"Smoke Blitz"),
444 SMOKE_BURST(
Spellbook.ANCIENT, 12963, 62, 36.0f,
null,
445 getDefinition(
"Smoke Burst"),
454 SMOKE_BARRAGE(
Spellbook.ANCIENT, 12975, 86, 48.0f,
null,
455 getDefinition(
"Smoke Barrage"),
464 SHADOW_RUSH(
Spellbook.ANCIENT, 12987, 52, 31.0f,
null,
465 getDefinition(
"Shadow Rush"),
474 SHADOW_BLITZ(
Spellbook.ANCIENT, 12999, 76, 43.0f,
null,
475 getDefinition(
"Shadow Blitz"),
484 SHADOW_BURST(
Spellbook.ANCIENT, 13011, 64, 37.0f,
null,
485 getDefinition(
"Shadow Burst"),
494 SHADOW_BARRAGE(
Spellbook.ANCIENT, 13023, 88, 49.0f,
null,
495 getDefinition(
"Shadow Barrage"),
504 private final int id;
509 private final static Map<Integer, CombatSpell> SPELLS;
512 CombatSpell[] spells = CombatSpell.values();
513 SPELLS =
new HashMap<>(spells.length);
515 for (CombatSpell spell : spells) {
516 SPELLS.put(spell.id, spell);
521 this.spellbook = spellbook;
523 this.spell =
new MagicSpell(level, baseExperience, runes) {
525 public Optional<Item[]> equipmentRequired() {
526 return weapon ==
null ? Optional.empty() : Optional.of(
new Item[]{weapon});
529 this.combatProjectile = combatProjectile;
536 public String getName() {
537 return combatProjectile.getName();
540 public int getLevel() {
545 return combatProjectile ==
null ? null :
CombatProjectile.getDefinition(combatProjectile.getName());
548 public double getBaseExperience() {
549 return spell.baseExperience;
552 public Optional<CombatImpact> getEffect() {
553 return combatProjectile.getEffect();
560 public Optional<Animation> getAnimation() {
561 return CombatProjectile.getDefinition(combatProjectile.getName()).getAnimation();
564 public Optional<Graphic> getStart() {
565 return CombatProjectile.getDefinition(combatProjectile.getName()).getStart();
568 public Optional<Graphic> getEnd() {
576 public int sendProjectile(
Mob attacker,
Mob defender) {
578 return combatProjectile ==
null ? 0 : combatProjectile.sendProjectile(attacker, defender);
581 public boolean canCast(
Mob attacker,
Mob defender) {
582 return spell.canCast(attacker, Optional.ofNullable(defender));
585 public static CombatSpell
get(
int id) {
586 return SPELLS.getOrDefault(
id, WIND_STRIKE);