package net.demilich.metastone.game.spells.desc.aura; import java.lang.reflect.InvocationTargetException; import java.util.EnumMap; import java.util.Map; import net.demilich.metastone.game.Attribute; import net.demilich.metastone.game.cards.desc.Desc; import net.demilich.metastone.game.spells.aura.Aura; import net.demilich.metastone.game.spells.desc.SpellDesc; import net.demilich.metastone.game.spells.desc.filter.EntityFilter; import net.demilich.metastone.game.targeting.EntityReference; public class AuraDesc extends Desc<AuraArg> { public static Map<AuraArg, Object> build(Class<? extends Aura> auraClass) { final Map<AuraArg, Object> arguments = new EnumMap<>(AuraArg.class); arguments.put(AuraArg.CLASS, auraClass); return arguments; } public AuraDesc(Map<AuraArg, Object> arguments) { super(arguments); } public Aura create() { Class<? extends Aura> auraClass = getAuraClass(); try { return auraClass.getConstructor(AuraDesc.class).newInstance(this); } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { e.printStackTrace(); } return null; } public SpellDesc getApplyEffect() { return (SpellDesc) get(AuraArg.APPLY_EFFECT); } public Attribute getAttribute() { return (Attribute) get(AuraArg.ATTRIBUTE); } @SuppressWarnings("unchecked") public Class<? extends Aura> getAuraClass() { return (Class<? extends Aura>) get(AuraArg.CLASS); } public EntityFilter getFilter() { return (EntityFilter) get(AuraArg.FILTER); } public SpellDesc getRemoveEffect() { return (SpellDesc) get(AuraArg.REMOVE_EFFECT); } public EntityReference getTarget() { return (EntityReference) get(AuraArg.TARGET); } }