mirror of
https://github.com/magefree/mage.git
synced 2026-01-26 21:29:17 -08:00
[SPM] implement The Death of Gwen Stacy and update ExileGraveyardTargetPlayerEffect (#13955)
* refactor ExileGraveyardAllTargetPlayerEffect to allow multiple targets * [SPM] implement The Death of Gwen Stacy * change ExileGraveyardAllTargetPlayerEffect to do one batch movement
This commit is contained in:
parent
d46ccdd8bc
commit
d2a7991f8e
9 changed files with 209 additions and 99 deletions
|
|
@ -1,13 +1,19 @@
|
|||
package mage.abilities.effects.common;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.Mode;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.cards.Card;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author LevelX2
|
||||
*/
|
||||
|
|
@ -22,7 +28,6 @@ public class ExileGraveyardAllTargetPlayerEffect extends OneShotEffect {
|
|||
public ExileGraveyardAllTargetPlayerEffect(boolean toUniqueExile) {
|
||||
super(Outcome.Exile);
|
||||
this.toUniqueExile = toUniqueExile;
|
||||
staticText = "exile target player's graveyard";
|
||||
}
|
||||
|
||||
private ExileGraveyardAllTargetPlayerEffect(final ExileGraveyardAllTargetPlayerEffect effect) {
|
||||
|
|
@ -38,14 +43,39 @@ public class ExileGraveyardAllTargetPlayerEffect extends OneShotEffect {
|
|||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
Player targetPlayer = game.getPlayer(this.getTargetPointer().getFirst(game, source));
|
||||
if (targetPlayer == null || controller == null) {
|
||||
if (controller == null) {
|
||||
return false;
|
||||
}
|
||||
Set<Card> cardsToExile = new HashSet<>();
|
||||
|
||||
for (UUID playerId : this.getTargetPointer().getTargets(game, source)) {
|
||||
Player targetPlayer = game.getPlayer(playerId);
|
||||
if (targetPlayer == null) {
|
||||
continue;
|
||||
}
|
||||
cardsToExile.addAll(targetPlayer.getGraveyard().getCards(game));
|
||||
}
|
||||
return toUniqueExile ?
|
||||
controller.moveCardsToExile(
|
||||
targetPlayer.getGraveyard().getCards(game), source, game, true,
|
||||
cardsToExile, source, game, true,
|
||||
CardUtil.getExileZoneId(game, source), CardUtil.getSourceName(game, source)
|
||||
) : controller.moveCards(targetPlayer.getGraveyard(), Zone.EXILED, source, game);
|
||||
) : controller.moveCards(cardsToExile, Zone.EXILED, source, game);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getText(Mode mode) {
|
||||
if (staticText != null && !staticText.isEmpty()) {
|
||||
return staticText;
|
||||
}
|
||||
StringBuilder sb = new StringBuilder("exile ");
|
||||
sb.append(getTargetPointer().describeTargets(mode.getTargets(), "target player"));
|
||||
if (sb.toString().toLowerCase().endsWith("player") || sb.toString().toLowerCase().endsWith("opponent")) {
|
||||
if (getTargetPointer().isPlural(mode.getTargets())) {
|
||||
sb.append("s' graveyards");
|
||||
} else {
|
||||
sb.append("'s graveyard");
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue