package net.scapeemulator.game.model.player.skills.farming.items; import net.scapeemulator.game.dispatcher.item.ItemOnObjectHandler; import net.scapeemulator.game.model.World; import net.scapeemulator.game.model.mob.Animation; import net.scapeemulator.game.model.object.GroundObjectList.GroundObject; import net.scapeemulator.game.model.player.Item; import net.scapeemulator.game.model.player.Player; import net.scapeemulator.game.model.player.SlottedItem; import net.scapeemulator.game.model.player.action.ReachObjectAction; import net.scapeemulator.game.model.player.skills.Skill; import net.scapeemulator.game.model.player.skills.farming.PatchState; import net.scapeemulator.game.model.player.skills.farming.patch.IFarmPatch; import net.scapeemulator.game.model.player.skills.farming.plant.IPlant; import net.scapeemulator.game.model.player.skills.farming.plant.WeedsPlant; public class RakeOnPatchHandler extends ItemOnObjectHandler { private static final Animation RAKE_ANIM = new Animation(2273); private static final Item WEEDS = new Item(6055); private static final int RAKE = 5341; private final IFarmPatch patch; public RakeOnPatchHandler(IFarmPatch patch) { super(RAKE, patch.getObjectId()); this.patch = patch; } @Override public void handle(Player player, GroundObject object, SlottedItem item) { player.startAction(new RakePatchAction(player, object)); } private class RakePatchAction extends ReachObjectAction { private boolean first = true; public RakePatchAction(Player player, GroundObject object) { super(1, false, player, object, 1, true); } @Override public void executeAction() { if (first) { mob.turnToPosition(bounds.center()); setDelay(5); } if (!mob.getInventory().contains(RAKE)) { mob.sendMessage("You seem to have lost your rake!"); stop(); return; } PatchState state = mob.getFarms().getPatchState(patch); IPlant plant = state.getPlant(); if (plant instanceof WeedsPlant) { if (plant == WeedsPlant.EMPTY) { mob.sendMessage("The patch is empty of weeds."); stop(); return; } else { mob.playAnimation(RAKE_ANIM); if (first) { first = false; return; } // the add method returns null if the item is completely added if (mob.getInventory().add(WEEDS) != null) { World.getWorld().getGroundItems().add(WEEDS.getId(), WEEDS.getAmount(), mob.getPosition(), mob); } mob.getSkillSet().addExperience(Skill.FARMING, 4.0); state.setPlant(((WeedsPlant) plant).next(false)); mob.getFarms().sendUpdates(patch); return; } } else { mob.sendMessage("You don't think you can rake that up!"); stop(); } } @Override public void stop() { mob.cancelAnimation(); super.stop(); } } }