From d0185663240742ea90646de527fd40480b717240 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Thu, 6 Feb 2025 22:23:27 +0400 Subject: [PATCH] Dredge - fixed game error in some use cases --- .../mage/abilities/keyword/DredgeAbility.java | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/Mage/src/main/java/mage/abilities/keyword/DredgeAbility.java b/Mage/src/main/java/mage/abilities/keyword/DredgeAbility.java index 5779883b9fe..7e9d239c38e 100644 --- a/Mage/src/main/java/mage/abilities/keyword/DredgeAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/DredgeAbility.java @@ -9,7 +9,6 @@ import mage.constants.Outcome; import mage.constants.Zone; import mage.game.Game; import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.players.Player; import mage.util.CardUtil; @@ -63,13 +62,16 @@ class DredgeEffect extends ReplacementEffectImpl { if (sourceCard == null) { return false; } - Player owner = game.getPlayer(game.getCard(source.getSourceId()).getOwnerId()); - if (owner != null - && owner.getLibrary().size() >= amount - && owner.chooseUse(outcome, new StringBuilder("Dredge ").append(sourceCard.getLogName()). - append("? (").append(amount).append(" cards are milled)").toString(), source, game)) { + Player owner = game.getPlayer(sourceCard.getOwnerId()); + if (owner == null) { + return false; + } + + String message = "Dredge " + sourceCard.getLogName() + "? (" + amount + " cards are milled)"; + + if (owner.getLibrary().size() >= amount && owner.chooseUse(outcome, message, source, game)) { if (!game.isSimulation()) { - game.informPlayers(new StringBuilder(owner.getLogName()).append(" dredges ").append(sourceCard.getLogName()).toString()); + game.informPlayers(owner.getLogName() + " dredges " + sourceCard.getLogName() + CardUtil.getSourceLogName(game, source)); } owner.millCards(amount, source, game); owner.moveCards(sourceCard, Zone.HAND, source, game); @@ -85,9 +87,14 @@ class DredgeEffect extends ReplacementEffectImpl { @Override public boolean applies(GameEvent event, Ability source, Game game) { - Player owner = game.getPlayer(game.getCard(source.getSourceId()).getOwnerId()); - return (owner != null - && event.getPlayerId().equals(owner.getId()) - && owner.getLibrary().size() >= amount); + Card card = game.getCard(source.getSourceId()); + if (card == null) { + return false; + } + Player owner = game.getPlayer(card.getOwnerId()); + if (owner == null) { + return false; + } + return event.getPlayerId().equals(owner.getId()) && owner.getLibrary().size() >= amount; } }