mirror of
https://github.com/correl/mage.git
synced 2024-12-25 03:00:15 +00:00
- Fixed #5641
This commit is contained in:
parent
468ad04255
commit
f74e4118e0
1 changed files with 39 additions and 26 deletions
|
@ -1,10 +1,8 @@
|
|||
|
||||
package mage.cards.p;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import mage.MageObject;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.SacrificeSourceCost;
|
||||
|
@ -17,6 +15,7 @@ import mage.constants.Outcome;
|
|||
import mage.constants.Zone;
|
||||
import mage.game.ExileZone;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
|
@ -27,12 +26,19 @@ import mage.util.CardUtil;
|
|||
public final class PyxisOfPandemonium extends CardImpl {
|
||||
|
||||
public PyxisOfPandemonium(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{1}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}");
|
||||
|
||||
// {T}: Each player exiles the top card of their library face down.
|
||||
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new PyxisOfPandemoniumExileEffect(), new TapSourceCost()));
|
||||
this.addAbility(new SimpleActivatedAbility(
|
||||
Zone.BATTLEFIELD,
|
||||
new PyxisOfPandemoniumExileEffect(),
|
||||
new TapSourceCost()));
|
||||
|
||||
// {7}, {T}, Sacrifice Pyxis of Pandemonium: Each player turns face up all cards he or she owns exiled with Pyxis of Pandemonium, then puts all permanent cards among them onto the battlefield.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PyxisOfPandemoniumPutOntoBattlefieldEffect(), new GenericManaCost(7));
|
||||
Ability ability = new SimpleActivatedAbility(
|
||||
Zone.BATTLEFIELD,
|
||||
new PyxisOfPandemoniumPutOntoBattlefieldEffect(),
|
||||
new GenericManaCost(7));
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addCost(new SacrificeSourceCost());
|
||||
this.addAbility(ability);
|
||||
|
@ -68,10 +74,11 @@ class PyxisOfPandemoniumExileEffect extends OneShotEffect {
|
|||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
MageObject sourceObject = source.getSourceObject(game);
|
||||
if (sourceObject != null && controller != null) {
|
||||
Permanent pyxis = game.getPermanentOrLKIBattlefield(source.getSourceId());
|
||||
if (pyxis != null
|
||||
&& controller != null) {
|
||||
Map<String, UUID> exileIds;
|
||||
String valueKey = CardUtil.getObjectZoneString("exileIds", sourceObject, game);
|
||||
String valueKey = CardUtil.getObjectZoneString("exileIds", pyxis, game);
|
||||
Object object = game.getState().getValue(valueKey);
|
||||
if (object instanceof Map) {
|
||||
exileIds = (Map<String, UUID>) object;
|
||||
|
@ -79,20 +86,22 @@ class PyxisOfPandemoniumExileEffect extends OneShotEffect {
|
|||
exileIds = new HashMap<>();
|
||||
game.getState().setValue(valueKey, exileIds);
|
||||
}
|
||||
|
||||
for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) {
|
||||
|
||||
game.getState().getPlayersInRange(controller.getId(), game).forEach((playerId) -> {
|
||||
Player player = game.getPlayer(playerId);
|
||||
if (player != null) {
|
||||
if (player.getLibrary().hasCards()) {
|
||||
Card card = player.getLibrary().getFromTop(game);
|
||||
String exileKey = playerId.toString() + CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()).toString();
|
||||
String exileKey = playerId.toString()
|
||||
+ CardUtil.getExileZoneId(game,
|
||||
source.getSourceId(),
|
||||
pyxis.getZoneChangeCounter(game));
|
||||
UUID exileId = exileIds.computeIfAbsent(exileKey, k -> UUID.randomUUID());
|
||||
player.moveCardsToExile(card, source, game, false, exileId, sourceObject.getIdName() + " (" + player.getName() + ')');
|
||||
player.moveCardsToExile(card, source, game, false,
|
||||
exileId, pyxis.getIdName() + " (" + player.getName() + ')');
|
||||
card.setFaceDown(true, game);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -103,7 +112,8 @@ class PyxisOfPandemoniumPutOntoBattlefieldEffect extends OneShotEffect {
|
|||
|
||||
public PyxisOfPandemoniumPutOntoBattlefieldEffect() {
|
||||
super(Outcome.PutCardInPlay);
|
||||
this.staticText = "Each player turns face up all cards he or she owns exiled with {this}, then puts all permanent cards among them onto the battlefield";
|
||||
this.staticText = "Each player turns face up all cards he or she owns exiled with {this}, "
|
||||
+ "then puts all permanent cards among them onto the battlefield";
|
||||
}
|
||||
|
||||
public PyxisOfPandemoniumPutOntoBattlefieldEffect(final PyxisOfPandemoniumPutOntoBattlefieldEffect effect) {
|
||||
|
@ -118,10 +128,11 @@ class PyxisOfPandemoniumPutOntoBattlefieldEffect extends OneShotEffect {
|
|||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
MageObject sourceObject = source.getSourceObject(game);
|
||||
if (controller != null && sourceObject != null) {
|
||||
Permanent pyxis = game.getPermanentOrLKIBattlefield(source.getSourceId());
|
||||
if (controller != null
|
||||
&& pyxis != null) {
|
||||
Map<String, UUID> exileIds;
|
||||
String valueKey = CardUtil.getObjectZoneString("exileIds", sourceObject, game);
|
||||
String valueKey = CardUtil.getObjectZoneString("exileIds", pyxis, game);
|
||||
Object object = game.getState().getValue(valueKey);
|
||||
if (object instanceof Map) {
|
||||
exileIds = (Map<String, UUID>) object;
|
||||
|
@ -129,24 +140,26 @@ class PyxisOfPandemoniumPutOntoBattlefieldEffect extends OneShotEffect {
|
|||
return true;
|
||||
}
|
||||
Cards cardsToBringIntoPlay = new CardsImpl();
|
||||
for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) {
|
||||
game.getState().getPlayersInRange(controller.getId(), game).forEach((playerId) -> {
|
||||
Player player = game.getPlayer(playerId);
|
||||
if (player != null) {
|
||||
String exileKey = playerId.toString() + CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()).toString();
|
||||
String exileKey = playerId.toString() + CardUtil.getExileZoneId(game,
|
||||
source.getSourceId(),
|
||||
pyxis.getZoneChangeCounter(game));
|
||||
UUID exileId = exileIds.get(exileKey);
|
||||
if (exileId != null) {
|
||||
ExileZone exileZone = game.getState().getExile().getExileZone(exileId);
|
||||
if (exileZone != null) {
|
||||
for (Card card : exileZone.getCards(game)) {
|
||||
exileZone.getCards(game).stream().map((card) -> {
|
||||
card.setFaceDown(false, game);
|
||||
if (card.isPermanent()) {
|
||||
cardsToBringIntoPlay.add(card);
|
||||
}
|
||||
}
|
||||
return card;
|
||||
}).filter((card) -> (card.isPermanent())).forEachOrdered((card) -> {
|
||||
cardsToBringIntoPlay.add(card);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
controller.moveCards(cardsToBringIntoPlay.getCards(game), Zone.BATTLEFIELD, source, game, false, false, true, null);
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue