package com.nisovin.magicspells.castmodifiers.conditions;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import com.nisovin.magicspells.castmodifiers.Condition;
public class HasItemCondition extends Condition {
int id;
short data;
boolean checkData;
String name;
boolean checkName;
@Override
public boolean setVar(String var) {
try {
if (var.contains("|")) {
String[] subvardata = var.split("\\|");
var = subvardata[0];
name = ChatColor.translateAlternateColorCodes('&', subvardata[1]).replace("__", " ");
if (name.isEmpty()) name = null;
checkName = true;
} else {
name = null;
checkName = false;
}
if (var.contains(":")) {
String[] vardata = var.split(":");
id = Integer.parseInt(vardata[0]);
if (vardata[1].equals("*")) {
data = 0;
checkData = false;
} else {
data = Short.parseShort(vardata[1]);
checkData = true;
}
} else {
id = Integer.parseInt(var);
checkData = false;
}
return true;
} catch (Exception e) {
return false;
}
}
@Override
public boolean check(Player player) {
if (checkData || checkName) {
for (ItemStack item : player.getInventory().getContents()) {
if (item != null) {
String thisname = null;
try {
if (item.hasItemMeta() && item.getItemMeta().hasDisplayName()) {
thisname = item.getItemMeta().getDisplayName();
}
} catch (Exception e) {}
if (item.getTypeId() == id && (!checkData || item.getDurability() == data) && (!checkName || strEquals(thisname, name))) {
return true;
}
}
}
return false;
} else {
return player.getInventory().contains(Material.getMaterial(id));
}
}
private boolean strEquals(String s1, String s2) {
if (s1 == s2) return true;
if (s1 == null || s2 == null) return false;
return s1.equals(s2);
}
@Override
public boolean check(Player player, LivingEntity target) {
if (target instanceof Player) {
return check((Player)target);
} else {
return false;
}
}
@Override
public boolean check(Player player, Location location) {
return false;
}
}