RuneHive-Game
Loading...
Searching...
No Matches
Karamel.java
Go to the documentation of this file.
1package com.runehive.game.world.entity.combat.attack.listener.npc;
2
3import com.runehive.game.world.entity.combat.attack.listener.NpcCombatListenerSignature;
4import com.runehive.game.world.entity.combat.attack.listener.SimplifiedListener;
5import com.runehive.game.world.entity.combat.hit.CombatHit;
6import com.runehive.game.world.entity.combat.hit.Hit;
7import com.runehive.game.world.entity.combat.strategy.CombatStrategy;
8import com.runehive.game.world.entity.combat.strategy.npc.NpcMagicStrategy;
9import com.runehive.game.world.entity.combat.strategy.npc.NpcMeleeStrategy;
10import com.runehive.game.world.entity.mob.Mob;
11import com.runehive.game.world.entity.mob.npc.Npc;
12
13import static com.runehive.game.world.entity.combat.CombatUtil.createStrategyArray;
14import static com.runehive.game.world.entity.combat.CombatUtil.randomStrategy;
15import static com.runehive.game.world.entity.combat.projectile.CombatProjectile.getDefinition;
16
17/**
18 * @author Daniel
19 */
20@NpcCombatListenerSignature(npcs = { 4882 })
21public class Karamel extends SimplifiedListener<Npc> {
22
23 private static MagicAttack MAGIC;
25
26 static {
27 try {
28 MAGIC = new MagicAttack();
29 STRATEGIES = createStrategyArray(NpcMeleeStrategy.get(), MAGIC);
30 } catch(Exception e) {
31 e.printStackTrace();
32 }
33 }
34
35 @Override
36 public boolean canAttack(Npc attacker, Mob defender) {
37 if(!NpcMeleeStrategy.get().withinDistance(attacker, defender)) {
38 attacker.setStrategy(MAGIC);
39 }
40 return attacker.getStrategy().canAttack(attacker, defender);
41 }
42
43 @Override
44 public void start(Npc attacker, Mob defender, Hit[] hits) {
45 if(!NpcMeleeStrategy.get().withinDistance(attacker, defender)) {
46 attacker.setStrategy(MAGIC);
47 } else {
48 attacker.setStrategy(randomStrategy(STRATEGIES));
49 }
50 }
51
52 private static class MagicAttack extends NpcMagicStrategy {
53 private MagicAttack() {
54 super(getDefinition("Ice Barrage"));
55 }
56
57 @Override
58 public void hit(Npc attacker, Mob defender, Hit hit) {
59 super.hit(attacker, defender, hit);
60 attacker.speak("Semolina-Go!");
61 }
62
63 @Override
64 public CombatHit[] getHits(Npc attacker, Mob defender) {
65 CombatHit combatHit = nextMagicHit(attacker, defender, combatProjectile);
66 combatHit.setAccurate(true);
67 return new CombatHit[] { combatHit };
68 }
69 }
70}
void start(Npc attacker, Mob defender, Hit[] hits)
Definition Karamel.java:44
A wrapper for a Hit object, adding additional variables for hit and hitsplat delays.
A Hit object holds the damage amount and hitsplat data.
Definition Hit.java:10
final CombatHit nextMagicHit(T attacker, Mob defender)
Handles the mob class.
Definition Mob.java:66
void speak(String forceChat)
Sets the mob's forced chat.
Definition Mob.java:127
Represents a non-player character in the in-game world.
Definition Npc.java:29
void setStrategy(CombatStrategy< Npc > strategy)
Definition Npc.java:212
CombatStrategy< Npc > getStrategy()
The combat strategy of the mob.
Definition Npc.java:161