package joshie.progression.criteria.filters.location;
import joshie.progression.Progression;
import joshie.progression.api.criteria.ProgressionRule;
import joshie.progression.api.special.ICustomDescription;
import joshie.progression.api.special.IEnum;
import joshie.progression.api.special.IInit;
import joshie.progression.lib.WorldLocation;
import net.minecraft.entity.player.EntityPlayer;
@ProgressionRule(name="randomaround", color=0xFFBBBBBB)
public class FilterRandomAround extends FilterLocationBase implements IInit, ICustomDescription, IEnum {
public LocationOperator xoperator = LocationOperator.RADIUS;
public LocationOperator yoperator = LocationOperator.RADIUS;
public LocationOperator zoperator = LocationOperator.RADIUS;
public int dimensionID = 0;
public int xCoordinate = 8;
public int yCoordinate = 8;
public int zCoordinate = 8;
public int randomX = 32;
public int randomY = 32;
public int randomZ = 32;
private transient FilterRandomX dummyX = new FilterRandomX();
private transient FilterRandomY dummyY = new FilterRandomY();
private transient FilterRandomZ dummyZ = new FilterRandomZ();
@Override
public void init(boolean isClient) {
dummyX.operator = xoperator;
dummyX.coordinate = xCoordinate;
dummyX.distance = randomX;
dummyY.operator = yoperator;
dummyY.coordinate = yCoordinate;
dummyY.distance = randomY;
dummyZ.operator = zoperator;
dummyZ.coordinate = zCoordinate;
dummyZ.distance = randomZ;
}
@Override
public String getDescription() {
return Progression.format("filter.location.randomaround.description", xCoordinate, yCoordinate, zCoordinate);
}
@Override
public WorldLocation getRandom(EntityPlayer player) {
int randX = dummyX.getRandom(player).pos.getX();
int randY = dummyY.getRandom(player).pos.getY();
int randZ = dummyZ.getRandom(player).pos.getZ();
return new WorldLocation(dimensionID, randX, randY, randZ);
}
@Override
public boolean matches(WorldLocation location) {
if (location.dimension != dimensionID) return false;
if (!dummyX.matches(location)) return false;
if (!dummyY.matches(location)) return false;
if (dummyZ.matches(location)) return false;
return true; //Now we return true as we aren't outside the defined boundary
}
@Override
public Enum next(String name) {
int id = xoperator.ordinal() + 1;
if (name.equals("yoperator")) id = yoperator.ordinal() + 1;
else if (name.equals("zoperator")) id = zoperator.ordinal() + 1;
if (id < LocationOperator.values().length) {
return LocationOperator.values()[id];
}
return LocationOperator.values()[0];
}
@Override
public boolean isEnum(String name) {
return name.contains("operator");
}
}