From 2c04b08ae8b98eb9213cdfea73d3994e825739db Mon Sep 17 00:00:00 2001 From: Chris H Date: Thu, 28 Mar 2024 17:40:31 -0400 Subject: [PATCH] Java doesn't shortcircuit &= --- .../java/forge/player/HumanPlaySpellAbility.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/forge-gui/src/main/java/forge/player/HumanPlaySpellAbility.java b/forge-gui/src/main/java/forge/player/HumanPlaySpellAbility.java index 0719a89bf72..210ba15869b 100644 --- a/forge-gui/src/main/java/forge/player/HumanPlaySpellAbility.java +++ b/forge-gui/src/main/java/forge/player/HumanPlaySpellAbility.java @@ -163,14 +163,11 @@ public class HumanPlaySpellAbility { // is only executed or evaluated if the first argument does not suffice to determine the value of the expression // because of Selective Snare do announceType first - // We need to split up this super conditional to know WHY somethings prequisites failed. - // Failing because there's no legal targets is different than failing because the player canceled paying costs - - boolean preCostRequisites = announceType() && announceValuesLikeX(); - preCostRequisites &= ability.checkRestrictions(human); - preCostRequisites &= (!mayChooseTargets || ability.setupTargets()); - preCostRequisites &= ability.canCastTiming(human); - preCostRequisites &= ability.isLegalAfterStack(); + boolean preCostRequisites = announceType() && announceValuesLikeX() && + ability.checkRestrictions(human) && + (!mayChooseTargets || ability.setupTargets()) && + ability.canCastTiming(human) && + ability.isLegalAfterStack(); final boolean prerequisitesMet = preCostRequisites && (isFree || payment.payCost(new HumanCostDecision(controller, human, ability, ability.isTrigger())));