foul-magics/Mage.Sets/src/mage/cards/t/TenuousTruce.java
2025-06-10 19:45:04 -07:00

124 lines
4.7 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package mage.cards.t;
import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.DrawCardTargetEffect;
import mage.abilities.effects.common.SacrificeSourceEffect;
import mage.abilities.keyword.EnchantAbility;
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.TargetPlayer;
import mage.target.common.TargetOpponent;
import java.util.Set;
import java.util.UUID;
/**
* @author Alex-Vasile
*/
public class TenuousTruce extends CardImpl {
public TenuousTruce(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}");
this.addSubType(SubType.AURA);
// Enchant opponent
TargetPlayer auraTarget = new TargetOpponent();
this.getSpellAbility().addTarget(auraTarget);
this.getSpellAbility().addEffect(new AttachEffect(Outcome.DrawCard));
this.addAbility(new EnchantAbility(auraTarget));
// At the beginning of enchanted opponents end step, you and that player each draw a card.
Ability drawAbility = new BeginningOfEndStepTriggeredAbility(
TargetController.ENCHANTED, new DrawCardSourceControllerEffect(1).setText("you"), false
).setTriggerPhrase("At the beginning of enchanted opponent's end step, ");
Effect enchantedPlayerDrawEffect = new DrawCardTargetEffect(1);
enchantedPlayerDrawEffect.concatBy("and").setText("that player each draw a card");
drawAbility.addEffect(enchantedPlayerDrawEffect);
this.addAbility(drawAbility);
// When you attack enchanted opponent or a planeswalker they control
// or when they attack you or a planeswalker you control,
// sacrifice Tenuous Truce.
this.addAbility(new TenuousTruceAttackTriggeredAbility());
}
private TenuousTruce(final TenuousTruce card) {
super(card);
}
@Override
public TenuousTruce copy() {
return new TenuousTruce(this);
}
}
class TenuousTruceAttackTriggeredAbility extends TriggeredAbilityImpl {
TenuousTruceAttackTriggeredAbility() {
super(Zone.BATTLEFIELD, new SacrificeSourceEffect(), false);
setTriggerPhrase("When you attack enchanted opponent or a planeswalker they control " +
"or when they attack you or a planeswalker you control, ");
}
private TenuousTruceAttackTriggeredAbility(final TenuousTruceAttackTriggeredAbility ability) {
super(ability);
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.DECLARED_ATTACKERS;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
Permanent tenuousTruce = game.getPermanent(this.getSourceId());
Player controller = game.getPlayer(this.getControllerId());
Player attacker = game.getPlayer(game.getCombat().getAttackingPlayerId());
if (tenuousTruce == null || controller == null || attacker == null) {
return false;
}
Player enchantedPlayer = game.getPlayer(tenuousTruce.getAttachedTo());
if (enchantedPlayer == null) {
return false;
}
Set<UUID> defenderIds = game.getCombat().getPlayerDefenders(game, true);
if (controller.equals(attacker)) {
return TenuousTruceAttackTriggeredAbility.playerOneAttackingPlayerBOrTheirPlaneswalker(controller.getId(), enchantedPlayer.getId(), defenderIds, game);
} else if (enchantedPlayer.equals(attacker)) {
return TenuousTruceAttackTriggeredAbility.playerOneAttackingPlayerBOrTheirPlaneswalker(enchantedPlayer.getId(), controller.getId(), defenderIds, game);
} else {
return false;
}
}
private static boolean playerOneAttackingPlayerBOrTheirPlaneswalker(UUID playerAId, UUID playerBId, Set<UUID> defenderIds, Game game) {
if (defenderIds.contains(playerBId)) {
return true;
}
// Check planeswalkers
for (UUID defenderId : defenderIds) {
Permanent perm = game.getPermanent(defenderId);
if (perm != null && perm.getOwnerId().equals(playerBId)) {
return true;
}
}
return false;
}
@Override
public TenuousTruceAttackTriggeredAbility copy() {
return new TenuousTruceAttackTriggeredAbility(this);
}
}