package net.scapeemulator.game.model.player.skills.farming.items;
import net.scapeemulator.game.dialogue.Dialogue;
import net.scapeemulator.game.dialogue.DialogueContext;
import net.scapeemulator.game.dialogue.DialogueOption;
import net.scapeemulator.game.dispatcher.item.ItemOnObjectHandler;
import net.scapeemulator.game.model.mob.Animation;
import net.scapeemulator.game.model.object.GroundObjectList.GroundObject;
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.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 SpadeOnPatchHandler extends ItemOnObjectHandler {
private static final Animation SPADE_ANIM = new Animation(-1);
private static final int SPADE = 952;
private final IFarmPatch patch;
public SpadeOnPatchHandler(IFarmPatch patch) {
super(SPADE, patch.getObjectId());
this.patch = patch;
}
@Override
public void handle(Player player, GroundObject object, SlottedItem item) {
player.startAction(new SpadePatchAction(player, object));
}
private class SpadePatchAction extends ReachObjectAction {
public SpadePatchAction(Player player, GroundObject object) {
super(1, false, player, object, 1, true);
}
@Override
public void executeAction() {
mob.turnToPosition(bounds.center());
PatchState state = mob.getFarms().getPatchState(patch);
IPlant plant = state.getPlant();
if (plant instanceof WeedsPlant) {
mob.sendMessage(plant == WeedsPlant.EMPTY ? "There's nothing there to dig up!" : "You should clear the weeds with a rake.");
stop();
return;
}
switch (state.getPlantState()) {
case DEAD:
break;
case GROWN:
break;
case WATERED:
case GROWING:
case DISEASED:
new AreYouSure().displayTo(mob);
break;
case HEALTH_CHECKED:
mob.sendMessage("");
break;
case STUMP:
break;
default:
break;
}
clear();
}
private void clear() {
mob.playAnimation(SPADE_ANIM);
mob.sendMessage("You clear the patch.");
mob.getFarms().getPatchState(patch).setPlant(WeedsPlant.EMPTY);
mob.getFarms().sendUpdates(patch);
stop();
}
@SuppressWarnings("rawtypes")
private class AreYouSure extends Dialogue {
@Override
public void initialize(DialogueContext ctx) {
ctx.openTextDialogue("Are you sure you want to dig that up?", true);
}
@Override
public void handleOption(DialogueContext ctx, DialogueOption opt) {
switch (opt) {
case CONTINUE:
ctx.openOptionDialogue("Yes, I want to dig it up.", "No, I'll keep it for now.");
break;
case OPTION_1:
clear();
ctx.stop();
break;
default:
ctx.stop();
break;
}
}
}
}
}