package magic.model.trigger; import magic.model.MagicCounterType; import magic.model.MagicGame; import magic.model.MagicPayedCost; import magic.model.MagicPermanent; import magic.model.action.ChangeCountersAction; import magic.model.action.PutItemOnStackAction; import magic.model.choice.MagicMayChoice; import magic.model.event.MagicEvent; import magic.model.event.MagicEventAction; import magic.model.event.MagicSourceEvent; import magic.model.stack.MagicTriggerOnStack; public abstract class TributeTrigger extends EntersBattlefieldTrigger { private final int amt; private final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> { final MagicPermanent permanent = event.getPermanent(); if (event.isYes()) { game.doAction(new ChangeCountersAction( permanent, MagicCounterType.PlusOne, event.getRefInt() )); } else { game.doAction(new PutItemOnStackAction(new MagicTriggerOnStack(getEvent(permanent)))); } }; public TributeTrigger(final int aAmt) { super(MagicTrigger.REPLACEMENT); amt = aAmt; } public static TributeTrigger create(final int amt, final MagicSourceEvent sourceEvent) { return new TributeTrigger(amt) { @Override public MagicEvent getEvent(final MagicPermanent permanent) { return sourceEvent.getTriggerEvent(permanent); } }; } @Override public MagicEvent executeTrigger(final MagicGame game, final MagicPermanent perm, final MagicPayedCost payedCost) { return new MagicEvent( perm, perm.getOpponent(), new MagicMayChoice("Put " + amt + " +1/+1 counters on " + perm + "?"), amt, EVENT_ACTION, "PN may$ put RN +1/+1 counters on SN." ); } public abstract MagicEvent getEvent(final MagicPermanent permanent); }