From 49c28458ec0aba0c100c6a206616a1cdf2bdc0fa Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sun, 27 Apr 2025 23:34:58 +0400 Subject: [PATCH] Can block any number of creatures - fixed that it can be broken with some of "can block an additional creature" effects --- Mage.Sets/src/mage/cards/c/Camouflage.java | 2 +- Mage.Sets/src/mage/cards/c/ChirrutImwe.java | 31 +++++++------------ .../java/org/mage/test/player/TestPlayer.java | 3 +- .../CanBlockAdditionalCreatureAllEffect.java | 4 ++- .../CanBlockAdditionalCreatureEffect.java | 4 ++- ...anBlockAdditionalCreatureTargetEffect.java | 4 ++- 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/Mage.Sets/src/mage/cards/c/Camouflage.java b/Mage.Sets/src/mage/cards/c/Camouflage.java index 5444e3fcd1a..d192d4edc66 100644 --- a/Mage.Sets/src/mage/cards/c/Camouflage.java +++ b/Mage.Sets/src/mage/cards/c/Camouflage.java @@ -114,7 +114,7 @@ class CamouflageEffect extends ContinuousRuleModifyingEffectImpl { // (This temporarily manipulates Blocking values to "test" how many blockers the creature has still left to assign) List spentBlockers = new ArrayList<>(); for (Permanent possibleBlocker : list) { - if (possibleBlocker.getMaxBlocks() != 0 && possibleBlocker.getBlocking() >= possibleBlocker.getMaxBlocks()) { + if (possibleBlocker.getMaxBlocks() > 0 && possibleBlocker.getBlocking() >= possibleBlocker.getMaxBlocks()) { spentBlockers.add(possibleBlocker); } } diff --git a/Mage.Sets/src/mage/cards/c/ChirrutImwe.java b/Mage.Sets/src/mage/cards/c/ChirrutImwe.java index 603907e8276..2e8be6534fe 100644 --- a/Mage.Sets/src/mage/cards/c/ChirrutImwe.java +++ b/Mage.Sets/src/mage/cards/c/ChirrutImwe.java @@ -1,6 +1,5 @@ package mage.cards.c; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -9,28 +8,22 @@ import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.effects.Effect; import mage.abilities.effects.common.PreventCombatDamageToSourceEffect; -import mage.constants.SubType; -import mage.constants.SuperType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Layer; -import mage.constants.Outcome; -import mage.constants.SubLayer; -import mage.constants.Zone; +import mage.constants.*; import mage.game.Game; import mage.game.permanent.Permanent; +import java.util.UUID; + /** - * * @author NinthWorld */ public final class ChirrutImwe extends CardImpl { public ChirrutImwe(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}{W}{U}"); - + this.supertype.add(SuperType.LEGENDARY); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.MONK); @@ -39,7 +32,7 @@ public final class ChirrutImwe extends CardImpl { // Chirrut Imwe can block up to two additional creatures. this.addAbility(new SimpleStaticAbility(new ChirrutImweEffect())); - + // {1}{W}: Prevent all combat damage that would be dealt to Chirrut Imwe until end of turn. Effect effect = new PreventCombatDamageToSourceEffect(Duration.EndOfTurn); effect.setText("Prevent all combat damage that would be dealt to {this} until end of turn"); @@ -57,29 +50,29 @@ public final class ChirrutImwe extends CardImpl { } class ChirrutImweEffect extends ContinuousEffectImpl { - + public ChirrutImweEffect() { super(Duration.WhileOnBattlefield, Outcome.Benefit); staticText = "{this} can block up to two additional creatures"; } - + private ChirrutImweEffect(final ChirrutImweEffect effect) { super(effect); } - + @Override public ChirrutImweEffect copy() { return new ChirrutImweEffect(this); } - + @Override public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { Permanent perm = game.getPermanent(source.getSourceId()); - if(perm != null) { - switch(layer) { + if (perm != null) { + switch (layer) { case RulesEffects: // maxBlocks = 0 equals to "can block any number of creatures" - if(perm.getMaxBlocks() > 0) { + if (perm.getMaxBlocks() > 0) { perm.setMaxBlocks(perm.getMaxBlocks() + 2); } break; diff --git a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java index 2238c6dffeb..453ddb9c8b3 100644 --- a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java +++ b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java @@ -2049,7 +2049,8 @@ public class TestPlayer implements Player { int numBlocked = blocked.size(); // Can't block any more creatures - if (++numBlocked > blocker.getMaxBlocks()) { + // maxBlocks = 0 equals to "can block any number of creatures" + if (blocker.getMaxBlocks() > 0 && ++numBlocked > blocker.getMaxBlocks()) { return false; } diff --git a/Mage/src/main/java/mage/abilities/effects/common/combat/CanBlockAdditionalCreatureAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/combat/CanBlockAdditionalCreatureAllEffect.java index 1abd8033558..3e815aa31bb 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/combat/CanBlockAdditionalCreatureAllEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/combat/CanBlockAdditionalCreatureAllEffect.java @@ -45,7 +45,9 @@ public class CanBlockAdditionalCreatureAllEffect extends ContinuousEffectImpl { if (permanent != null) { // maxBlocks = 0 equals to "can block any number of creatures" if (amount > 0) { - permanent.setMaxBlocks(permanent.getMaxBlocks() + amount); + if (permanent.getMaxBlocks() > 0) { + permanent.setMaxBlocks(permanent.getMaxBlocks() + amount); + } } else { permanent.setMaxBlocks(0); } diff --git a/Mage/src/main/java/mage/abilities/effects/common/combat/CanBlockAdditionalCreatureEffect.java b/Mage/src/main/java/mage/abilities/effects/common/combat/CanBlockAdditionalCreatureEffect.java index 2eb7ea69efe..a2630e7b7e4 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/combat/CanBlockAdditionalCreatureEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/combat/CanBlockAdditionalCreatureEffect.java @@ -53,7 +53,9 @@ public class CanBlockAdditionalCreatureEffect extends ContinuousEffectImpl { if (permanent != null) { // maxBlocks = 0 equals to "can block any number of creatures" if (amount > 0) { - permanent.setMaxBlocks(permanent.getMaxBlocks() + amount); + if (permanent.getMaxBlocks() > 0) { + permanent.setMaxBlocks(permanent.getMaxBlocks() + amount); + } } else { permanent.setMaxBlocks(0); } diff --git a/Mage/src/main/java/mage/abilities/effects/common/combat/CanBlockAdditionalCreatureTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/combat/CanBlockAdditionalCreatureTargetEffect.java index b67f696c637..77011abb9a9 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/combat/CanBlockAdditionalCreatureTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/combat/CanBlockAdditionalCreatureTargetEffect.java @@ -53,7 +53,9 @@ public class CanBlockAdditionalCreatureTargetEffect extends ContinuousEffectImpl // maxBlocks = 0 equals to "can block any number of creatures" if (amount > 0) { - target.setMaxBlocks(target.getMaxBlocks() + amount); + if (target.getMaxBlocks() > 0) { + target.setMaxBlocks(target.getMaxBlocks() + amount); + } } else { target.setMaxBlocks(0); }