diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index fa091341f1f..fa5b04f4302 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -1882,6 +1882,12 @@ public class Player extends GameEntity implements Comparable { return CardLists.count(getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.ARTIFACTS) >= 3; } + public final boolean hasDesert() { + return CardLists.count( + getCardsIn(Arrays.asList(ZoneType.Battlefield, ZoneType.Graveyard)), + CardPredicates.isType("Desert")) > 0; + } + public final boolean hasThreshold() { return getZone(ZoneType.Graveyard).size() >= 7; } diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbilityCondition.java b/forge-game/src/main/java/forge/game/spellability/SpellAbilityCondition.java index f7628af4587..ac7536c7fe4 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbilityCondition.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbilityCondition.java @@ -94,6 +94,9 @@ public class SpellAbilityCondition extends SpellAbilityVariables { if (value.equals("Revolt")) { this.setRevolt(true); } + if (value.equals("Desert")) { + this.setDesert(true); + } if (value.equals("Kicked")) { this.kicked = true; } @@ -232,6 +235,7 @@ public class SpellAbilityCondition extends SpellAbilityVariables { if (this.isMetalcraft() && !activator.hasMetalcraft()) return false; if (this.isDelirium() && !activator.hasDelirium()) return false; if (this.isRevolt() && !activator.hasRevolt()) return false; + if (this.isDesert() && !activator.hasDesert()) return false; if (this.kicked && !sa.isKicked()) return false; if (this.kicked1 && !sa.isOptionalCostPaid(OptionalCost.Kicker1)) return false; diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbilityRestriction.java b/forge-game/src/main/java/forge/game/spellability/SpellAbilityRestriction.java index 30f037a5e2f..16788cdd5f5 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbilityRestriction.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbilityRestriction.java @@ -17,10 +17,11 @@ */ package forge.game.spellability; -import java.util.ArrayList; import java.util.List; import java.util.Map; +import com.google.common.collect.Lists; + import forge.game.Game; import forge.game.ability.AbilityUtils; import forge.game.card.Card; @@ -86,8 +87,11 @@ public class SpellAbilityRestriction extends SpellAbilityVariables { if (value.equals("Hellbent")) { this.setHellbent(true); } + if (value.equals("Desert")) { + this.setDesert(true); + } if (value.startsWith("Prowl")) { - final List prowlTypes = new ArrayList(); + final List prowlTypes = Lists.newArrayList(); prowlTypes.add("Rogue"); if (value.split("Prowl").length > 1) { prowlTypes.add(value.split("Prowl")[1]); @@ -371,6 +375,11 @@ public class SpellAbilityRestriction extends SpellAbilityVariables { return false; } } + if (this.isDesert()) { + if (!activator.hasDesert()) { + return false; + } + } if (this.getProwlTypes() != null && !this.getProwlTypes().isEmpty()) { // only true if the activating player has damaged the opponent with // one of the specified types diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbilityVariables.java b/forge-game/src/main/java/forge/game/spellability/SpellAbilityVariables.java index f612d039d0f..85ea0fcb014 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbilityVariables.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbilityVariables.java @@ -154,6 +154,7 @@ public class SpellAbilityVariables implements Cloneable { private boolean delirium = false; private boolean hellbent = false; private boolean revolt = false; + private boolean desert = false; /** The surge. */ private boolean surge = false; @@ -471,6 +472,8 @@ public class SpellAbilityVariables implements Cloneable { public void setDelirium(boolean delirium) { this.delirium = delirium; } public void setRevolt(final boolean bRevolt) { revolt = bRevolt; } + + public void setDesert(final boolean bDesert) { desert = bDesert; } /** *

* Setter for the field surge. @@ -689,6 +692,8 @@ public class SpellAbilityVariables implements Cloneable { public final boolean isRevolt() { return this.revolt; } + public final boolean isDesert() { return this.desert; } + /** * Checks if is surge. * diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbility.java b/forge-game/src/main/java/forge/game/staticability/StaticAbility.java index 7f7bcb18920..47c0dee32c0 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbility.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbility.java @@ -491,6 +491,7 @@ public class StaticAbility extends CardTraitBase implements Comparable