package joshie.progression.criteria.filters.entity; import joshie.progression.api.criteria.ProgressionRule; import joshie.progression.api.special.IEnum; import joshie.progression.helpers.ListHelper; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.IEntityOwnable; import net.minecraft.entity.INpc; import net.minecraft.entity.monster.EntityGolem; import net.minecraft.entity.monster.EntityGuardian; import net.minecraft.entity.monster.IMob; import net.minecraft.entity.passive.EntityAnimal; import net.minecraft.entity.passive.EntityWaterMob; import net.minecraft.entity.player.EntityPlayer; import java.util.List; import static joshie.progression.criteria.filters.entity.FilterEntityType.EntityType.BOSS; import static joshie.progression.criteria.filters.entity.FilterEntityType.EntityType.PLAYER; @ProgressionRule(name="entitytype", color=0xFFB25900) public class FilterEntityType extends FilterBaseEntity implements IEnum { public EntityType type = EntityType.ANIMAL; @Override public List<EntityLivingBase> getRandom(EntityPlayer player) { if (type == PLAYER) return ListHelper.newArrayList(player); else return super.getRandom(player); } @Override protected boolean matches(EntityLivingBase entity) { if (type == BOSS) return !entity.isNonBoss(); else if (!entity.isNonBoss()) return false; switch (type) { case ANIMAL: return entity instanceof EntityAnimal; case MONSTER: return entity instanceof IMob; case TAMEABLE: return entity instanceof IEntityOwnable; case PLAYER: return entity instanceof EntityPlayer; case WATER: return entity instanceof EntityWaterMob || entity instanceof EntityGuardian; case NPC: return entity instanceof INpc; case GOLEM: return entity instanceof EntityGolem; default: return false; } } @Override public Enum next(String name) { int id = type.ordinal() + 1; if (id < EntityType.values().length) { return EntityType.values()[id]; } return EntityType.values()[0]; } @Override public boolean isEnum(String name) { return name.equals("type"); } public enum EntityType { ANIMAL, MONSTER, WATER, TAMEABLE, BOSS, PLAYER, NPC, GOLEM; } }