package com.nisovin.magicspells.castmodifiers; import java.util.HashMap; import org.bukkit.Location; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import com.nisovin.magicspells.castmodifiers.conditions.*; public abstract class Condition { public abstract boolean setVar(String var); public abstract boolean check(Player player); public abstract boolean check(Player player, LivingEntity target); public abstract boolean check(Player player, Location location); private static HashMap<String, Class<? extends Condition>> conditions = new HashMap<String, Class<? extends Condition>>(); public static void addCondition(String name, Class<? extends Condition> condition) { conditions.put(name.toLowerCase(), condition); } static Condition getConditionByName(String name) { Class<? extends Condition> clazz = conditions.get(name.toLowerCase()); if (clazz == null) { return null; } try { return clazz.newInstance(); } catch (Exception e) { return null; } } static { conditions.put("disguised", DisguisedCondition.class); conditions.put("day", DayCondition.class); conditions.put("night", NightCondition.class); conditions.put("time", TimeCondition.class); conditions.put("storm", StormCondition.class); conditions.put("moonphase", MoonPhaseCondition.class); conditions.put("lightlevelabove", LightLevelAboveCondition.class); conditions.put("lightlevelbelow", LightLevelBelowCondition.class); conditions.put("onblock", OnBlockCondition.class); conditions.put("inblock", InBlockCondition.class); conditions.put("onground", OnGroundCondition.class); conditions.put("inregion", InRegionCondition.class); conditions.put("incuboid", InCuboidCondition.class); conditions.put("innomagiczone", InNoMagicZoneCondition.class); conditions.put("outside", OutsideCondition.class); conditions.put("roof", RoofCondition.class); conditions.put("elevationabove", ElevationAboveCondition.class); conditions.put("elevationbelow", ElevationBelowCondition.class); conditions.put("biome", BiomeCondition.class); conditions.put("sneaking", SneakingCondition.class); conditions.put("sprinting", SprintingCondition.class); conditions.put("flying", FlyingCondition.class); conditions.put("falling", FallingCondition.class); conditions.put("blocking", BlockingCondition.class); conditions.put("riding", RidingCondition.class); conditions.put("wearing", WearingCondition.class); conditions.put("wearinginslot", WearingInSlotCondition.class); conditions.put("holding", HoldingCondition.class); conditions.put("offhand", OffhandCondition.class); conditions.put("durabilitylessthan", DurabilityLessThanCondition.class); conditions.put("hasitem", HasItemCondition.class); conditions.put("hasitemlessthan", HasItemLessThanCondition.class); conditions.put("hasitemmorethan", HasItemMoreThanCondition.class); conditions.put("openslotslessthan", OpenSlotsLessThanCondition.class); conditions.put("openslotsmorethan", OpenSlotsMoreThanCondition.class); conditions.put("onteam", OnTeamCondition.class); conditions.put("onsameteam", OnSameTeamCondition.class); conditions.put("healthabove", HealthAboveCondition.class); conditions.put("healthbelow", HealthBelowCondition.class); conditions.put("absorptionlessthan", AbsorptionLessThanCondition.class); conditions.put("absorptionmorethan", AbsorptionMoreThanCondition.class); conditions.put("manaabove", ManaAboveCondition.class); conditions.put("manabelow", ManaBelowCondition.class); conditions.put("foodabove", FoodAboveCondition.class); conditions.put("foodbelow", FoodBelowCondition.class); conditions.put("levelabove", LevelAboveCondition.class); conditions.put("levelbelow", LevelBelowCondition.class); conditions.put("magicxpabove", MagicXpAboveCondition.class); conditions.put("magicxpbelow", MagicXpBelowCondition.class); conditions.put("pitchabove", PitchAboveCondition.class); conditions.put("pitchbelow", PitchBelowCondition.class); conditions.put("rotationabove", RotationAboveCondition.class); conditions.put("rotationbelow", RotationBelowCondition.class); conditions.put("facing", FacingCondition.class); conditions.put("potioneffect", PotionEffectCondition.class); conditions.put("onfire", OnFireCondition.class); conditions.put("buffactive", BuffActiveCondition.class); conditions.put("lastdamagetype", LastDamageTypeCondition.class); conditions.put("world", InWorldCondition.class); conditions.put("permission", PermissionCondition.class); conditions.put("playeronline", PlayerOnlineCondition.class); conditions.put("chance", ChanceCondition.class); conditions.put("entitytype", EntityTypeCondition.class); conditions.put("distancemorethan", DistanceMoreThan.class); conditions.put("distancelessthan", DistanceLessThan.class); conditions.put("name", NameCondition.class); conditions.put("uptime", UpTimeCondition.class); conditions.put("variablemorethan", VariableMoreThanCondition.class); conditions.put("variablelessthan", VariableLessThanCondition.class); conditions.put("variableequals", VariableEqualsCondition.class); conditions.put("alivelessthan", AliveLessThan.class); conditions.put("alivemorethan", AliveMoreThan.class); conditions.put("lastlifelongerthan", LastLifeLongerThan.class); conditions.put("lastlifeshorterthan", LastLifeShorterThan.class); conditions.put("testforblock", TestForBlockCondition.class); conditions.put("lookingatblock", LookingAtBlockCondition.class); conditions.put("oncooldown", OnCooldownCondition.class); conditions.put("hasmark", HasMarkCondition.class); } }