package net.scapeemulator.game.model.player.requirement;
import net.scapeemulator.game.model.player.Equipment;
import net.scapeemulator.game.model.player.Item;
import net.scapeemulator.game.model.player.Player;
import net.scapeemulator.game.model.player.skills.magic.Rune;
/**
* @author David Insley
*/
public class RuneRequirement extends Requirement {
private final Rune rune;
private final int amount;
private final String error;
// TODO combination runes
/**
* A Rune requirement that takes into account infinite supply staves.
*
* @param rune rune
* @param amount number of runes required
*/
public RuneRequirement(Rune rune, int amount) {
this.rune = rune;
this.amount = amount;
error = "You do not have enough " + rune + "s to cast that spell.";
}
@Override
public boolean hasRequirement(Player player) {
Item staff = player.getEquipment().get(Equipment.WEAPON);
if (staff != null) {
for (int validStaff : rune.getValidStaves()) {
if (staff.getId() == validStaff) {
return true;
}
}
}
if (player.getInventory().getAmount(rune.getItemId()) >= amount) {
return true;
}
return false;
}
@Override
public void displayErrorMessage(Player player) {
player.sendMessage(error);
}
@Override
public void fulfill(Player player) {
Item weapon = player.getEquipment().get(Equipment.WEAPON);
if (weapon != null) {
int staff = weapon.getId();
for (int validStaff : rune.getValidStaves()) {
if (staff == validStaff) {
return;
}
}
}
player.getInventory().remove(new Item(rune.getItemId(), amount));
}
}