fixed Kethis, the Hidden Hand giving abilities to cards not in the graveyard when its ability resolved (fixes #5950)

This commit is contained in:
Evan Kranzler 2019-08-30 20:58:40 -04:00
parent 70787df5ea
commit f8e5a65d85

View file

@ -1,6 +1,7 @@
package mage.cards.k;
import mage.MageInt;
import mage.MageObjectReference;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
@ -75,24 +76,43 @@ class KethisTheHiddenHandEffect extends ContinuousEffectImpl {
super(effect);
}
@Override
public void init(Ability source, Game game) {
super.init(source, game);
if (!this.affectedObjectsSet) {
return;
}
Player player = game.getPlayer(source.getControllerId());
if (player == null) {
return;
}
player.getGraveyard()
.stream()
.map(game::getCard)
.filter(Card::isLegendary)
.forEach(card -> affectedObjectList.add(new MageObjectReference(card, game)));
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller == null) {
return false;
}
for (UUID cardId : controller.getGraveyard()) {
Card card = game.getCard(cardId);
if (card == null || !card.isLegendary()) {
continue;
}
controller.getGraveyard()
.getCards(game)
.stream()
.filter(card -> affectedObjectList
.stream()
.anyMatch(mor -> mor.refersTo(card, game))
).forEach(card -> {
Ability ability = new SimpleStaticAbility(
Zone.GRAVEYARD, new KethisTheHiddenHandGraveyardEffect()
);
ability.setSourceId(cardId);
ability.setSourceId(card.getId());
ability.setControllerId(card.getOwnerId());
game.getState().addOtherAbility(card, ability);
}
});
return true;
}