package joshie.progression.criteria.filters.item;
import joshie.progression.api.criteria.ProgressionRule;
import joshie.progression.api.special.IEnum;
import joshie.progression.api.special.IInit;
import joshie.progression.api.special.ISetterCallback;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@ProgressionRule(name="tagsingle", color=0xFF00B2B2)
public class FilterItemNBTFuzzy extends FilterBaseItem implements IInit, ISetterCallback, IEnum {
public String name = "";
public String value = "";
public NBTType type = NBTType.STRING;
@Override
public boolean matches(ItemStack check) {
if (!check.hasTagCompound()) return false;
NBTTagCompound tag = check.getTagCompound();
switch (type) {
case BYTE: return tag.getByte(name) == bytevalue;
case SHORT: return tag.getShort(name) == bytevalue;
case INT: return tag.getInteger(name) == bytevalue;
case LONG: return tag.getLong(name) == bytevalue;
case FLOAT: return tag.getFloat(name) == bytevalue;
case DOUBLE: return tag.getDouble(name) == bytevalue;
case STRING: return tag.getString(name).equals(value);
default: return false;
}
}
public transient byte bytevalue = 0;
public void parseByte() {
try {
bytevalue = Byte.parseByte(value);
} catch (Exception e) {}
}
public transient short shortvalue = 0;
public void parseShort() {
try {
shortvalue = Short.parseShort(value);
} catch (Exception e) {}
}
public transient int intvalue = 0;
public void parseInt() {
try {
intvalue = Integer.parseInt(value);
} catch (Exception e) {}
}
public transient long longvalue = 0;
public void parseLong() {
try {
longvalue = Long.parseLong(value);
} catch (Exception e) {}
}
public transient float floatvalue = 0;
public void parseFloat() {
try {
floatvalue = Float.parseFloat(value);
} catch (Exception e) {}
}
public transient double doublevalue = 0;
public void parseDouble() {
try {
doublevalue = Double.parseDouble(value);
} catch (Exception e) {}
}
@Override
public void init(boolean isClient) {
switch (type) {
case BYTE: parseByte();
break;
case SHORT: parseShort();
break;
case INT: parseInt();
break;
case LONG: parseLong();
break;
case FLOAT: parseFloat();
break;
case DOUBLE: parseDouble();
break;
}
}
@Override
public boolean setField(String fieldName, Object object) {
if (fieldName.equals(value)) {
init(true); //PARSE
return true;
}
return false;
}
@Override
public Enum next(String name) {
int id = type.ordinal() + 1;
if (id < NBTType.values().length) {
return NBTType.values()[id];
}
return NBTType.values()[0];
}
@Override
public boolean isEnum(String name) {
return name.equals("type");
}
public enum NBTType {
BYTE, SHORT, INT, LONG, FLOAT, DOUBLE, STRING;
}
}