diff --git a/forge-game/src/main/java/forge/Dependencies.java b/forge-game/src/main/java/forge/Dependencies.java index 0604d225011..6d5b0cd80b3 100644 --- a/forge-game/src/main/java/forge/Dependencies.java +++ b/forge-game/src/main/java/forge/Dependencies.java @@ -6,6 +6,5 @@ public class Dependencies { public interface PreferencesMethods { @Deprecated public abstract boolean getCloneModeSource(); @Deprecated public abstract boolean isManaBurnEnabled(); - @Deprecated public abstract boolean areBlocksFree(); } } \ No newline at end of file diff --git a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java index a6f86830964..bb56a4b7830 100644 --- a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java +++ b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java @@ -696,8 +696,8 @@ public class PhaseHandler implements java.io.Serializable { private static boolean payRequiredBlockCosts(Game game, Card blocker, Card attacker) { Cost blockCost = new Cost(ManaCost.ZERO, true); - boolean hasBlockCost = false; // Sort abilities to apply them in proper order + boolean noCost = true; List checkZones = ZoneType.listValueOf("Battlefield,Command"); for (Card card : game.getCardsIn(checkZones)) { final ArrayList staticAbilities = card.getStaticAbilities(); @@ -705,17 +705,12 @@ public class PhaseHandler implements java.io.Serializable { Cost c1 = stAb.getBlockCost(blocker, attacker); if (c1 != null) { blockCost.add(c1); - hasBlockCost = true; + noCost = false; } } } - boolean hasPaid = blockCost.getTotalMana().isZero() && blockCost.isOnlyManaCost() && (!hasBlockCost || Dependencies.preferences.areBlocksFree()); // true if needless to pay - - if (!hasPaid) { - hasPaid = blocker.getController().getController().payManaOptional(blocker, blockCost, null, "Pay cost to declare " + blocker + " a blocker. ", ManaPaymentPurpose.DeclareBlocker); - } - return hasPaid; + return !noCost || blocker.getController().getController().payManaOptional(blocker, blockCost, null, "Pay cost to declare " + blocker + " a blocker. ", ManaPaymentPurpose.DeclareBlocker); } /** diff --git a/forge-gui/src/main/java/forge/PreferencesProvider.java b/forge-gui/src/main/java/forge/PreferencesProvider.java index 7df982a5821..841611327f4 100644 --- a/forge-gui/src/main/java/forge/PreferencesProvider.java +++ b/forge-gui/src/main/java/forge/PreferencesProvider.java @@ -13,9 +13,4 @@ public class PreferencesProvider implements Dependencies.PreferencesMethods { // TODO Auto-generated method stub return Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_MANABURN); } - - @Override - public boolean areBlocksFree() { - return Singletons.getModel().getPreferences().getPrefBoolean(FPref.MATCHPREF_PROMPT_FREE_BLOCKS); - } } \ No newline at end of file diff --git a/forge-gui/src/main/java/forge/gui/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/gui/player/PlayerControllerHuman.java index 91f1800c815..bee050222ff 100644 --- a/forge-gui/src/main/java/forge/gui/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/gui/player/PlayerControllerHuman.java @@ -723,6 +723,10 @@ public class PlayerControllerHuman extends PlayerController { */ @Override public boolean payManaOptional(Card c, Cost cost, SpellAbility sa, String prompt, ManaPaymentPurpose purpose) { + if ( sa == null && cost.isOnlyManaCost() && cost.getTotalMana().isZero() + && !Singletons.getModel().getPreferences().getPrefBoolean(FPref.MATCHPREF_PROMPT_FREE_BLOCKS)) + return true; + return HumanPlay.payCostDuringAbilityResolve(player, c, cost, sa, prompt); }