Code:
public static void applyRecoilNPC(final Entity attacker, final Damage damage) {
if (!(entity instanceof Player)) {
return;
}
final recoilDamage = damage.getCount() / 10;
if (recoilDamage > 0 && entity.getEquipment().contains(RECOIL)) {
attacker.getDamageManager().submit(new Damage(DATA));
entity.decremetRecoilHits(1);
if (entity.getRecoilHits() <= 0) {
entity.getEquipment().remove(RECOIL);
final Player player = (Player) entity;
if (player != null)
player.sendOutgoingPacket(new Message("The recoil has shattered"));
}
}
}
getCloseRandomPlayer() (Also written really quickly from on top of my head):
Code:
public int getRandomClosePlayer() {
if (getHitpoints() <= 0 || isDead() || getCombatBuilder().getUnderAttackBy() != null || getCombatBuilder().getTarget() != null)
return -1;
final List<Player> players = new ArrayList<Player>();
RegionManager.getLocalPlayers(getPosition()).forEach(player -> {
if (getPosition().isWithinRange(player, distance) && player.getCombatBuilder().getUnderAttackBy() == null) {
players.add(player);
}
});
return players.size() > 0 ? players.get(random.nextInt(players.size()) : -1;
}
Compared to:
Code:
public int getCloseRandomPlayer(int i) {
ArrayList<Integer> players = new ArrayList<>();
for (int j = 0; j < PlayerHandler.players.length; j++) {
if (PlayerHandler.players[j] != null) {
if (Boundary.isIn(npcs[i], Boundary.GODWARS_BOSSROOMS)) {
if (!Boundary.isIn(PlayerHandler.players[j], Boundary.GODWARS_BOSSROOMS)) {
npcs[i].killerId = 0;
continue;
}
}
if (goodDistance(PlayerHandler.players[j].absX, PlayerHandler.players[j].absY, npcs[i].absX,
npcs[i].absY, distanceRequired(i) + followDistance(i)) || isFightCaveNpc(i)) {
if ((PlayerHandler.players[j].underAttackBy <= 0 && PlayerHandler.players[j].underAttackBy2 <= 0)
|| PlayerHandler.players[j].inMulti())
if (PlayerHandler.players[j].heightLevel == npcs[i].heightLevel)
players.add(j);
}
}
}
if (players.size() > 0)
return players.get(Misc.random(players.size() - 1));
return 0;
}