package net.demilich.metastone.game.spells.desc.valueprovider; 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.targeting.EntityReference; public class ValueProviderDesc extends Desc<ValueProviderArg> { public static Map<ValueProviderArg, Object> build(Class<? extends ValueProvider> providerClass) { final Map<ValueProviderArg, Object> arguments = new EnumMap<>(ValueProviderArg.class); arguments.put(ValueProviderArg.CLASS, providerClass); return arguments; } public ValueProviderDesc(Map<ValueProviderArg, Object> arguments) { super(arguments); } public ValueProvider create() { Class<? extends ValueProvider> valueProviderClass = getValueProviderClass(); try { return valueProviderClass.getConstructor(ValueProviderDesc.class).newInstance(this); } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { e.printStackTrace(); } return null; } public EntityReference getSource() { return (EntityReference) get(ValueProviderArg.TARGET); } @SuppressWarnings("unchecked") public Class<? extends ValueProvider> getValueProviderClass() { return (Class<? extends ValueProvider>) get(ValueProviderArg.CLASS); } }