RuneHive-Game
Loading...
Searching...
No Matches
DarkBow.java
Go to the documentation of this file.
1package com.runehive.game.world.entity.combat.strategy.player.special.range;
2
3import com.runehive.content.achievement.AchievementHandler;
4import com.runehive.content.achievement.AchievementKey;
5import com.runehive.game.Graphic;
6import com.runehive.game.Projectile;
7import com.runehive.game.UpdatePriority;
8import com.runehive.game.world.entity.combat.hit.CombatHit;
9import com.runehive.game.world.entity.combat.hit.Hit;
10import com.runehive.game.world.entity.combat.projectile.CombatProjectile;
11import com.runehive.game.world.entity.combat.strategy.player.PlayerRangedStrategy;
12import com.runehive.game.world.entity.mob.Mob;
13import com.runehive.game.world.entity.mob.player.Player;
14import com.runehive.game.world.items.Item;
15
16import static com.runehive.game.world.items.containers.equipment.Equipment.ARROWS_SLOT;
17
18/**
19 * Handles the magic shortbow weapon special attack.
20 *
21 * @author Daniel
22 * @author Michaael | Chex
23 */
24public class DarkBow extends PlayerRangedStrategy {
25 private static final DarkBow INSTANCE = new DarkBow();
26
29
32
33 static {
34 try {
35 CombatProjectile darkness = CombatProjectile.getDefinition("Dark Bow Darkness");
36 CombatProjectile dragons = CombatProjectile.getDefinition("Dark Bow Dragons");
37 setProjectiles(darkness, dragons);
38 } catch (Exception e) {
39 e.printStackTrace();
40 }
41 }
42
43 private DarkBow() {
44 }
45
46 @Override
47 protected void sendStuff(Player attacker, Mob defender) {
48 super.sendStuff(attacker, defender);
49
50 if (isDragonArrow(attacker.equipment.get(ARROWS_SLOT))) {
51 DRAGONS_PROJECTILE_1.send(attacker, defender);
52 DRAGONS_PROJECTILE_2.send(attacker, defender);
53 } else {
54 DARKNESS_PROJECTILE_1.send(attacker, defender);
55 DARKNESS_PROJECTILE_2.send(attacker, defender);
56 }
57 }
58
59 @Override
60 public void hit(Player attacker, Mob defender, Hit hit) {
61 if (isDragonArrow(attacker.equipment.get(ARROWS_SLOT))) {
62 defender.graphic(new Graphic(1100, true, UpdatePriority.HIGH));
63 } else {
64 defender.graphic(new Graphic(1103, true, UpdatePriority.HIGH));
65 }
66 super.hit(attacker, defender, hit);
67 }
68
69 @Override
70 public CombatHit[] getHits(Player attacker, Mob defender) {
71 CombatHit first = nextRangedHit(attacker, defender);
72 CombatHit second = nextRangedHit(attacker, defender);
73 int minimum = isDragonArrow(attacker.equipment.get(ARROWS_SLOT)) ? 8 : 5;
74
75 if (first.getDamage() < minimum) {
76 first.setDamage(minimum);
77 first.setAccurate(true);
78 }
79
80 if (second.getDamage() < minimum) {
81 second.setDamage(minimum);
82 second.setAccurate(true);
83 }
84
85 return new CombatHit[] { first, second };
86 }
87
88 @Override
89 public int modifyDamage(Player attacker, Mob defender, int roll) {
90 if (isDragonArrow(attacker.equipment.get(ARROWS_SLOT)))
91 return roll * 3 / 2;
92 return roll * 13 / 10;
93 }
94
95 @Override
96 public void onKill(Player attacker, Mob defender, Hit hit) {
97 if (defender.isPlayer()) {
99 }
100 }
101
102 private static void setProjectiles(CombatProjectile darkness, CombatProjectile dragons) {
103 if (!darkness.getProjectile().isPresent())
104 throw new NullPointerException("No Decent of Darkness projectile found.");
105
106 DARKNESS_PROJECTILE_1 = darkness.getProjectile().get();
107
109 DARKNESS_PROJECTILE_2.setDuration(15 + DARKNESS_PROJECTILE_2.getDuration());
110 DARKNESS_PROJECTILE_2.setCurve(32);
111
112 if (!dragons.getProjectile().isPresent())
113 throw new NullPointerException("No Decent of Dragons projectile found.");
114
115 DRAGONS_PROJECTILE_1 = dragons.getProjectile().get().copy();
116
118 DRAGONS_PROJECTILE_2.setDuration(15 + DRAGONS_PROJECTILE_1.getDuration());
119 DRAGONS_PROJECTILE_2.setCurve(32);
120 }
121
122 private static boolean isDragonArrow(Item item) {
123 if (item != null) {
124 int id = item.getId();
125 return id == 11212 || id == 11227 || id == 11228 || id == 11229;
126 }
127 return false;
128 }
129
130 public static DarkBow get() {
131 return INSTANCE;
132 }
133
134}
static void activate(Player player, AchievementKey achievement)
Activates the achievement for the individual player.
Represents a single graphic that can be used by entities.
Definition Graphic.java:10
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
int getDamage()
Gets the damage amount.
Definition Hit.java:121
void setDamage(int damage)
Sets the hit damage.
Definition Hit.java:98
final CombatHit nextRangedHit(T attacker, Mob defender)
static void setProjectiles(CombatProjectile darkness, CombatProjectile dragons)
Definition DarkBow.java:102
Handles the mob class.
Definition Mob.java:66
final boolean isPlayer()
Check if an entity is a player.
Definition Mob.java:564
Optional< Graphic > graphic
Definition Mob.java:91
This class represents a character controlled by a player.
Definition Player.java:125
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
final Item get(int index)
Gets the Item located on index.
Represents different priorities for updating.