diff --git a/Mage.Sets/src/mage/cards/u/UginsMastery.java b/Mage.Sets/src/mage/cards/u/UginsMastery.java new file mode 100644 index 00000000000..c0990abe464 --- /dev/null +++ b/Mage.Sets/src/mage/cards/u/UginsMastery.java @@ -0,0 +1,131 @@ +package mage.cards.u; + +import mage.MageInt; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.SpellCastControllerTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.keyword.ManifestEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.filter.FilterPermanent; +import mage.filter.FilterSpell; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterCreatureSpell; +import mage.filter.predicate.card.FaceDownPredicate; +import mage.filter.predicate.mageobject.ColorlessPredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.TargetPermanent; + +import java.util.Objects; +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class UginsMastery extends CardImpl { + + private static final FilterSpell filter = new FilterCreatureSpell("a colorless creature spell"); + + static { + filter.add(ColorlessPredicate.instance); + } + + public UginsMastery(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{4}"); + + // Whenever you cast a colorless creature spell, manifest the top card of your library. + this.addAbility(new SpellCastControllerTriggeredAbility(new ManifestEffect(1), filter, false)); + + // Whenever you attack with creatures with total power 6 or greater, you may turn a face-down creature you control face up. + this.addAbility(new UginsMasteryTriggeredAbility()); + } + + private UginsMastery(final UginsMastery card) { + super(card); + } + + @Override + public UginsMastery copy() { + return new UginsMastery(this); + } +} + +class UginsMasteryTriggeredAbility extends TriggeredAbilityImpl { + + UginsMasteryTriggeredAbility() { + super(Zone.BATTLEFIELD, new UginsMasteryEffect()); + this.setTriggerPhrase("Whenever you attack with creatures with total power 6 or greater, "); + } + + private UginsMasteryTriggeredAbility(final UginsMasteryTriggeredAbility ability) { + super(ability); + } + + @Override + public UginsMasteryTriggeredAbility copy() { + return new UginsMasteryTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DECLARED_ATTACKERS; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + return isControlledBy(event.getPlayerId()) + && game + .getCombat() + .getAttackers() + .stream() + .map(game::getPermanent) + .filter(Objects::nonNull) + .map(MageObject::getPower) + .mapToInt(MageInt::getValue) + .sum() >= 6; + } +} + +class UginsMasteryEffect extends OneShotEffect { + + private static final FilterPermanent filter + = new FilterControlledCreaturePermanent("a face-down creature you control"); + + static { + filter.add(FaceDownPredicate.instance); + } + + UginsMasteryEffect() { + super(Outcome.Benefit); + staticText = "you may turn a face-down creature you control face up"; + } + + private UginsMasteryEffect(final UginsMasteryEffect effect) { + super(effect); + } + + @Override + public UginsMasteryEffect copy() { + return new UginsMasteryEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player == null) { + return false; + } + TargetPermanent target = new TargetPermanent(0, 1, filter, true); + player.choose(outcome, target, source, game); + Permanent permanent = game.getPermanent(target.getFirstTarget()); + return permanent != null && permanent.turnFaceUp(source, game, source.getControllerId()); + } +} diff --git a/Mage.Sets/src/mage/sets/CommanderMasters.java b/Mage.Sets/src/mage/sets/CommanderMasters.java index 20c28ded15d..f83dafb368d 100644 --- a/Mage.Sets/src/mage/sets/CommanderMasters.java +++ b/Mage.Sets/src/mage/sets/CommanderMasters.java @@ -466,6 +466,7 @@ public final class CommanderMasters extends ExpansionSet { cards.add(new SetCardInfo("Twilight Prophet", 193, Rarity.MYTHIC, mage.cards.t.TwilightProphet.class)); cards.add(new SetCardInfo("Two-Headed Sliver", 883, Rarity.COMMON, mage.cards.t.TwoHeadedSliver.class)); cards.add(new SetCardInfo("Tyrite Sanctum", 1049, Rarity.RARE, mage.cards.t.TyriteSanctum.class)); + cards.add(new SetCardInfo("Ugin's Mastery", 718, Rarity.RARE, mage.cards.u.UginsMastery.class)); cards.add(new SetCardInfo("Ugin, the Ineffable", 811, Rarity.RARE, mage.cards.u.UginTheIneffable.class)); cards.add(new SetCardInfo("Ulamog's Crusher", 6, Rarity.COMMON, mage.cards.u.UlamogsCrusher.class)); cards.add(new SetCardInfo("Ulamog, the Ceaseless Hunger", 5, Rarity.MYTHIC, mage.cards.u.UlamogTheCeaselessHunger.class)); diff --git a/Mage/src/main/java/mage/abilities/effects/common/TurnFaceUpTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/TurnFaceUpTargetEffect.java index 10527902be5..92f1e3ac554 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/TurnFaceUpTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/TurnFaceUpTargetEffect.java @@ -7,8 +7,6 @@ import mage.constants.Outcome; import mage.game.Game; import mage.game.permanent.Permanent; -import java.util.UUID; - /** * @author cg5 */ @@ -29,14 +27,8 @@ public class TurnFaceUpTargetEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - UUID target = targetPointer.getFirst(game, source); - if (target != null) { - Permanent permanent = game.getPermanent(target); - if (permanent != null) { - return permanent.turnFaceUp(source, game, source.getControllerId()); - } - } - return false; + Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source)); + return permanent != null && permanent.turnFaceUp(source, game, source.getControllerId()); } @Override