RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
RingOfRecoilListener.java
1package com.osroyale.game.world.entity.combat.attack.listener.item;
2
3import com.osroyale.net.packet.out.SendMessage;
4import com.osroyale.game.world.entity.combat.CombatType;
5import com.osroyale.game.world.entity.combat.attack.listener.ItemCombatListenerSignature;
6import com.osroyale.game.world.entity.combat.attack.listener.NpcCombatListenerSignature;
7import com.osroyale.game.world.entity.combat.attack.listener.SimplifiedListener;
8import com.osroyale.game.world.entity.combat.hit.Hit;
9import com.osroyale.game.world.entity.combat.hit.HitIcon;
10import com.osroyale.game.world.entity.mob.Mob;
11import com.osroyale.game.world.entity.mob.player.Player;
12import com.osroyale.game.world.items.containers.equipment.Equipment;
13
17@NpcCombatListenerSignature(npcs = {2192})
18@ItemCombatListenerSignature(requireAll = false, items = {2550})
19public class RingOfRecoilListener extends SimplifiedListener<Mob> {
20
21 @Override
22 public void block(Mob attacker, Mob defender, Hit hit, CombatType combatType) {
23 if (hit.getDamage() < 1)
24 return;
25
26 int recoil = hit.getDamage() < 10 ? 1 : hit.getDamage() / 10;
27
28 if (defender.isNpc()) {
29 handleRecoil(attacker, defender, recoil);
30 return;
31 }
32
33 Player player = defender.getPlayer();
34 int charges = player.ringOfRecoil;
35 charges -= recoil;
36
37 if (charges <= 0) {
38 player.getCombat().removeListener(this);
39 player.send(new SendMessage("Your ring of recoil has shattered!"));
40 player.equipment.set(Equipment.RING_SLOT, null, true);
41 recoil += charges;
42 charges = 40;
43 }
44
45 player.ringOfRecoil = charges;
46 if (recoil > 0)
47 handleRecoil(attacker, defender, recoil);
48 }
49
50 private void handleRecoil(Mob attacker, Mob defender, int recoil) {
51 Hit hit = new Hit(recoil, HitIcon.DEFLECT);
52 attacker.damage(hit);
53 attacker.getCombat().getDamageCache().add(defender, hit);
54 }
55}
abstract Combat<? extends Mob > getCombat()