package com.nisovin.magicspells.castmodifiers.conditions;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.EntityEquipment;
import org.bukkit.inventory.ItemStack;
import com.nisovin.magicspells.MagicSpells;
import com.nisovin.magicspells.castmodifiers.Condition;
public class OffhandCondition extends Condition {
int[] ids;
short[] datas;
boolean[] checkData;
String[] names;
boolean[] checkName;
@Override
public boolean setVar(String var) {
try {
String[] vardata = var.split(",");
ids = new int[vardata.length];
datas = new short[vardata.length];
checkData = new boolean[vardata.length];
names = new String[vardata.length];
checkName = new boolean[vardata.length];
for (int i = 0; i < vardata.length; i++) {
if (vardata[i].contains("|")) {
String[] subvardata = vardata[i].split("\\|");
vardata[i] = subvardata[0];
names[i] = ChatColor.translateAlternateColorCodes('&', subvardata[1]).replace("__", " ");
if (names[i].isEmpty()) names[i] = null;
checkName[i] = true;
} else {
names[i] = null;
checkName[i] = false;
}
if (vardata[i].contains(":")) {
String[] subvardata = vardata[i].split(":");
ids[i] = Integer.parseInt(subvardata[0]);
if (subvardata[1].equals("*")) {
datas[i] = 0;
checkData[i] = false;
} else {
datas[i] = Short.parseShort(subvardata[1]);
checkData[i] = true;
}
} else {
ids[i] = Integer.parseInt(vardata[i]);
datas[i] = 0;
checkData[i] = false;
}
}
return true;
} catch (Exception e) {
return false;
}
}
@Override
public boolean check(Player player) {
ItemStack item = MagicSpells.getVolatileCodeHandler().getOffhand(player);
return check(item);
}
@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;
}
private boolean check(ItemStack item) {
if (item == null) return false;
int thisid = item == null ? 0 : item.getTypeId();
short thisdata = item == null ? 0 : item.getDurability();
String thisname = null;
try {
if (item.hasItemMeta() && item.getItemMeta().hasDisplayName()) {
thisname = item.getItemMeta().getDisplayName();
}
} catch (Exception e) {}
for (int i = 0; i < ids.length; i++) {
if (ids[i] == thisid && (!checkData[i] || datas[i] == thisdata) && (!checkName[i] || strEquals(names[i], thisname))) {
return true;
}
}
return false;
}
private boolean strEquals(String s1, String s2) {
if (s1 == s2) return true;
if (s1 == null || s2 == null) return false;
return s1.equals(s2);
}
}