RuneHive-Game
Loading...
Searching...
No Matches
JalAk.java
Go to the documentation of this file.
1package com.runehive.content.activity.infernomobs;
2
3import com.runehive.game.Animation;
4import com.runehive.game.UpdatePriority;
5import com.runehive.game.world.entity.combat.CombatType;
6import com.runehive.game.world.entity.combat.attack.FightType;
7import com.runehive.game.world.entity.combat.hit.CombatHit;
8import com.runehive.game.world.entity.combat.hit.Hit;
9import com.runehive.game.world.entity.combat.strategy.CombatStrategy;
10import com.runehive.game.world.entity.combat.strategy.npc.MultiStrategy;
11import com.runehive.game.world.entity.combat.strategy.npc.NpcMagicStrategy;
12import com.runehive.game.world.entity.combat.strategy.npc.NpcMeleeStrategy;
13import com.runehive.game.world.entity.combat.strategy.npc.NpcRangedStrategy;
14import com.runehive.game.world.entity.mob.Mob;
15import com.runehive.game.world.entity.mob.npc.Npc;
16import com.runehive.game.world.entity.mob.player.Player;
17import com.runehive.game.world.entity.mob.prayer.Prayer;
18
19import static com.runehive.game.world.entity.combat.CombatUtil.createStrategyArray;
20import static com.runehive.game.world.entity.combat.CombatUtil.randomStrategy;
21import static com.runehive.game.world.entity.combat.projectile.CombatProjectile.getDefinition;
22
23public class JalAk extends MultiStrategy {
24
25 private static final CrushMelee MELEE = new CrushMelee();
26 private static final Mage MAGE = new Mage();
27 private static final Ranged RANGE = new Ranged();
28
29 private static final CombatStrategy<Npc>[] FULL_STRATEGIES = createStrategyArray(RANGE, MAGE, MELEE);
30 private static final CombatStrategy<Npc>[] NON_MELEE = createStrategyArray(RANGE, MAGE);
31
32 public JalAk() {
33 currentStrategy = randomStrategy(NON_MELEE);
34 }
35
36 @Override
37 public boolean withinDistance(Npc attacker, Mob defender) {
38 if (!currentStrategy.withinDistance(attacker, defender)) {
39 currentStrategy = randomStrategy(NON_MELEE);
40 }
41 return currentStrategy.withinDistance(attacker, defender);
42 }
43
44 @Override
45 public boolean canAttack(Npc attacker, Mob defender) {
46 if (!currentStrategy.canAttack(attacker, defender)) {
47 currentStrategy = randomStrategy(NON_MELEE);
48 }
49 return currentStrategy.canAttack(attacker, defender);
50 }
51
52 @Override
53 public void block(Mob attacker, Npc defender, Hit hit, CombatType combatType) {
54 currentStrategy.block(attacker, defender, hit, combatType);
55 defender.getCombat().attack(attacker);
56 }
57
58 @Override
59 public void finishOutgoing(Npc attacker, Mob defender) {
60 currentStrategy.finishOutgoing(attacker, defender);
61 if (MELEE.withinDistance(attacker, defender)) {
62 currentStrategy = randomStrategy(FULL_STRATEGIES);
63 } else {
64 currentStrategy = randomStrategy(NON_MELEE);
65 }
66 }
67
68 @Override
69 public int getAttackDelay(Npc attacker, Mob defender, FightType fightType) {
70 return attacker.definition.getAttackDelay();
71 }
72
73 @Override
74 public void hit(Npc attacker, Mob defender, Hit hit) {
75 super.hit(attacker, defender, hit);
76
77 if (!defender.isPlayer())
78 return;
79 Player player = defender.getPlayer();
80
81 if (currentStrategy.getCombatType().equals(CombatType.MELEE)
83 hit.setDamage(0);
84 } else if (currentStrategy.getCombatType().equals(CombatType.RANGED)
86 hit.setDamage(0);
87 } else if (currentStrategy.getCombatType().equals(CombatType.MAGIC)
89 hit.setDamage(0);
90 }
91 }
92
93 private static final class CrushMelee extends NpcMeleeStrategy {
94 private static final Animation ANIMATION = new Animation(7582, UpdatePriority.HIGH);
95
96 @Override
97 public int getAttackDistance(Npc attacker, FightType fightType) {
98 return 2;
99 }
100
101 @Override
102 public Animation getAttackAnimation(Npc attacker, Mob defender) {
103 return ANIMATION;
104 }
105
106 @Override
107 public CombatHit[] getHits(Npc attacker, Mob defender) {
108 return new CombatHit[] { nextMeleeHit(attacker, defender, 29) };
109 }
110 }
111
112 private static class Mage extends NpcMagicStrategy {
113 private static final Animation ANIMATION = new Animation(7583, UpdatePriority.HIGH);
114
115 private Mage() {
116 super(getDefinition("jalak mage"));
117 }
118
119 @Override
120 public CombatHit[] getHits(Npc attacker, Mob defender) {
121 return new CombatHit[] { nextMagicHit(attacker, defender, 29) };
122 }
123
124 @Override
125 public Animation getAttackAnimation(Npc attacker, Mob defender) {
126 return ANIMATION;
127 }
128 }
129
130 private static class Ranged extends NpcRangedStrategy {
131 private static final Animation ANIMATION = new Animation(7581, UpdatePriority.HIGH);
132
133 private Ranged() {
134 super(getDefinition("jalak range"));
135 }
136
137 @Override
138 public CombatHit[] getHits(Npc attacker, Mob defender) {
139 return new CombatHit[] { nextRangedHit(attacker, defender, 29) };
140 }
141
142 @Override
143 public Animation getAttackAnimation(Npc attacker, Mob defender) {
144 return ANIMATION;
145 }
146 }
147}
int getAttackDistance(Npc attacker, FightType fightType)
Definition JalAk.java:97
Animation getAttackAnimation(Npc attacker, Mob defender)
Definition JalAk.java:102
CombatHit[] getHits(Npc attacker, Mob defender)
Definition JalAk.java:107
CombatHit[] getHits(Npc attacker, Mob defender)
Definition JalAk.java:120
Animation getAttackAnimation(Npc attacker, Mob defender)
Definition JalAk.java:125
CombatHit[] getHits(Npc attacker, Mob defender)
Definition JalAk.java:138
Animation getAttackAnimation(Npc attacker, Mob defender)
Definition JalAk.java:143
static final CombatStrategy< Npc >[] FULL_STRATEGIES
Definition JalAk.java:29
boolean canAttack(Npc attacker, Mob defender)
Definition JalAk.java:45
static final CombatStrategy< Npc >[] NON_MELEE
Definition JalAk.java:30
void finishOutgoing(Npc attacker, Mob defender)
Definition JalAk.java:59
void hit(Npc attacker, Mob defender, Hit hit)
Definition JalAk.java:74
void block(Mob attacker, Npc defender, Hit hit, CombatType combatType)
Definition JalAk.java:53
boolean withinDistance(Npc attacker, Mob defender)
Definition JalAk.java:37
int getAttackDelay(Npc attacker, Mob defender, FightType fightType)
Definition JalAk.java:69
Class that models a single animation used by an entity.
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 nextRangedHit(T attacker, Mob defender)
final CombatHit nextMagicHit(T attacker, Mob defender)
Handles the mob class.
Definition Mob.java:66
final boolean isPlayer()
Check if an entity is a player.
Definition Mob.java:564
Represents a non-player character in the in-game world.
Definition Npc.java:29
Combat< Npc > getCombat()
The combat of the mob.
Definition Npc.java:156
This class represents a character controlled by a player.
Definition Player.java:125
boolean isActive(Prayer... prayers)
Checks if all given prayers are active.
Represents different priorities for updating.
The enumerated type whose elements represent the fighting types.