This commit is contained in:
Jeff 2018-11-19 11:17:14 -06:00
parent f15d8a0da8
commit d1c1abb967

View file

@ -10,10 +10,11 @@ import mage.constants.*;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.players.Player; import mage.players.Player;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
import mage.abilities.effects.AsThoughManaEffect;
import mage.players.ManaPoolItem;
/** /**
* @author TheElk801 * @author TheElk801
@ -69,17 +70,18 @@ class MnemonicBetrayalExileEffect extends OneShotEffect {
} }
Cards cards = new CardsImpl(); Cards cards = new CardsImpl();
Map<UUID, Integer> cardMap = new HashMap(); Map<UUID, Integer> cardMap = new HashMap();
for (UUID playerId : game.getOpponents(source.getControllerId())) { game.getOpponents(source.getControllerId()).stream().map((playerId) -> game.getPlayer(playerId)).filter((player) -> (player != null)).forEachOrdered((player) -> {
Player player = game.getPlayer(playerId);
if (player != null) {
cards.addAll(player.getGraveyard()); cards.addAll(player.getGraveyard());
} });
} cards.getCards(game).stream().map((card) -> {
for (Card card : cards.getCards(game)) {
cardMap.put(card.getId(), card.getZoneChangeCounter(game)); cardMap.put(card.getId(), card.getZoneChangeCounter(game));
return card;
}).map((card) -> {
game.addEffect(new MnemonicBetrayalCastFromExileEffect(card, game), source); game.addEffect(new MnemonicBetrayalCastFromExileEffect(card, game), source);
return card;
}).forEachOrdered((card) -> {
game.addEffect(new MnemonicBetrayalAnyColorEffect(card, game), source); game.addEffect(new MnemonicBetrayalAnyColorEffect(card, game), source);
} });
controller.moveCardsToExile(cards.getCards(game), source, game, true, source.getSourceId(), source.getSourceObjectIfItStillExists(game).getName()); controller.moveCardsToExile(cards.getCards(game), source, game, true, source.getSourceId(), source.getSourceObjectIfItStillExists(game).getName());
game.addDelayedTriggeredAbility(new MnemonicBetrayalDelayedTriggeredAbility(cards, cardMap), source); game.addDelayedTriggeredAbility(new MnemonicBetrayalDelayedTriggeredAbility(cards, cardMap), source);
return true; return true;
@ -125,7 +127,7 @@ class MnemonicBetrayalCastFromExileEffect extends AsThoughEffectImpl {
} }
} }
class MnemonicBetrayalAnyColorEffect extends AsThoughEffectImpl { class MnemonicBetrayalAnyColorEffect extends AsThoughEffectImpl implements AsThoughManaEffect {
private final Card card; private final Card card;
private final int zoneCounter; private final int zoneCounter;
@ -154,13 +156,21 @@ class MnemonicBetrayalAnyColorEffect extends AsThoughEffectImpl {
@Override @Override
public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) {
if (card.getZoneChangeCounter(game) != zoneCounter) { if (objectId.equals(card.getId())
&& card.getZoneChangeCounter(game) <= zoneCounter + 1
&& affectedControllerId.equals(source.getControllerId())) {
return true;
} else {
if (objectId.equals(card.getId())) {
this.discard(); this.discard();
}
}
return false; return false;
} }
return objectId.equals(card.getId())
&& card.getZoneChangeCounter(game) == zoneCounter @Override
&& affectedControllerId.equals(source.getControllerId()); public ManaType getAsThoughManaType(ManaType manaType, ManaPoolItem mana, UUID affectedControllerId, Ability source, Game game) {
return mana.getFirstAvailable();
} }
} }
@ -240,12 +250,10 @@ class MnemonicBetrayalReturnEffect extends OneShotEffect {
return false; return false;
} }
Cards cardsToReturn = new CardsImpl(); Cards cardsToReturn = new CardsImpl();
for (Card card : cards.getCards(game)) { cards.getCards(game).stream().filter((card) -> (game.getState().getZone(card.getId()) == Zone.EXILED
if (game.getState().getZone(card.getId()) == Zone.EXILED && card.getZoneChangeCounter(game) == cardMap.getOrDefault(card.getId(), -5) + 1)).forEachOrdered((card) -> {
&& card.getZoneChangeCounter(game) == cardMap.getOrDefault(card.getId(), -5) + 1) {
cardsToReturn.add(card); cardsToReturn.add(card);
} });
}
return player.moveCards(cardsToReturn, Zone.GRAVEYARD, source, game); return player.moveCards(cardsToReturn, Zone.GRAVEYARD, source, game);
} }
} }