package jas.spawner.legacy.spawner.creature.handler.parsing.keys;
import jas.common.JASLog;
import jas.spawner.legacy.spawner.creature.handler.parsing.ParsingHelper;
import jas.spawner.legacy.spawner.creature.handler.parsing.TypeValuePair;
import jas.spawner.legacy.spawner.creature.handler.parsing.settings.OptionalSettings.Operand;
import java.util.ArrayList;
import java.util.HashMap;
import net.minecraft.entity.EntityLiving;
import net.minecraft.world.World;
public abstract class KeyParserRange extends KeyParserBase {
public KeyParserRange(Key key) {
super(key, true, KeyType.CHAINABLE);
}
@Override
public boolean parseChainable(String parseable, ArrayList<TypeValuePair> parsedChainable,
ArrayList<Operand> operandvalue) {
String[] pieces = parseable.split(",");
Operand operand = parseOperand(pieces);
if (pieces.length == 3) {
int min = ParsingHelper.parseFilteredInteger(pieces[1], 16, "1st " + key.key);
int max = ParsingHelper.parseFilteredInteger(pieces[2], -1, "2nd " + key.key);
TypeValuePair typeValue = new TypeValuePair(key, new Object[] { isInverted(pieces[0]), min, max });
parsedChainable.add(typeValue);
operandvalue.add(operand);
return true;
} else {
JASLog.log().severe("Error Parsing %s Parameter. Invalid Argument Length.", key.key);
return false;
}
}
@Override
public boolean parseValue(String parseable, HashMap<String, Object> valueCache) {
throw new UnsupportedOperationException();
}
@Override
public boolean isValidLocation(World world, EntityLiving entity, int xCoord, int yCoord, int zCoord,
TypeValuePair typeValuePair, HashMap<String, Object> valueCache) {
Object[] values = (Object[]) typeValuePair.getValue();
boolean isInverted = (Boolean) values[0];
int current = getCurrent(world, entity, xCoord, yCoord, zCoord, typeValuePair, valueCache);
int minRange = (Integer) values[1];
int maxRange = (Integer) values[2];
boolean isValid = !(current <= maxRange && current >= minRange);
if (minRange <= maxRange) {
isValid = (current <= maxRange && current >= minRange);
} else {
isValid = !(current < minRange && current > maxRange);
}
return isInverted ? isValid : !isValid;
}
abstract int getCurrent(World world, EntityLiving entity, int xCoord, int yCoord, int zCoord,
TypeValuePair typeValuePair, HashMap<String, Object> valueCache);
}