package net.demilich.metastone.game.spells.desc.trigger; import java.lang.reflect.InvocationTargetException; import java.util.EnumMap; import java.util.Map; import net.demilich.metastone.game.cards.desc.Desc; import net.demilich.metastone.game.spells.TargetPlayer; import net.demilich.metastone.game.spells.trigger.GameEventTrigger; public class EventTriggerDesc extends Desc<EventTriggerArg> { public static Map<EventTriggerArg, Object> build(Class<? extends GameEventTrigger> triggerClass) { final Map<EventTriggerArg, Object> arguments = new EnumMap<>(EventTriggerArg.class); arguments.put(EventTriggerArg.CLASS, triggerClass); return arguments; } public static EventTriggerDesc createEmpty(Class<? extends GameEventTrigger> triggerClass) { return new EventTriggerDesc(EventTriggerDesc.build(triggerClass)); } public EventTriggerDesc(Map<EventTriggerArg, Object> arguments) { super(arguments); } public GameEventTrigger create() { Class<? extends GameEventTrigger> triggerClass = getTriggerClass(); try { return triggerClass.getConstructor(EventTriggerDesc.class).newInstance(this); } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { e.printStackTrace(); } return null; } public TargetPlayer getSourcePlayer() { return (TargetPlayer) get(EventTriggerArg.SOURCE_PLAYER); } public TargetPlayer getTargetPlayer() { return (TargetPlayer) get(EventTriggerArg.TARGET_PLAYER); } public int getTriggerCount() { return getInt(EventTriggerArg.VALUE); } @SuppressWarnings("unchecked") public Class<? extends GameEventTrigger> getTriggerClass() { return (Class<? extends GameEventTrigger>) get(EventTriggerArg.CLASS); } }