package net.scapeemulator.game.model.mob.action; import net.scapeemulator.game.model.World; import net.scapeemulator.game.model.mob.Mob; public final class CombatAction extends FollowAction { private boolean once; private boolean stop; public CombatAction(Mob mob, Mob target, boolean once) { super(mob, target, false, mob.getCombatHandler().getAttackRange()); mob.getCombatHandler().initiate(target); this.once = once; } public CombatAction(Mob mob, Mob target) { this(mob, target, false); } @Override public void execute() { if (!mob.getCombatHandler().canAttack(target) || stop) { stop(); return; } distance = mob.getCombatHandler().getAttackRange(); if (!target.getBounds().anyWithinArea(mob.getPosition(), mob.getSize(), distance, false) || mob.getBounds().anyWithinArea(target.getPosition(), target.getSize(), 0, true)) { super.execute(); return; } if (!World.getWorld().getTraversalMap().attackPathClear(mob, target.getPosition(), distance > 2)) { super.execute(); return; } if (mob.getCombatHandler().attack() && once) { stop = true; } } @Override public void stop() { mob.getCombatHandler().reset(); super.stop(); } }