package net.scapeemulator.game.model.npc.action; import net.scapeemulator.game.model.mob.Animation; import net.scapeemulator.game.model.mob.combat.MobKillListeners; import net.scapeemulator.game.model.npc.NPC; import net.scapeemulator.game.task.Action; public final class NPCDeathAction extends Action<NPC> { private enum State { START, END, RESPAWN } private State state = State.START; public NPCDeathAction(NPC npc) { super(npc, 4, true); } @Override public void execute() { switch (state) { case START: mob.getWalkingQueue().reset(); mob.getCombatHandler().reset(); mob.playAnimation(new Animation(mob.getDefinition().getDeathEmote())); state = State.END; return; case END: mob.setHidden(true); mob.drop(mob.getHits().getMostDamageDealt()); MobKillListeners.mobKilled(mob, mob.getHits().getMostDamageDealt()); setDelay(mob.getDefinition().getRespawnTime()); state = State.RESPAWN; return; case RESPAWN: mob.cancelAnimation(); mob.getSkillSet().restoreStats(); mob.teleport(mob.getSpawnPosition()); mob.setHidden(false); stop(); } } }