From c3d2494db600724007953e35574ba5926b2758ab Mon Sep 17 00:00:00 2001 From: Cameron Merkel <44722506+Cguy7777@users.noreply.github.com> Date: Fri, 9 Feb 2024 21:22:36 -0600 Subject: [PATCH] Fix Aegis of the Legion after CR update (#11765) --- .../src/mage/cards/a/AegisOfTheLegion.java | 21 ++-------- .../mage/abilities/keyword/MentorAbility.java | 39 ++++++++++++++++++- .../main/java/mage/game/events/GameEvent.java | 6 +++ 3 files changed, 48 insertions(+), 18 deletions(-) diff --git a/Mage.Sets/src/mage/cards/a/AegisOfTheLegion.java b/Mage.Sets/src/mage/cards/a/AegisOfTheLegion.java index 97a59ea5524..da6c00b46af 100644 --- a/Mage.Sets/src/mage/cards/a/AegisOfTheLegion.java +++ b/Mage.Sets/src/mage/cards/a/AegisOfTheLegion.java @@ -18,8 +18,6 @@ import mage.counters.CounterType; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; -import mage.game.stack.StackAbility; -import mage.game.stack.StackObject; import mage.target.targetpointer.FixedTarget; import java.util.UUID; @@ -70,25 +68,14 @@ class AegisOfTheLegionTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.COUNTER_ADDED; + return event.getType() == GameEvent.EventType.MENTORED_CREATURE; } @Override public boolean checkTrigger(GameEvent event, Game game) { - // TODO Make sure this is correct after the comprehensive rules update for CLU/MKM, add citation - if (!event.getData().equals(CounterType.P1P1.getName())) { - return false; - } - - StackObject stackObject = game.getStack().getStackObject(event.getSourceId()); - if (!(stackObject instanceof StackAbility)) { - return false; - } - Ability ability = stackObject.getStackAbility(); - if (!(ability instanceof MentorAbility)) { - return false; - } - + // 20240202 - 702.134c + // An ability that triggers whenever a creature mentors another creature + // triggers whenever a mentor ability whose source is the first creature and whose target is the second creature resolves. Permanent attachment = getSourcePermanentOrLKI(game); Permanent mentoredCreature = game.getPermanent(event.getTargetId()); if (attachment == null || mentoredCreature == null || !event.getSourceId().equals(attachment.getAttachedTo())) { diff --git a/Mage/src/main/java/mage/abilities/keyword/MentorAbility.java b/Mage/src/main/java/mage/abilities/keyword/MentorAbility.java index 27deaf53740..041e0b23be2 100644 --- a/Mage/src/main/java/mage/abilities/keyword/MentorAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/MentorAbility.java @@ -1,14 +1,17 @@ package mage.abilities.keyword; +import mage.abilities.Ability; import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.cards.Card; +import mage.constants.Outcome; import mage.counters.CounterType; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.ObjectSourcePlayer; import mage.filter.predicate.ObjectSourcePlayerPredicate; import mage.filter.predicate.permanent.AttackingPredicate; import mage.game.Game; +import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import mage.target.common.TargetCreaturePermanent; @@ -25,7 +28,7 @@ public class MentorAbility extends AttacksTriggeredAbility { } public MentorAbility() { - super(new AddCountersTargetEffect(CounterType.P1P1.createInstance()), false); + super(new MentorEffect(), false); this.addTarget(new TargetCreaturePermanent(filter)); } @@ -54,3 +57,37 @@ enum MentorAbilityPredicate implements ObjectSourcePlayerPredicate { return sourcePermanent != null && input.getObject().getPower().getValue() < sourcePermanent.getPower().getValue(); } } + +class MentorEffect extends AddCountersTargetEffect { + + MentorEffect() { + super(CounterType.P1P1.createInstance(), Outcome.BoostCreature); + } + + private MentorEffect(final MentorEffect effect) { + super(effect); + } + + @Override + public MentorEffect copy() { + return new MentorEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + if (!super.apply(game, source)) { + return false; + } + + Permanent mentoredPermanent = game.getPermanent(targetPointer.getFirst(game, source)); + if (mentoredPermanent == null) { + return false; + } + game.fireEvent(GameEvent.getEvent( + GameEvent.EventType.MENTORED_CREATURE, + mentoredPermanent.getId(), + source, + source.getControllerId())); + return true; + } +} diff --git a/Mage/src/main/java/mage/game/events/GameEvent.java b/Mage/src/main/java/mage/game/events/GameEvent.java index 48216fbb5a8..89e6df93bdf 100644 --- a/Mage/src/main/java/mage/game/events/GameEvent.java +++ b/Mage/src/main/java/mage/game/events/GameEvent.java @@ -584,6 +584,12 @@ public class GameEvent implements Serializable { playerId the player paying the cost */ EVIDENCE_COLLECTED, + /* Mentored Creature + targetId creature that was mentored + sourceId of the mentor ability + playerId controller of the creature mentoring + */ + MENTORED_CREATURE, //custom events CUSTOM_EVENT }