From f8e5a65d85f4c551568bb81dc3d1ff26e03fb143 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Fri, 30 Aug 2019 20:58:40 -0400 Subject: [PATCH] fixed Kethis, the Hidden Hand giving abilities to cards not in the graveyard when its ability resolved (fixes #5950) --- .../src/mage/cards/k/KethisTheHiddenHand.java | 34 +++++++++++++++---- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/Mage.Sets/src/mage/cards/k/KethisTheHiddenHand.java b/Mage.Sets/src/mage/cards/k/KethisTheHiddenHand.java index 8db1f2d43a5..bb1d5204f3e 100644 --- a/Mage.Sets/src/mage/cards/k/KethisTheHiddenHand.java +++ b/Mage.Sets/src/mage/cards/k/KethisTheHiddenHand.java @@ -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; }