diff --git a/forge-game/src/main/java/forge/game/combat/CombatUtil.java b/forge-game/src/main/java/forge/game/combat/CombatUtil.java index 3e3dad86bd3..0ef7795ee36 100644 --- a/forge-game/src/main/java/forge/game/combat/CombatUtil.java +++ b/forge-game/src/main/java/forge/game/combat/CombatUtil.java @@ -17,7 +17,6 @@ */ package forge.game.combat; -import com.google.common.base.Predicate; import com.google.common.collect.Lists; import forge.card.CardType; import forge.card.MagicColor; @@ -854,51 +853,6 @@ public class CombatUtil { return false; } - Player defendingPlayer = null; - if (defender instanceof Card) { - defendingPlayer = ((Card) defender).getController(); - } else { - defendingPlayer = (Player) defender; - } - - // CARDNAME can't attack if defending player controls an untapped - // creature with power ... - final int[] powerLimit = { 0 }; - String cantAttackKw = null; - - for( String kw : c.getKeyword()) { - if (kw.startsWith("CARDNAME can't attack if defending player controls an untapped creature with power")) { - cantAttackKw = kw; - } - } - - // The keyword - // "CARDNAME can't attack if defending player controls an untapped creature with power" - // ... is present - if (cantAttackKw != null) { - final String[] asSeparateWords = cantAttackKw.trim().split(" "); - - if (asSeparateWords.length >= 15) { - if (StringUtils.isNumeric(asSeparateWords[12])) { - powerLimit[0] = Integer.parseInt((asSeparateWords[12]).trim()); - - List list = defendingPlayer.getCreaturesInPlay(); - list = CardLists.filter(list, new Predicate() { - @Override - public boolean apply(final Card ct) { - return (ct.isUntapped() - && ((ct.getNetAttack() >= powerLimit[0] && asSeparateWords[14].contains("greater")) - || (ct.getNetAttack() <= powerLimit[0] && asSeparateWords[14].contains("less")))); - } - }); - if (!list.isEmpty()) { - return false; - } - } - } - } // hasKeyword = CARDNAME can't attack if defending player controls an - // untapped creature with power ... - for (String keyword : c.getKeyword()) { if (keyword.equals("CARDNAME can't attack.") || keyword.equals("CARDNAME can't attack or block.")) { return false; diff --git a/forge-game/src/main/java/forge/game/mana/ManaCostAdjustment.java b/forge-game/src/main/java/forge/game/mana/ManaCostAdjustment.java index b083bc581fd..3642df43f38 100644 --- a/forge-game/src/main/java/forge/game/mana/ManaCostAdjustment.java +++ b/forge-game/src/main/java/forge/game/mana/ManaCostAdjustment.java @@ -13,7 +13,6 @@ import forge.card.mana.ManaCostShard; import forge.game.Game; import forge.game.ability.AbilityUtils; import forge.game.card.Card; -import forge.game.card.CardFactoryUtil; import forge.game.card.CardLists; import forge.game.card.CardPredicates; import forge.game.player.Player; diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantAttackBlock.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantAttackBlock.java index 2034557862a..0423a4df998 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantAttackBlock.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantAttackBlock.java @@ -58,14 +58,22 @@ public class StaticAbilityCantAttackBlock { return false; } + final Player defender = target instanceof Card ? ((Card) target).getController() : (Player) target; + if (params.containsKey("UnlessDefenderControls")) { String type = params.get("UnlessDefenderControls"); - Player defender = target instanceof Card ? ((Card) target).getController() : (Player) target; List list = defender.getCardsIn(ZoneType.Battlefield); if (Iterables.any(list, CardPredicates.restriction(type.split(","), hostCard.getController(), hostCard))) { return false; } } + if (params.containsKey("IfDefenderControls")) { + String type = params.get("IfDefenderControls"); + List list = defender.getCardsIn(ZoneType.Battlefield); + if (!Iterables.any(list, CardPredicates.restriction(type.split(","), hostCard.getController(), hostCard))) { + return false; + } + } return true; } diff --git a/forge-gui/res/cardsfolder/b/branded_brawlers.txt b/forge-gui/res/cardsfolder/b/branded_brawlers.txt index 7bdd050284a..acf24f652fb 100644 --- a/forge-gui/res/cardsfolder/b/branded_brawlers.txt +++ b/forge-gui/res/cardsfolder/b/branded_brawlers.txt @@ -2,9 +2,8 @@ Name:Branded Brawlers ManaCost:R Types:Creature Human Soldier PT:2/2 -S:Mode$ Continuous | Affected$ Card.Self | AddHiddenKeyword$ CARDNAME can't attack. | CheckSVar$ X | SVarCompare$ GE1 | Description$ CARDNAME can't attack if defending player controls an untapped land. +S:Mode$ CantAttack | ValidCard$ Card.Self | IfDefenderControls$ Land.untapped | Description$ CARDNAME can't attack if defending player controls an untapped land. S:Mode$ Continuous | Affected$ Card.Self | AddHiddenKeyword$ CARDNAME can't block. | CheckSVar$ Y | SVarCompare$ GE1 | Description$ CARDNAME can't block if you control an untapped land. -SVar:X:Count$Valid Land.YouDontCtrl+untapped SVar:Y:Count$Valid Land.YouCtrl+untapped SVar:Picture:http://www.wizards.com/global/images/magic/general/branded_brawlers.jpg Oracle:Branded Brawlers can't attack if defending player controls an untapped land.\nBranded Brawlers can't block if you control an untapped land. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/g/goblin_mutant.txt b/forge-gui/res/cardsfolder/g/goblin_mutant.txt index f78e8a180f7..fdc3474deab 100644 --- a/forge-gui/res/cardsfolder/g/goblin_mutant.txt +++ b/forge-gui/res/cardsfolder/g/goblin_mutant.txt @@ -3,7 +3,7 @@ ManaCost:2 R R Types:Creature Goblin Mutant PT:5/3 K:Trample -K:CARDNAME can't attack if defending player controls an untapped creature with power 3 or greater. +S:Mode$ CantAttack | ValidCard$ Card.Self | IfDefenderControls$ Creature.untapped+powerGE3 | Description$ CARDNAME can't attack if defending player controls an untapped creature with power 3 or greater. K:CantBlock Creature.powerGE3:creatures with power 3 or greater SVar:Picture:http://www.wizards.com/global/images/magic/general/goblin_mutant.jpg Oracle:Trample\nGoblin Mutant can't attack if defending player controls an untapped creature with power 3 or greater.\nGoblin Mutant can't block creatures with power 3 or greater. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/m/mogg_jailer.txt b/forge-gui/res/cardsfolder/m/mogg_jailer.txt index 8014c463a28..0ca9b35aaf0 100644 --- a/forge-gui/res/cardsfolder/m/mogg_jailer.txt +++ b/forge-gui/res/cardsfolder/m/mogg_jailer.txt @@ -2,6 +2,6 @@ Name:Mogg Jailer ManaCost:1 R Types:Creature Goblin PT:2/2 -K:CARDNAME can't attack if defending player controls an untapped creature with power 2 or less. +S:Mode$ CantAttack | ValidCard$ Card.Self | IfDefenderControls$ Creature.untapped+powerLE2 | Description$ CARDNAME can't attack if defending player controls an untapped creature with power 2 or less. SVar:Picture:http://www.wizards.com/global/images/magic/general/mogg_jailer.jpg Oracle:Mogg Jailer can't attack if defending player controls an untapped creature with power 2 or less. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/o/orgg.txt b/forge-gui/res/cardsfolder/o/orgg.txt index 336dc6975d7..aaa591baea6 100644 --- a/forge-gui/res/cardsfolder/o/orgg.txt +++ b/forge-gui/res/cardsfolder/o/orgg.txt @@ -3,7 +3,7 @@ ManaCost:3 R R Types:Creature Orgg PT:6/6 K:Trample -K:CARDNAME can't attack if defending player controls an untapped creature with power 3 or greater. +S:Mode$ CantAttack | ValidCard$ Card.Self | IfDefenderControls$ Creature.untapped+powerGE3 | Description$ CARDNAME can't attack if defending player controls an untapped creature with power 3 or greater. K:CantBlock Creature.powerGE3:creatures with power 3 or greater SVar:Picture:http://www.wizards.com/global/images/magic/general/orgg.jpg Oracle:Trample\nOrgg can't attack if defending player controls an untapped creature with power 3 or greater.\nOrgg can't block creatures with power 3 or greater. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/v/veteran_brawlers.txt b/forge-gui/res/cardsfolder/v/veteran_brawlers.txt index 3c50960d656..c1162b8a423 100644 --- a/forge-gui/res/cardsfolder/v/veteran_brawlers.txt +++ b/forge-gui/res/cardsfolder/v/veteran_brawlers.txt @@ -2,9 +2,8 @@ Name:Veteran Brawlers ManaCost:1 R Types:Creature Human Soldier PT:4/4 -S:Mode$ Continuous | Affected$ Card.Self | AddHiddenKeyword$ CARDNAME can't attack. | CheckSVar$ X | SVarCompare$ GE1 | Description$ CARDNAME can't attack if defending player controls an untapped land. +S:Mode$ CantAttack | ValidCard$ Card.Self | IfDefenderControls$ Land.untapped | Description$ CARDNAME can't attack if defending player controls an untapped land. S:Mode$ Continuous | Affected$ Card.Self | AddHiddenKeyword$ CARDNAME can't block. | CheckSVar$ Y | SVarCompare$ GE1 | Description$ CARDNAME can't block if you control an untapped land. -SVar:X:Count$Valid Land.YouDontCtrl+untapped SVar:Y:Count$Valid Land.YouCtrl+untapped SVar:Picture:http://www.wizards.com/global/images/magic/general/veteran_brawlers.jpg Oracle:Veteran Brawlers can't attack if defending player controls an untapped land.\nVeteran Brawlers can't block if you control an untapped land. \ No newline at end of file