package magic.model.trigger; import magic.model.MagicCounterType; import magic.model.MagicGame; import magic.model.MagicPayedCost; import magic.model.MagicPermanent; import magic.model.MagicAmount; import magic.model.MagicAmountFactory; import magic.model.action.ChangeCountersAction; import magic.model.event.MagicEvent; public class EntersWithCounterTrigger extends EntersBattlefieldTrigger { private final MagicCounterType counterType; private final int amount; private final MagicAmount count; public EntersWithCounterTrigger(final MagicCounterType aCounterType, final int aAmount, final MagicAmount aCount) { super(MagicTrigger.REPLACEMENT); counterType = aCounterType; amount = aAmount; count = aCount; } public EntersWithCounterTrigger(final MagicCounterType aCounterType, final int aAmount) { this(aCounterType, aAmount, MagicAmountFactory.One); } public EntersWithCounterTrigger() { this(MagicCounterType.PlusOne, 0, MagicAmountFactory.One); } @Override public MagicEvent executeTrigger(final MagicGame game, final MagicPermanent permanent, final MagicPayedCost payedCost) { final int total = amount * count.getAmount(permanent, permanent.getController()); game.doAction(ChangeCountersAction.Enters( permanent, counterType, total )); return MagicEvent.NONE; } public static final EntersWithCounterTrigger XCounters(final MagicCounterType counterType) { return new EntersWithCounterTrigger() { @Override public MagicEvent executeTrigger(final MagicGame game, final MagicPermanent permanent, final MagicPayedCost payedCost) { game.doAction(ChangeCountersAction.Enters( permanent, counterType, payedCost.getX() )); return MagicEvent.NONE; } }; } public static final EntersWithCounterTrigger MultiKicker(final MagicCounterType counterType) { return new EntersWithCounterTrigger() { @Override public MagicEvent executeTrigger(final MagicGame game, final MagicPermanent permanent, final MagicPayedCost payedCost) { game.doAction(ChangeCountersAction.Enters( permanent, counterType, payedCost.getKicker() )); return MagicEvent.NONE; } }; } }