package net.scapeemulator.game.model.player.skills.farming.items;
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;
public class SeedOnPatchHandler extends ItemOnObjectHandler {
static final Animation PLANT_SEED = new Animation(2291);
private final IPlant plant;
private final IFarmPatch patch;
private final boolean valid;
public SeedOnPatchHandler(IPlant plant, IFarmPatch patch) {
super(plant.getSeedId(), patch.getObjectId());
this.plant = plant;
this.patch = patch;
for (IPlant validPlant : patch.getValidPlants()) {
if (plant == validPlant) {
valid = true;
return;
}
}
valid = false;
}
@Override
public void handle(Player player, GroundObject object, SlottedItem item) {
player.startAction(new SeedOnPatchAction(player, object));
}
private class SeedOnPatchAction extends ReachObjectAction {
public SeedOnPatchAction(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);
if (!valid) {
mob.sendMessage("You can't plant that in this patch.");
stop();
return;
}
if (state.isEmpty()) {
if (plant.getRequirements().hasRequirementsDisplayOne(mob)) {
plant.getRequirements().fulfillAll(mob);
mob.playAnimation(PLANT_SEED);
state.setPlant(plant);
mob.getFarms().sendUpdates(patch);
}
} else {
mob.sendMessage("You can only plant that in an empty and weeded patch.");
}
stop();
}
}
}