package magic.model.trigger; import magic.model.MagicGame; import magic.model.MagicPermanent; import magic.model.MagicPermanentState; import magic.model.event.MagicSourceEvent; import magic.model.event.MagicEvent; import magic.model.target.MagicTargetFilter; import magic.model.action.ChangeStateAction; public abstract class BecomesBlockedTrigger extends BecomesStateTrigger { public BecomesBlockedTrigger(final int priority) { super(priority); } public BecomesBlockedTrigger() {} @Override public boolean accept(final MagicPermanent permanent, final ChangeStateAction act) { return act.state == MagicPermanentState.Blocked && accept(permanent, act.permanent); } public boolean accept(final MagicPermanent permanent, final MagicPermanent blocker) { return true; } @Override public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final ChangeStateAction act) { return executeTrigger(game, permanent, act.permanent); } abstract public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPermanent blocked); public static final BecomesBlockedTrigger create(final MagicTargetFilter<MagicPermanent> filter, final MagicSourceEvent sourceEvent) { return new BecomesBlockedTrigger() { @Override public boolean accept(final MagicPermanent permanent, final MagicPermanent blocked) { return filter.accept(permanent, permanent.getController(), blocked); } @Override public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPermanent blocked) { return sourceEvent.getTriggerEvent(permanent, blocked); } }; } }