diff --git a/src/magic/model/MagicAbility.java b/src/magic/model/MagicAbility.java index d2eed18f5f..54ce28d643 100644 --- a/src/magic/model/MagicAbility.java +++ b/src/magic/model/MagicAbility.java @@ -649,6 +649,12 @@ public enum MagicAbility { } } }, + Mentor("mentor", 0) { + @Override + protected void addAbilityImpl(final MagicAbilityStore card, final Matcher arg) { + card.add(ThisAttacksTrigger.Mentor); + } + }, // abilities that involve SN ShockLand("As SN enters the battlefield, you may " + ARG.COST + "\\. If you don't, SN enters the battlefield tapped\\.", -10) { diff --git a/src/magic/model/target/MagicTargetFilterFactory.java b/src/magic/model/target/MagicTargetFilterFactory.java index 99e3f9ebb1..2234f1f916 100644 --- a/src/magic/model/target/MagicTargetFilterFactory.java +++ b/src/magic/model/target/MagicTargetFilterFactory.java @@ -2281,6 +2281,16 @@ public class MagicTargetFilterFactory { } }; + public static final MagicPermanentFilterImpl MENTOR = new MagicPermanentFilterImpl() { + @Override + public boolean accept(final MagicSource source, final MagicPlayer player, final MagicPermanent target) { + final MagicPermanent mentor = (MagicPermanent)source; + return target.isCreature() && + target.isAttacking() && + target.getPower() < mentor.getPower(); + } + }; + /** * Single texts completely specifying the targeting condition. */ diff --git a/src/magic/model/trigger/ThisAttacksTrigger.java b/src/magic/model/trigger/ThisAttacksTrigger.java index 4efa327c60..93c191314b 100644 --- a/src/magic/model/trigger/ThisAttacksTrigger.java +++ b/src/magic/model/trigger/ThisAttacksTrigger.java @@ -1,12 +1,16 @@ package magic.model.trigger; +import magic.model.MagicCounterType; import magic.model.MagicGame; import magic.model.MagicPermanent; import magic.model.event.MagicEvent; import magic.model.event.MagicSourceEvent; import magic.model.event.MagicExertEvent; import magic.model.choice.MagicMayChoice; +import magic.model.choice.MagicTargetChoice; import magic.model.action.EnqueueTriggerAction; +import magic.model.action.ChangeCountersAction; +import magic.model.target.MagicTargetFilterFactory; public abstract class ThisAttacksTrigger extends AttacksTrigger { public ThisAttacksTrigger(final int priority) { @@ -51,4 +55,26 @@ public abstract class ThisAttacksTrigger extends AttacksTrigger { } }; } + + public static ThisAttacksTrigger Mentor = new ThisAttacksTrigger() { + @Override + public MagicEvent executeTrigger(final MagicGame game, final MagicPermanent permanent, final MagicPermanent attacker) { + return new MagicEvent( + permanent, + new MagicTargetChoice( + MagicTargetFilterFactory.MENTOR, + "an attacking creature you control with lesser power than " + permanent + ), + this, + "PN puts a +1/+1 counter on target attacking creature with less power than SN.$" + ); + } + @Override + public void executeEvent(final MagicGame game, final MagicEvent event) { + event.processTargetPermanent(game, permanent -> { + game.doAction(new ChangeCountersAction(event.getPlayer(), permanent, MagicCounterType.PlusOne, 1)); + }); + } + }; + }