cleanup and add tests on '{this} enters the battlefield tapped unless [Condition]'

Almost a refactor. The only change is that all those cards were missing the notTarget argument in TapSourceEffect.

closes  #12411
This commit is contained in:
Susucre 2024-06-08 19:35:35 +02:00
parent 5b74858573
commit 40a1fc6c23
77 changed files with 1119 additions and 897 deletions

View file

@ -1,23 +1,18 @@
package mage.cards.a; package mage.cards.a;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.effects.common.continuous.NextSpellCastHasAbilityEffect; import mage.abilities.effects.common.continuous.NextSpellCastHasAbilityEffect;
import mage.abilities.keyword.ImproviseAbility; import mage.abilities.keyword.ImproviseAbility;
import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.BlueManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterControlledPermanent;
import java.util.UUID; import java.util.UUID;
@ -27,17 +22,14 @@ import java.util.UUID;
*/ */
public final class ArchwayOfInnovation extends CardImpl { public final class ArchwayOfInnovation extends CardImpl {
private static final FilterPermanent filter = new FilterControlledPermanent(SubType.ISLAND); private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.ISLAND);
private static final Condition condition private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.EQUAL_TO, 0);
public ArchwayOfInnovation(UUID ownerId, CardSetInfo setInfo) { public ArchwayOfInnovation(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Archway of Innovation enters the battlefield tapped unless you control an Island. // Archway of Innovation enters the battlefield tapped unless you control an Island.
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new TapSourceEffect(), condition
), "tapped unless you control an Island"));
// {T}: Add {U}. // {T}: Add {U}.
this.addAbility(new BlueManaAbility()); this.addAbility(new BlueManaAbility());

View file

@ -1,17 +1,14 @@
package mage.cards.a; package mage.cards.a;
import mage.Mana; import mage.Mana;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.delayed.ManaSpentDelayedTriggeredAbility; import mage.abilities.common.delayed.ManaSpentDelayedTriggeredAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.ExertSourceCost; import mage.abilities.costs.common.ExertSourceCost;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.AddContinuousEffectToGame; import mage.abilities.effects.common.AddContinuousEffectToGame;
import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
import mage.abilities.effects.mana.BasicManaEffect; import mage.abilities.effects.mana.BasicManaEffect;
import mage.abilities.keyword.HasteAbility; import mage.abilities.keyword.HasteAbility;
@ -20,7 +17,6 @@ import mage.abilities.mana.SimpleManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
@ -39,16 +35,13 @@ import java.util.UUID;
public final class ArenaOfGlory extends CardImpl { public final class ArenaOfGlory extends CardImpl {
private static final FilterPermanent filter = new FilterControlledPermanent(SubType.MOUNTAIN); private static final FilterPermanent filter = new FilterControlledPermanent(SubType.MOUNTAIN);
private static final Condition condition private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.EQUAL_TO, 0);
public ArenaOfGlory(UUID ownerId, CardSetInfo setInfo) { public ArenaOfGlory(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Arena of Glory enters the battlefield tapped unless you control a Mountain. // Arena of Glory enters the battlefield tapped unless you control a Mountain.
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new TapSourceEffect(), condition
), "tapped unless you control a Mountain"));
// {T}: Add {R}. // {T}: Add {R}.
this.addAbility(new RedManaAbility()); this.addAbility(new RedManaAbility());

View file

@ -3,24 +3,18 @@ package mage.cards.a;
import mage.ObjectColor; import mage.ObjectColor;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateAsSorceryActivatedAbility; import mage.abilities.common.ActivateAsSorceryActivatedAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.InfoEffect; import mage.abilities.effects.common.InfoEffect;
import mage.abilities.effects.common.MillCardsControllerEffect; import mage.abilities.effects.common.MillCardsControllerEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.hint.ConditionHint;
import mage.abilities.hint.Hint;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
@ -35,16 +29,14 @@ import java.util.UUID;
*/ */
public final class ArgothSanctumOfNature extends CardImpl { public final class ArgothSanctumOfNature extends CardImpl {
private static final FilterPermanent filter = new FilterControlledCreaturePermanent(); private static final FilterPermanent filter = new FilterControlledCreaturePermanent("a legendary green creature");
static { static {
filter.add(SuperType.LEGENDARY.getPredicate()); filter.add(SuperType.LEGENDARY.getPredicate());
filter.add(new ColorPredicate(ObjectColor.GREEN)); filter.add(new ColorPredicate(ObjectColor.GREEN));
} }
private static final Condition condition private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.EQUAL_TO, 0);
private static final Hint hint = new ConditionHint(condition, "You control a legendary green creature");
public ArgothSanctumOfNature(UUID ownerId, CardSetInfo setInfo) { public ArgothSanctumOfNature(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
@ -53,10 +45,7 @@ public final class ArgothSanctumOfNature extends CardImpl {
this.meldsToClazz = mage.cards.h.HanweirTheWrithingTownship.class; this.meldsToClazz = mage.cards.h.HanweirTheWrithingTownship.class;
// Argoth, Sanctum of Nature enters the battlefield tapped unless you control a legendary green creature. // Argoth, Sanctum of Nature enters the battlefield tapped unless you control a legendary green creature.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new ConditionalOneShotEffect(new TapSourceEffect(), condition, ""),
"tapped unless you control a legendary green creature"
).addHint(hint));
// {T}: Add {G}. // {T}: Add {G}.
this.addAbility(new GreenManaAbility()); this.addAbility(new GreenManaAbility());

View file

@ -2,23 +2,20 @@ package mage.cards.b;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.MorbidCondition; import mage.abilities.condition.common.MorbidCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.dynamicvalue.common.ManacostVariableValue; import mage.abilities.dynamicvalue.common.ManacostVariableValue;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.effects.keyword.AmassEffect; import mage.abilities.effects.keyword.AmassEffect;
import mage.abilities.hint.ConditionHint;
import mage.abilities.hint.Hint;
import mage.abilities.mana.BlackManaAbility; import mage.abilities.mana.BlackManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledCreaturePermanent;
@ -29,15 +26,13 @@ import java.util.UUID;
*/ */
public final class BaradDur extends CardImpl { public final class BaradDur extends CardImpl {
private static final FilterPermanent filter = new FilterControlledCreaturePermanent(); private static final FilterPermanent filter = new FilterControlledCreaturePermanent("a legendary creature");
static { static {
filter.add(SuperType.LEGENDARY.getPredicate()); filter.add(SuperType.LEGENDARY.getPredicate());
} }
private static final Condition condition private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.EQUAL_TO, 0);
private static final Hint hint = new ConditionHint( new InvertCondition(condition), "You control a legendary creature");
public BaradDur(UUID ownerId, CardSetInfo setInfo) { public BaradDur(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
@ -45,10 +40,7 @@ public final class BaradDur extends CardImpl {
this.supertype.add(SuperType.LEGENDARY); this.supertype.add(SuperType.LEGENDARY);
// Barad-dur enters the battlefield tapped unless you control a legendary creature. // Barad-dur enters the battlefield tapped unless you control a legendary creature.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new ConditionalOneShotEffect(new TapSourceEffect(), condition, ""),
"tapped unless you control a legendary creature"
).addHint(hint));
// {T}: Add {B}. // {T}: Add {B}.
this.addAbility(new BlackManaAbility()); this.addAbility(new BlackManaAbility());

View file

@ -1,13 +1,8 @@
package mage.cards.b; package mage.cards.b;
import java.util.UUID; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.Condition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlackManaAbility; import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.RedManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -15,22 +10,34 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.filter.common.FilterLandPermanent; import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID;
/** /**
*
* @author maurer.it_at_gmail.com * @author maurer.it_at_gmail.com
*/ */
public final class BlackcleaveCliffs extends CardImpl { public final class BlackcleaveCliffs extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent(); private static final FilterLandPermanent filter = new FilterLandPermanent("other lands");
static {
filter.add(AnotherPredicate.instance);
}
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_LESS, 2);
public BlackcleaveCliffs(UUID ownerId, CardSetInfo setInfo) { public BlackcleaveCliffs(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, null); super(ownerId, setInfo, new CardType[]{CardType.LAND}, null);
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.FEWER_THAN, 3)); // Blackcleave Cliffs enters the battlefield tapped unless you control two or fewer other lands.
String abilityText = " tapped unless you control two or fewer other lands"; this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
// {T}: Add {B}.
this.addAbility(new BlackManaAbility()); this.addAbility(new BlackManaAbility());
// {T}: Add {R}.
this.addAbility(new RedManaAbility()); this.addAbility(new RedManaAbility());
} }

View file

@ -1,13 +1,8 @@
package mage.cards.b; package mage.cards.b;
import java.util.UUID; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.Condition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlackManaAbility; import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -15,23 +10,33 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.filter.common.FilterLandPermanent; import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class BloomingMarsh extends CardImpl { public final class BloomingMarsh extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent("other lands");
static {
filter.add(AnotherPredicate.instance);
}
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_LESS, 2);
public BloomingMarsh(UUID ownerId, CardSetInfo setInfo) { public BloomingMarsh(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Blooming Marsh enters the battlefield tapped unless you control two or fewer other lands. // Blooming Marsh enters the battlefield tapped unless you control two or fewer other lands.
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(new FilterLandPermanent(), ComparisonType.FEWER_THAN, 3)); this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
String abilityText = " tapped unless you control two or fewer other lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
// {T}: Add {B} or {G}. // {T}: Add {B}.
this.addAbility(new BlackManaAbility()); this.addAbility(new BlackManaAbility());
// {T}: Add {G}.
this.addAbility(new GreenManaAbility()); this.addAbility(new GreenManaAbility());
} }

View file

@ -1,13 +1,8 @@
package mage.cards.b; package mage.cards.b;
import java.util.UUID; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.Condition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.BlueManaAbility;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -15,23 +10,34 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.filter.common.FilterLandPermanent; import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class BotanicalSanctum extends CardImpl { public final class BotanicalSanctum extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent("other lands");
static {
filter.add(AnotherPredicate.instance);
}
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_LESS, 2);
public BotanicalSanctum(UUID ownerId, CardSetInfo setInfo) { public BotanicalSanctum(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Botanical Sanctum enters the battlefield tapped unless you control two or fewer other lands. // Botanical Sanctum enters the battlefield tapped unless you control two or fewer other lands.
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(new FilterLandPermanent(), ComparisonType.FEWER_THAN, 3)); this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
String abilityText = " tapped unless you control two or fewer other lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
// {T}: Add {G} or {U}. // {T}: Add {G}.
this.addAbility(new GreenManaAbility()); this.addAbility(new GreenManaAbility());
// {T}: Add {U}.
this.addAbility(new BlueManaAbility()); this.addAbility(new BlueManaAbility());
} }

View file

@ -1,19 +1,17 @@
package mage.cards.b; package mage.cards.b;
import java.util.UUID; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.common.TwoOrMoreOpponentsCondition;
import mage.abilities.condition.common.OneOpponentCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import mage.abilities.mana.WhiteManaAbility; import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import java.util.UUID;
/** /**
*
* @author TheElk801 * @author TheElk801
*/ */
public final class BountifulPromenade extends CardImpl { public final class BountifulPromenade extends CardImpl {
@ -22,16 +20,12 @@ public final class BountifulPromenade extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Bountiful Promenade enters the battlefield tapped unless you have two or more opponents. // Bountiful Promenade enters the battlefield tapped unless you have two or more opponents.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(TwoOrMoreOpponentsCondition.instance));
new ConditionalOneShotEffect(
new TapSourceEffect(),
OneOpponentCondition.instance,
"tapped unless you have two or more opponents"
), "tapped unless you have two or more opponents"
));
// {T}: Add {G} or {W}. // {T}: Add {G}.
this.addAbility(new GreenManaAbility()); this.addAbility(new GreenManaAbility());
// {T}: Add {W}.
this.addAbility(new WhiteManaAbility()); this.addAbility(new WhiteManaAbility());
} }

View file

@ -1,44 +1,46 @@
package mage.cards.c; package mage.cards.c;
import java.util.UUID; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.Condition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import mage.abilities.mana.WhiteManaAbility; import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.constants.SubType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.filter.common.FilterLandPermanent; import mage.filter.common.FilterLandPermanent;
import java.util.UUID;
/** /**
* @author fireshoes * @author fireshoes
*/ */
public final class CanopyVista extends CardImpl { public final class CanopyVista extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent(); private static final FilterLandPermanent filter = new FilterLandPermanent("basic lands");
static { static {
filter.add(SuperType.BASIC.getPredicate()); filter.add(SuperType.BASIC.getPredicate());
} }
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_GREATER, 2);
public CanopyVista(UUID ownerId, CardSetInfo setInfo) { public CanopyVista(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
this.subtype.add(SubType.FOREST); this.subtype.add(SubType.FOREST);
this.subtype.add(SubType.PLAINS); this.subtype.add(SubType.PLAINS);
// Canopy Vista enters the battlefield tapped unless you control two or more basic lands. // Canopy Vista enters the battlefield tapped unless you control two or more basic lands.
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 1)); this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
String abilityText = "tapped unless you control two or more basic lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); // {T}: Add {G}.
this.addAbility(new GreenManaAbility()); this.addAbility(new GreenManaAbility());
// {T}: Add {W}.
this.addAbility(new WhiteManaAbility()); this.addAbility(new WhiteManaAbility());
} }

View file

@ -1,20 +1,16 @@
package mage.cards.c; package mage.cards.c;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.WhiteManaAbility; import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterControlledPermanent;
@ -28,16 +24,13 @@ import java.util.UUID;
public final class CastleArdenvale extends CardImpl { public final class CastleArdenvale extends CardImpl {
private static final FilterPermanent filter = new FilterControlledPermanent(SubType.PLAINS); private static final FilterPermanent filter = new FilterControlledPermanent(SubType.PLAINS);
private static final Condition condition private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.EQUAL_TO, 0);
public CastleArdenvale(UUID ownerId, CardSetInfo setInfo) { public CastleArdenvale(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Castle Ardenvale enters the battlefield tapped unless you control a Plains. // Castle Ardenvale enters the battlefield tapped unless you control a Plains.
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new TapSourceEffect(), condition
), "tapped unless you control a Plains"));
// {T}: Add {W}. // {T}: Add {W}.
this.addAbility(new WhiteManaAbility()); this.addAbility(new WhiteManaAbility());

View file

@ -1,20 +1,16 @@
package mage.cards.c; package mage.cards.c;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.RedManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
@ -28,16 +24,13 @@ import java.util.UUID;
public final class CastleEmbereth extends CardImpl { public final class CastleEmbereth extends CardImpl {
private static final FilterPermanent filter = new FilterControlledPermanent(SubType.MOUNTAIN); private static final FilterPermanent filter = new FilterControlledPermanent(SubType.MOUNTAIN);
private static final Condition condition private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.EQUAL_TO, 0);
public CastleEmbereth(UUID ownerId, CardSetInfo setInfo) { public CastleEmbereth(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Castle Embereth enters the battlefield tapped unless you control a Mountain. // Castle Embereth enters the battlefield tapped unless you control a Mountain.
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new TapSourceEffect(), condition
), "tapped unless you control a Mountain"));
// {T}: Add {R}. // {T}: Add {R}.
this.addAbility(new RedManaAbility()); this.addAbility(new RedManaAbility());

View file

@ -4,20 +4,17 @@ import mage.ConditionalMana;
import mage.MageObject; import mage.MageObject;
import mage.Mana; import mage.Mana;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.ConditionalColoredManaAbility; import mage.abilities.mana.ConditionalColoredManaAbility;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import mage.abilities.mana.builder.ConditionalManaBuilder; import mage.abilities.mana.builder.ConditionalManaBuilder;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterControlledPermanent;
@ -31,16 +28,13 @@ import java.util.UUID;
public final class CastleGarenbrig extends CardImpl { public final class CastleGarenbrig extends CardImpl {
private static final FilterPermanent filter = new FilterControlledPermanent(SubType.FOREST); private static final FilterPermanent filter = new FilterControlledPermanent(SubType.FOREST);
private static final Condition condition private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.EQUAL_TO, 0);
public CastleGarenbrig(UUID ownerId, CardSetInfo setInfo) { public CastleGarenbrig(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Castle Garenbrig enters the battlefield tapped unless you control a Forest. // Castle Garenbrig enters the battlefield tapped unless you control a Forest.
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new TapSourceEffect(), condition
), "tapped unless you control a Forest"));
// {T}: Add {G}. // {T}: Add {G}.
this.addAbility(new GreenManaAbility()); this.addAbility(new GreenManaAbility());

View file

@ -1,22 +1,18 @@
package mage.cards.c; package mage.cards.c;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.dynamicvalue.common.CardsInControllerHandCount; import mage.abilities.dynamicvalue.common.CardsInControllerHandCount;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlackManaAbility; import mage.abilities.mana.BlackManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterControlledPermanent;
@ -29,16 +25,13 @@ import java.util.UUID;
public final class CastleLocthwain extends CardImpl { public final class CastleLocthwain extends CardImpl {
private static final FilterPermanent filter = new FilterControlledPermanent(SubType.SWAMP); private static final FilterPermanent filter = new FilterControlledPermanent(SubType.SWAMP);
private static final Condition condition private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.EQUAL_TO, 0);
public CastleLocthwain(UUID ownerId, CardSetInfo setInfo) { public CastleLocthwain(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Castle Locthwain enters the battlefield tapped unless you control a Swamp. // Castle Locthwain enters the battlefield tapped unless you control a Swamp.
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new TapSourceEffect(), condition
), "tapped unless you control a Swamp"));
// {T}: Add {B}. // {T}: Add {B}.
this.addAbility(new BlackManaAbility()); this.addAbility(new BlackManaAbility());

View file

@ -1,20 +1,16 @@
package mage.cards.c; package mage.cards.c;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.effects.keyword.ScryEffect; import mage.abilities.effects.keyword.ScryEffect;
import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.BlueManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterControlledPermanent;
@ -27,16 +23,13 @@ import java.util.UUID;
public final class CastleVantress extends CardImpl { public final class CastleVantress extends CardImpl {
private static final FilterPermanent filter = new FilterControlledPermanent(SubType.ISLAND); private static final FilterPermanent filter = new FilterControlledPermanent(SubType.ISLAND);
private static final Condition condition private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.EQUAL_TO, 0);
public CastleVantress(UUID ownerId, CardSetInfo setInfo) { public CastleVantress(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Castle Vantress enters the battlefield tapped unless you control an Island. // Castle Vantress enters the battlefield tapped unless you control an Island.
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new TapSourceEffect(), condition
), "tapped unless you control an Island"));
// {T}: Add {U}. // {T}: Add {U}.
this.addAbility(new BlueManaAbility()); this.addAbility(new BlueManaAbility());

View file

@ -1,45 +1,46 @@
package mage.cards.c; package mage.cards.c;
import java.util.UUID; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.Condition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.RedManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.constants.SubType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.filter.common.FilterLandPermanent; import mage.filter.common.FilterLandPermanent;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class CinderGlade extends CardImpl { public final class CinderGlade extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent(); private static final FilterLandPermanent filter = new FilterLandPermanent("basic lands");
static { static {
filter.add(SuperType.BASIC.getPredicate()); filter.add(SuperType.BASIC.getPredicate());
} }
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_GREATER, 2);
public CinderGlade(UUID ownerId, CardSetInfo setInfo) { public CinderGlade(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.LAND},""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
this.subtype.add(SubType.MOUNTAIN); this.subtype.add(SubType.MOUNTAIN);
this.subtype.add(SubType.FOREST); this.subtype.add(SubType.FOREST);
// Cinder Glade enters the battlefield tapped unless you control two or more basic lands. // Cinder Glade enters the battlefield tapped unless you control two or more basic lands.
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 1)); this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
String abilityText = "tapped unless you control two or more basic lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); // {T}: Add {R}.
this.addAbility(new RedManaAbility()); this.addAbility(new RedManaAbility());
// {T}: Add {G}.
this.addAbility(new GreenManaAbility()); this.addAbility(new GreenManaAbility());
} }

View file

@ -2,12 +2,8 @@
package mage.cards.c; package mage.cards.c;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.RedManaAbility;
import mage.abilities.mana.WhiteManaAbility; import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -24,19 +20,24 @@ import java.util.UUID;
*/ */
public final class ClifftopRetreat extends CardImpl { public final class ClifftopRetreat extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent(); private static final FilterLandPermanent filter = new FilterLandPermanent("a Mountain or a Plains");
static { static {
filter.add(Predicates.or(SubType.MOUNTAIN.getPredicate(), SubType.PLAINS.getPredicate())); filter.add(Predicates.or(SubType.MOUNTAIN.getPredicate(), SubType.PLAINS.getPredicate()));
} }
public ClifftopRetreat(UUID ownerId, CardSetInfo setInfo) { private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
super(ownerId,setInfo,new CardType[]{CardType.LAND},null);
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(filter)); public ClifftopRetreat(UUID ownerId, CardSetInfo setInfo) {
String abilityText = " tapped unless you control a Mountain or a Plains"; super(ownerId, setInfo, new CardType[]{CardType.LAND}, null);
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
// Clifftop Retreat enters the battlefield tapped unless you control a Mountain or a Plains.
this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
// {T}: Add {R}.
this.addAbility(new RedManaAbility()); this.addAbility(new RedManaAbility());
// {T}: Add {W}.
this.addAbility(new WhiteManaAbility()); this.addAbility(new WhiteManaAbility());
} }

View file

@ -1,37 +1,43 @@
package mage.cards.c; package mage.cards.c;
import java.util.UUID; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.Condition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlackManaAbility; import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.WhiteManaAbility; import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.filter.StaticFilters; import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class ConcealedCourtyard extends CardImpl { public final class ConcealedCourtyard extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent("other lands");
static {
filter.add(AnotherPredicate.instance);
}
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_LESS, 2);
public ConcealedCourtyard(UUID ownerId, CardSetInfo setInfo) { public ConcealedCourtyard(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Concealed Courtyard enters the battlefield tapped unless you control two or fewer other lands. // Concealed Courtyard enters the battlefield tapped unless you control two or fewer other lands.
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_LANDS, ComparisonType.FEWER_THAN, 3)); this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
String abilityText = " tapped unless you control two or fewer other lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); // {T}: Add {W}.
// {T}: Add {W} or {B}.this.addAbility(new BlackManaAbility());
this.addAbility(new WhiteManaAbility()); this.addAbility(new WhiteManaAbility());
// {T}: Add {B}.
this.addAbility(new BlackManaAbility()); this.addAbility(new BlackManaAbility());
} }

View file

@ -1,35 +1,43 @@
package mage.cards.c; package mage.cards.c;
import java.util.UUID; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.Condition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.RedManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.filter.StaticFilters; import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID;
/** /**
*
* @author maurer.it_at_gmail.com * @author maurer.it_at_gmail.com
*/ */
public final class CopperlineGorge extends CardImpl { public final class CopperlineGorge extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent("other lands");
static {
filter.add(AnotherPredicate.instance);
}
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_LESS, 2);
public CopperlineGorge(UUID ownerId, CardSetInfo setInfo) { public CopperlineGorge(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, null); super(ownerId, setInfo, new CardType[]{CardType.LAND}, null);
// Copperline Gorge enters the battlefield tapped unless you control two or fewer other lands. // Copperline Gorge enters the battlefield tapped unless you control two or fewer other lands.
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_LANDS, ComparisonType.FEWER_THAN, 3)); this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
String abilityText = " tapped unless you control two or fewer other lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); // {T}: Add {R}.
this.addAbility(new RedManaAbility()); this.addAbility(new RedManaAbility());
// {T}: Add {G}.
this.addAbility(new GreenManaAbility()); this.addAbility(new GreenManaAbility());
} }

View file

@ -1,13 +1,8 @@
package mage.cards.d; package mage.cards.d;
import java.util.UUID; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.Condition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlackManaAbility; import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.BlueManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -17,27 +12,32 @@ import mage.constants.ComparisonType;
import mage.filter.common.FilterLandPermanent; import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate; import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID;
/** /**
*
* @author maurer.it_at_gmail.com * @author maurer.it_at_gmail.com
*/ */
public final class DarkslickShores extends CardImpl { public final class DarkslickShores extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent(); private static final FilterLandPermanent filter = new FilterLandPermanent("other lands");
static { static {
filter.add(AnotherPredicate.instance); filter.add(AnotherPredicate.instance);
} }
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_LESS, 2);
public DarkslickShores(UUID ownerId, CardSetInfo setInfo) { public DarkslickShores(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, null); super(ownerId, setInfo, new CardType[]{CardType.LAND}, null);
// Darkslick Shores enters the battlefield tapped unless you control two or fewer other lands. // Darkslick Shores enters the battlefield tapped unless you control two or fewer other lands.
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.FEWER_THAN, 3)); this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
String abilityText = " tapped unless you control two or fewer other lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
// {T}: Add {U}.
this.addAbility(new BlueManaAbility()); this.addAbility(new BlueManaAbility());
// {T}: Add {B}.
this.addAbility(new BlackManaAbility()); this.addAbility(new BlackManaAbility());
} }

View file

@ -1,17 +1,15 @@
package mage.cards.d; package mage.cards.d;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlackManaAbility; import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.filter.StaticFilters; import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID; import java.util.UUID;
@ -20,21 +18,25 @@ import java.util.UUID;
*/ */
public final class DeathcapGlade extends CardImpl { public final class DeathcapGlade extends CardImpl {
private static final Condition condition = new PermanentsOnTheBattlefieldCondition( private static final FilterLandPermanent filter = new FilterLandPermanent("other lands");
StaticFilters.FILTER_LANDS, ComparisonType.FEWER_THAN, 2
); static {
filter.add(AnotherPredicate.instance);
}
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_GREATER, 2);
public DeathcapGlade(UUID ownerId, CardSetInfo setInfo) { public DeathcapGlade(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Deathcap Glade enters the battlefield tapped unless you control two or more other lands. // Deathcap Glade enters the battlefield tapped unless you control two or more other lands.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new ConditionalOneShotEffect(new TapSourceEffect(), condition),
"tapped unless you control two or more other lands"
));
// {T}: Add {B} or {G}. // {T}: Add {B}.
this.addAbility(new BlackManaAbility()); this.addAbility(new BlackManaAbility());
// {T}: Add {G}.
this.addAbility(new GreenManaAbility()); this.addAbility(new GreenManaAbility());
} }

View file

@ -1,17 +1,15 @@
package mage.cards.d; package mage.cards.d;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.BlueManaAbility;
import mage.abilities.mana.WhiteManaAbility; import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.filter.StaticFilters; import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID; import java.util.UUID;
@ -20,21 +18,25 @@ import java.util.UUID;
*/ */
public final class DesertedBeach extends CardImpl { public final class DesertedBeach extends CardImpl {
private static final Condition condition = new PermanentsOnTheBattlefieldCondition( private static final FilterLandPermanent filter = new FilterLandPermanent("other lands");
StaticFilters.FILTER_LANDS, ComparisonType.FEWER_THAN, 2
); static {
filter.add(AnotherPredicate.instance);
}
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_GREATER, 2);
public DesertedBeach(UUID ownerId, CardSetInfo setInfo) { public DesertedBeach(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Deserted Beach enters the battlefield tapped unless you control two or more other lands. // Deserted Beach enters the battlefield tapped unless you control two or more other lands.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new ConditionalOneShotEffect(new TapSourceEffect(), condition),
"tapped unless you control two or more other lands"
));
// {T}: Add {W} or {U}. // {T}: Add {W}.
this.addAbility(new WhiteManaAbility()); this.addAbility(new WhiteManaAbility());
// {T}: Add {U}.
this.addAbility(new BlueManaAbility()); this.addAbility(new BlueManaAbility());
} }

View file

@ -1,12 +1,8 @@
package mage.cards.d; package mage.cards.d;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlackManaAbility; import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.RedManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -19,24 +15,28 @@ import mage.filter.predicate.Predicates;
import java.util.UUID; import java.util.UUID;
/** /**
*
* @author BetaSteward_at_googlemail.com * @author BetaSteward_at_googlemail.com
*/ */
public final class DragonskullSummit extends CardImpl { public final class DragonskullSummit extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent(); private static final FilterLandPermanent filter = new FilterLandPermanent("a Swamp or a Mountain");
static { static {
filter.add(Predicates.or(SubType.SWAMP.getPredicate(), SubType.MOUNTAIN.getPredicate())); filter.add(Predicates.or(SubType.SWAMP.getPredicate(), SubType.MOUNTAIN.getPredicate()));
} }
private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
public DragonskullSummit(UUID ownerId, CardSetInfo setInfo) { public DragonskullSummit(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, null); super(ownerId, setInfo, new CardType[]{CardType.LAND}, null);
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(filter)); // Dragonskull Summit enters the battlefield tapped unless you control a Swamp or a Mountain.
String abilityText = " tapped unless you control a Swamp or a Mountain"; this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
// {T}: Add {B}.
this.addAbility(new BlackManaAbility()); this.addAbility(new BlackManaAbility());
// {T}: Add {R}.
this.addAbility(new RedManaAbility()); this.addAbility(new RedManaAbility());
} }

View file

@ -1,17 +1,15 @@
package mage.cards.d; package mage.cards.d;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.BlueManaAbility;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.filter.StaticFilters; import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID; import java.util.UUID;
@ -20,21 +18,25 @@ import java.util.UUID;
*/ */
public final class DreamrootCascade extends CardImpl { public final class DreamrootCascade extends CardImpl {
private static final Condition condition = new PermanentsOnTheBattlefieldCondition( private static final FilterLandPermanent filter = new FilterLandPermanent("other lands");
StaticFilters.FILTER_LANDS, ComparisonType.FEWER_THAN, 2
); static {
filter.add(AnotherPredicate.instance);
}
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_GREATER, 2);
public DreamrootCascade(UUID ownerId, CardSetInfo setInfo) { public DreamrootCascade(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Dreamroot Cascade enters the battlefield tapped unless you control two or more other lands. // Dreamroot Cascade enters the battlefield tapped unless you control two or more other lands.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new ConditionalOneShotEffect(new TapSourceEffect(), condition),
"tapped unless you control two or more other lands"
));
// {T}: Add {G} or {U}. // {T}: Add {G}.
this.addAbility(new GreenManaAbility()); this.addAbility(new GreenManaAbility());
// {T}: Add {U}.
this.addAbility(new BlueManaAbility()); this.addAbility(new BlueManaAbility());
} }

View file

@ -1,15 +1,12 @@
package mage.cards.d; package mage.cards.d;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlackManaAbility; import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.BlueManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.predicate.Predicates; import mage.filter.predicate.Predicates;
@ -21,27 +18,25 @@ import java.util.UUID;
*/ */
public final class DrownedCatacomb extends CardImpl { public final class DrownedCatacomb extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent(); private static final FilterPermanent filter = new FilterPermanent("an Island or a Swamp");
static { static {
filter.add(Predicates.or( filter.add(Predicates.or(SubType.ISLAND.getPredicate(), SubType.SWAMP.getPredicate()));
SubType.SWAMP.getPredicate(),
SubType.ISLAND.getPredicate()
));
} }
private static final Condition condition private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.EQUAL_TO, 0);
public DrownedCatacomb(UUID ownerId, CardSetInfo setInfo) { public DrownedCatacomb(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, null); super(ownerId, setInfo, new CardType[]{CardType.LAND}, null);
this.addAbility(new EntersBattlefieldAbility( // Drowned Catacomb enters the battlefield tapped unless you control an Island or a Swamp.
new TapSourceEffect(), condition, null, this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
"tapped unless you control an Island or a Swamp"
)); // {T}: Add {U}.
this.addAbility(new BlackManaAbility());
this.addAbility(new BlueManaAbility()); this.addAbility(new BlueManaAbility());
// {T}: Add {B}.
this.addAbility(new BlackManaAbility());
} }
private DrownedCatacomb(final DrownedCatacomb card) { private DrownedCatacomb(final DrownedCatacomb card) {

View file

@ -1,12 +1,9 @@
package mage.cards.d; package mage.cards.d;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldUntappedTriggeredAbility; import mage.abilities.common.EntersBattlefieldUntappedTriggeredAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.RedManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -26,14 +23,14 @@ import java.util.UUID;
public final class DwarvenMine extends CardImpl { public final class DwarvenMine extends CardImpl {
private static final FilterPermanent filter private static final FilterPermanent filter
= new FilterControlledPermanent(SubType.MOUNTAIN); = new FilterControlledPermanent(SubType.MOUNTAIN, "other Mountains");
static { static {
filter.add(AnotherPredicate.instance); filter.add(AnotherPredicate.instance);
} }
private static final Condition condition private static final YouControlPermanentCondition condition
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.FEWER_THAN, 3); = new YouControlPermanentCondition(filter, ComparisonType.OR_GREATER, 3);
public DwarvenMine(UUID ownerId, CardSetInfo setInfo) { public DwarvenMine(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
@ -44,10 +41,7 @@ public final class DwarvenMine extends CardImpl {
this.addAbility(new RedManaAbility()); this.addAbility(new RedManaAbility());
// Dwarven Mine enters the battlefield tapped unless you control three or more other Mountains. // Dwarven Mine enters the battlefield tapped unless you control three or more other Mountains.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new ConditionalOneShotEffect(new TapSourceEffect(), condition),
"tapped unless you control three or more other Mountains"
));
// When Dwarven Mine enters the battlefield untapped, create a 1/1 red Dwarf creature token. // When Dwarven Mine enters the battlefield untapped, create a 1/1 red Dwarf creature token.
this.addAbility(new EntersBattlefieldUntappedTriggeredAbility(new CreateTokenEffect(new DwarfToken()), false)); this.addAbility(new EntersBattlefieldUntappedTriggeredAbility(new CreateTokenEffect(new DwarfToken()), false));

View file

@ -1,7 +1,5 @@
package mage.cards.f; package mage.cards.f;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.AsEntersBattlefieldAbility; import mage.abilities.common.AsEntersBattlefieldAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
@ -26,8 +24,9 @@ import mage.game.permanent.Permanent;
import mage.players.Player; import mage.players.Player;
import mage.target.common.TargetCardInHand; import mage.target.common.TargetCardInHand;
import java.util.UUID;
/** /**
*
* @author weirddan455 * @author weirddan455
*/ */
public final class FortifiedBeachhead extends CardImpl { public final class FortifiedBeachhead extends CardImpl {
@ -99,6 +98,7 @@ class FortifiedBeachheadEffect extends OneShotEffect {
return true; return true;
} }
} }
// Intentional use of Permanent::setTapped, to not cause any trigger
land.setTapped(true); land.setTapped(true);
return true; return true;
} }

View file

@ -1,12 +1,9 @@
package mage.cards.g; package mage.cards.g;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldUntappedTriggeredAbility; import mage.abilities.common.EntersBattlefieldUntappedTriggeredAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -26,14 +23,14 @@ import java.util.UUID;
public final class GingerbreadCabin extends CardImpl { public final class GingerbreadCabin extends CardImpl {
private static final FilterPermanent filter private static final FilterPermanent filter
= new FilterControlledPermanent(SubType.FOREST); = new FilterControlledPermanent(SubType.FOREST, "other Forests");
static { static {
filter.add(AnotherPredicate.instance); filter.add(AnotherPredicate.instance);
} }
private static final Condition condition private static final YouControlPermanentCondition condition
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.FEWER_THAN, 3); = new YouControlPermanentCondition(filter, ComparisonType.OR_GREATER, 3);
public GingerbreadCabin(UUID ownerId, CardSetInfo setInfo) { public GingerbreadCabin(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
@ -44,10 +41,7 @@ public final class GingerbreadCabin extends CardImpl {
this.addAbility(new GreenManaAbility()); this.addAbility(new GreenManaAbility());
// Gingerbread Cabin enters the battlefield tapped unless you control three or more other Forests. // Gingerbread Cabin enters the battlefield tapped unless you control three or more other Forests.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new ConditionalOneShotEffect(new TapSourceEffect(), condition),
"tapped unless you control three or more other Forests"
));
// When Gingerbread Cabin enters the battlefield untapped, create a Food token. // When Gingerbread Cabin enters the battlefield untapped, create a Food token.
this.addAbility(new EntersBattlefieldUntappedTriggeredAbility(new CreateTokenEffect(new FoodToken()), false)); this.addAbility(new EntersBattlefieldUntappedTriggeredAbility(new CreateTokenEffect(new FoodToken()), false));

View file

@ -1,12 +1,8 @@
package mage.cards.g; package mage.cards.g;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.BlueManaAbility;
import mage.abilities.mana.WhiteManaAbility; import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -19,24 +15,28 @@ import mage.filter.predicate.Predicates;
import java.util.UUID; import java.util.UUID;
/** /**
*
* @author BetaSteward_at_googlemail.com * @author BetaSteward_at_googlemail.com
*/ */
public final class GlacialFortress extends CardImpl { public final class GlacialFortress extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent(); private static final FilterLandPermanent filter = new FilterLandPermanent("a Plains or an Island");
static { static {
filter.add(Predicates.or(SubType.PLAINS.getPredicate(), SubType.ISLAND.getPredicate())); filter.add(Predicates.or(SubType.PLAINS.getPredicate(), SubType.ISLAND.getPredicate()));
} }
private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
public GlacialFortress(UUID ownerId, CardSetInfo setInfo) { public GlacialFortress(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, null); super(ownerId, setInfo, new CardType[]{CardType.LAND}, null);
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(filter)); // Glacial Fortress enters the battlefield tapped unless you control a Plains or an Island.
String abilityText = " tapped unless you control a Plains or an Island"; this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
// {T}: Add {U}.
this.addAbility(new BlueManaAbility()); this.addAbility(new BlueManaAbility());
// {T}: Add {W}.
this.addAbility(new WhiteManaAbility()); this.addAbility(new WhiteManaAbility());
} }

View file

@ -1,17 +1,15 @@
package mage.cards.h; package mage.cards.h;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlackManaAbility; import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.RedManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.filter.StaticFilters; import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID; import java.util.UUID;
@ -20,21 +18,25 @@ import java.util.UUID;
*/ */
public final class HauntedRidge extends CardImpl { public final class HauntedRidge extends CardImpl {
private static final Condition condition = new PermanentsOnTheBattlefieldCondition( private static final FilterLandPermanent filter = new FilterLandPermanent("other lands");
StaticFilters.FILTER_LANDS, ComparisonType.FEWER_THAN, 2
); static {
filter.add(AnotherPredicate.instance);
}
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_GREATER, 2);
public HauntedRidge(UUID ownerId, CardSetInfo setInfo) { public HauntedRidge(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Haunted Ridge enters the battlefield tapped unless you control two or more other lands. // Haunted Ridge enters the battlefield tapped unless you control two or more other lands.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new ConditionalOneShotEffect(new TapSourceEffect(), condition),
"tapped unless you control two or more other lands"
));
// {T}: Add {B} or {R}. // {T}: Add {B}.
this.addAbility(new BlackManaAbility()); this.addAbility(new BlackManaAbility());
// {T}: Add {R}.
this.addAbility(new RedManaAbility()); this.addAbility(new RedManaAbility());
} }

View file

@ -1,12 +1,8 @@
package mage.cards.h; package mage.cards.h;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.BlueManaAbility;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -23,19 +19,24 @@ import java.util.UUID;
*/ */
public final class HinterlandHarbor extends CardImpl { public final class HinterlandHarbor extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent(); private static final FilterLandPermanent filter = new FilterLandPermanent("a Forest or an Island");
static { static {
filter.add(Predicates.or(SubType.FOREST.getPredicate(), SubType.ISLAND.getPredicate())); filter.add(Predicates.or(SubType.FOREST.getPredicate(), SubType.ISLAND.getPredicate()));
} }
private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
public HinterlandHarbor(UUID ownerId, CardSetInfo setInfo) { public HinterlandHarbor(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, null); super(ownerId, setInfo, new CardType[]{CardType.LAND}, null);
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(filter)); // Hinterland Harbor enters the battlefield tapped unless you control a Forest or an Island.
String abilityText = " tapped unless you control a Forest or an Island"; this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
// {T}: Add {G}.
this.addAbility(new GreenManaAbility()); this.addAbility(new GreenManaAbility());
// {T}: Add {U}.
this.addAbility(new BlueManaAbility()); this.addAbility(new BlueManaAbility());
} }

View file

@ -1,12 +1,10 @@
package mage.cards.h; package mage.cards.h;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.common.NotMyTurnCondition; import mage.abilities.condition.common.MyTurnCondition;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.PutOnTopOrBottomLibraryTargetEffect; import mage.abilities.effects.common.PutOnTopOrBottomLibraryTargetEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.keyword.FlashAbility; import mage.abilities.keyword.FlashAbility;
import mage.abilities.keyword.WardAbility; import mage.abilities.keyword.WardAbility;
import mage.cards.AdventureCard; import mage.cards.AdventureCard;
@ -45,10 +43,7 @@ public final class HornedLochWhale extends AdventureCard {
this.addAbility(new WardAbility(new ManaCostsImpl<>("{2}"), false)); this.addAbility(new WardAbility(new ManaCostsImpl<>("{2}"), false));
// Horned Loch-Whale enters the battlefield tapped unless it's your turn. // Horned Loch-Whale enters the battlefield tapped unless it's your turn.
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect( this.addAbility(new EntersBattlefieldTappedUnlessAbility(MyTurnCondition.instance, "it's your turn"));
new TapSourceEffect(true), NotMyTurnCondition.instance,
"tapped unless it's your turn"
)));
// Lagoon Breach // Lagoon Breach
// The owner of target attacking creature you don't control puts it on the top or bottom of their library. // The owner of target attacking creature you don't control puts it on the top or bottom of their library.

View file

@ -1,12 +1,9 @@
package mage.cards.i; package mage.cards.i;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldUntappedTriggeredAbility; import mage.abilities.common.EntersBattlefieldUntappedTriggeredAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.abilities.mana.WhiteManaAbility; import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -28,13 +25,14 @@ import java.util.UUID;
public final class IdyllicGrange extends CardImpl { public final class IdyllicGrange extends CardImpl {
private static final FilterPermanent filter private static final FilterPermanent filter
= new FilterControlledPermanent(SubType.PLAINS); = new FilterControlledPermanent(SubType.PLAINS, "other Plains");
static { static {
filter.add(AnotherPredicate.instance); filter.add(AnotherPredicate.instance);
} }
private static final Condition condition
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.FEWER_THAN, 3); private static final YouControlPermanentCondition condition
= new YouControlPermanentCondition(filter, ComparisonType.OR_GREATER, 3);
public IdyllicGrange(UUID ownerId, CardSetInfo setInfo) { public IdyllicGrange(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
@ -45,10 +43,7 @@ public final class IdyllicGrange extends CardImpl {
this.addAbility(new WhiteManaAbility()); this.addAbility(new WhiteManaAbility());
// Idyllic Grange enters the battlefield tapped unless you control three or more other Plains. // Idyllic Grange enters the battlefield tapped unless you control three or more other Plains.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new ConditionalOneShotEffect(new TapSourceEffect(), condition),
"tapped unless you control three or more other Plains"
));
// When Idyllic Grange enters the battlefield untapped, put a +1/+1 counter on target creature you control. // When Idyllic Grange enters the battlefield untapped, put a +1/+1 counter on target creature you control.
Ability ability = new EntersBattlefieldUntappedTriggeredAbility( Ability ability = new EntersBattlefieldUntappedTriggeredAbility(

View file

@ -1,36 +1,43 @@
package mage.cards.i; package mage.cards.i;
import java.util.UUID; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.Condition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.RedManaAbility;
import mage.abilities.mana.WhiteManaAbility; import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.filter.StaticFilters; import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID;
/** /**
* @author fireshoes * @author fireshoes
*/ */
public final class InspiringVantage extends CardImpl { public final class InspiringVantage extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent("other lands");
static {
filter.add(AnotherPredicate.instance);
}
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_LESS, 2);
public InspiringVantage(UUID ownerId, CardSetInfo setInfo) { public InspiringVantage(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Inspiring Vantage enters the battlefield tapped unless you control two or fewer other lands. // Inspiring Vantage enters the battlefield tapped unless you control two or fewer other lands.
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_LANDS, ComparisonType.FEWER_THAN, 3)); this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
String abilityText = " tapped unless you control two or fewer other lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
// {T}: Add {R} or {W}. // {T}: Add {R}.
this.addAbility(new RedManaAbility()); this.addAbility(new RedManaAbility());
// {T}: Add {W}.
this.addAbility(new WhiteManaAbility()); this.addAbility(new WhiteManaAbility());
} }

View file

@ -2,12 +2,8 @@
package mage.cards.i; package mage.cards.i;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlackManaAbility; import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.WhiteManaAbility; import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -24,19 +20,24 @@ import java.util.UUID;
*/ */
public final class IsolatedChapel extends CardImpl { public final class IsolatedChapel extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent(); private static final FilterLandPermanent filter = new FilterLandPermanent("a Plains or a Swamp");
static { static {
filter.add(Predicates.or(SubType.PLAINS.getPredicate(), SubType.SWAMP.getPredicate())); filter.add(Predicates.or(SubType.PLAINS.getPredicate(), SubType.SWAMP.getPredicate()));
} }
public IsolatedChapel(UUID ownerId, CardSetInfo setInfo) { private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
super(ownerId,setInfo,new CardType[]{CardType.LAND},null);
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(filter)); public IsolatedChapel(UUID ownerId, CardSetInfo setInfo) {
String abilityText = " tapped unless you control a Plains or a Swamp"; super(ownerId, setInfo, new CardType[]{CardType.LAND}, null);
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
// Isolated Chapel enters the battlefield tapped unless you control a Plains or a Swamp.
this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
// {T}: Add {W}.
this.addAbility(new WhiteManaAbility()); this.addAbility(new WhiteManaAbility());
// {T}: Add {B}.
this.addAbility(new BlackManaAbility()); this.addAbility(new BlackManaAbility());
} }

View file

@ -1,19 +1,17 @@
package mage.cards.l; package mage.cards.l;
import java.util.UUID; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.common.TwoOrMoreOpponentsCondition;
import mage.abilities.condition.common.OneOpponentCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlackManaAbility; import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.RedManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import java.util.UUID;
/** /**
*
* @author TheElk801 * @author TheElk801
*/ */
public final class LuxurySuite extends CardImpl { public final class LuxurySuite extends CardImpl {
@ -22,16 +20,12 @@ public final class LuxurySuite extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Luxury Suite enters the battlefield tapped unless you have two or more opponents. // Luxury Suite enters the battlefield tapped unless you have two or more opponents.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(TwoOrMoreOpponentsCondition.instance));
new ConditionalOneShotEffect(
new TapSourceEffect(),
OneOpponentCondition.instance,
"tapped unless you have two or more opponents"
), "tapped unless you have two or more opponents"
));
// {T}: Add {B} or {R}. // {T}: Add {B}.
this.addAbility(new BlackManaAbility()); this.addAbility(new BlackManaAbility());
// {T}: Add {R}.
this.addAbility(new RedManaAbility()); this.addAbility(new RedManaAbility());
} }

View file

@ -2,21 +2,21 @@ package mage.cards.m;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.Condition;
import mage.abilities.condition.InvertCondition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.hint.ConditionHint; import mage.abilities.hint.ConditionHint;
import mage.abilities.hint.Hint; import mage.abilities.hint.Hint;
import mage.abilities.mana.WhiteManaAbility; import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.CardType;
import mage.constants.SuperType;
import mage.constants.WatcherScope;
import mage.constants.Zone;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledCreaturePermanent;
import mage.game.Game; import mage.game.Game;
@ -33,15 +33,13 @@ import java.util.UUID;
*/ */
public final class MinasTirith extends CardImpl { public final class MinasTirith extends CardImpl {
private static final FilterPermanent filter = new FilterControlledCreaturePermanent(); private static final FilterPermanent filter = new FilterControlledCreaturePermanent("a legendary creature");
static { static {
filter.add(SuperType.LEGENDARY.getPredicate()); filter.add(SuperType.LEGENDARY.getPredicate());
} }
private static final Condition condition private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.EQUAL_TO, 0);
private static final Hint hint = new ConditionHint( new InvertCondition(condition), "You control a legendary creature");
public MinasTirith(UUID ownerId, CardSetInfo setInfo) { public MinasTirith(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
@ -49,10 +47,7 @@ public final class MinasTirith extends CardImpl {
this.supertype.add(SuperType.LEGENDARY); this.supertype.add(SuperType.LEGENDARY);
// Minas Tirith enters the battlefield tapped unless you control a legendary creature. // Minas Tirith enters the battlefield tapped unless you control a legendary creature.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new ConditionalOneShotEffect(new TapSourceEffect(), condition, ""),
"tapped unless you control a legendary creature"
).addHint(hint));
// {T}: Add {W}. // {T}: Add {W}.
this.addAbility(new WhiteManaAbility()); this.addAbility(new WhiteManaAbility());

View file

@ -1,24 +1,17 @@
package mage.cards.m; package mage.cards.m;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.ExileFromGraveCost; import mage.abilities.costs.common.ExileFromGraveCost;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.hint.ConditionHint;
import mage.abilities.hint.Hint;
import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.RedManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledCreaturePermanent;
@ -32,15 +25,13 @@ import java.util.UUID;
*/ */
public final class MinesOfMoria extends CardImpl { public final class MinesOfMoria extends CardImpl {
private static final FilterPermanent filter = new FilterControlledCreaturePermanent(); private static final FilterPermanent filter = new FilterControlledCreaturePermanent("a legendary creature");
static { static {
filter.add(SuperType.LEGENDARY.getPredicate()); filter.add(SuperType.LEGENDARY.getPredicate());
} }
private static final Condition condition private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.EQUAL_TO, 0);
private static final Hint hint = new ConditionHint( new InvertCondition(condition), "You control a legendary creature");
public MinesOfMoria(UUID ownerId, CardSetInfo setInfo) { public MinesOfMoria(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
@ -48,10 +39,7 @@ public final class MinesOfMoria extends CardImpl {
this.supertype.add(SuperType.LEGENDARY); this.supertype.add(SuperType.LEGENDARY);
// Mines of Moria enters the battlefield tapped unless you control a legendary creature. // Mines of Moria enters the battlefield tapped unless you control a legendary creature.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new ConditionalOneShotEffect(new TapSourceEffect(), condition, ""),
"tapped unless you control a legendary creature"
).addHint(hint));
// {T}: Add {R}. // {T}: Add {R}.
this.addAbility(new RedManaAbility()); this.addAbility(new RedManaAbility());

View file

@ -1,24 +1,19 @@
package mage.cards.m; package mage.cards.m;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.LookLibraryAndPickControllerEffect; import mage.abilities.effects.common.LookLibraryAndPickControllerEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.WhiteManaAbility; import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.PutCards; import mage.constants.PutCards;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.mageobject.HistoricPredicate; import mage.filter.predicate.mageobject.HistoricPredicate;
@ -29,9 +24,8 @@ import java.util.UUID;
*/ */
public final class MonumentalHenge extends CardImpl { public final class MonumentalHenge extends CardImpl {
private static final FilterPermanent filter = new FilterControlledPermanent(SubType.PLAINS); private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.PLAINS);
private static final Condition condition private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.EQUAL_TO, 0);
private static final FilterCard filterCard = new FilterCard("a historic card"); private static final FilterCard filterCard = new FilterCard("a historic card");
@ -43,9 +37,7 @@ public final class MonumentalHenge extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Monumental Henge enters the battlefield tapped unless you control a Plains. // Monumental Henge enters the battlefield tapped unless you control a Plains.
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new TapSourceEffect(), condition
), "tapped unless you control a Plains"));
// {T}: Add {W}. // {T}: Add {W}.
this.addAbility(new WhiteManaAbility()); this.addAbility(new WhiteManaAbility());

View file

@ -1,19 +1,17 @@
package mage.cards.m; package mage.cards.m;
import java.util.UUID; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.common.TwoOrMoreOpponentsCondition;
import mage.abilities.condition.common.OneOpponentCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlackManaAbility; import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.BlueManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import java.util.UUID;
/** /**
*
* @author TheElk801 * @author TheElk801
*/ */
public final class MorphicPool extends CardImpl { public final class MorphicPool extends CardImpl {
@ -22,16 +20,12 @@ public final class MorphicPool extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Morphic Pool enters the battlefield tapped unless you have two or more opponents. // Morphic Pool enters the battlefield tapped unless you have two or more opponents.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(TwoOrMoreOpponentsCondition.instance));
new ConditionalOneShotEffect(
new TapSourceEffect(),
OneOpponentCondition.instance,
"tapped unless you have two or more opponents"
), "tapped unless you have two or more opponents"
));
// {T}: Add {U} or {B}. // {T}: Add {U}.
this.addAbility(new BlueManaAbility()); this.addAbility(new BlueManaAbility());
// {T}: Add {B}.
this.addAbility(new BlackManaAbility()); this.addAbility(new BlackManaAbility());
} }

View file

@ -1,13 +1,10 @@
package mage.cards.m; package mage.cards.m;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldUntappedTriggeredAbility; import mage.abilities.common.EntersBattlefieldUntappedTriggeredAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.PutOnLibraryTargetEffect; import mage.abilities.effects.common.PutOnLibraryTargetEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.BlueManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -29,7 +26,7 @@ import java.util.UUID;
public final class MysticSanctuary extends CardImpl { public final class MysticSanctuary extends CardImpl {
private static final FilterPermanent filter private static final FilterPermanent filter
= new FilterControlledPermanent(SubType.ISLAND); = new FilterControlledPermanent(SubType.ISLAND, "other Islands");
private static final FilterCard filter2 private static final FilterCard filter2
= new FilterInstantOrSorceryCard("instant or sorcery card from your graveyard"); = new FilterInstantOrSorceryCard("instant or sorcery card from your graveyard");
@ -37,8 +34,8 @@ public final class MysticSanctuary extends CardImpl {
filter.add(AnotherPredicate.instance); filter.add(AnotherPredicate.instance);
} }
private static final Condition condition private static final YouControlPermanentCondition condition
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.FEWER_THAN, 3); = new YouControlPermanentCondition(filter, ComparisonType.OR_GREATER, 3);
public MysticSanctuary(UUID ownerId, CardSetInfo setInfo) { public MysticSanctuary(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
@ -49,10 +46,7 @@ public final class MysticSanctuary extends CardImpl {
this.addAbility(new BlueManaAbility()); this.addAbility(new BlueManaAbility());
// Mystic Sanctuary enters the battlefield tapped unless you control three or more other Islands. // Mystic Sanctuary enters the battlefield tapped unless you control three or more other Islands.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new ConditionalOneShotEffect(new TapSourceEffect(), condition),
"tapped unless you control three or more other Islands"
));
// When Mystic Sanctuary enters the battlefield untapped, you may put target instant or sorcery card from your graveyard on top of your library. // When Mystic Sanctuary enters the battlefield untapped, you may put target instant or sorcery card from your graveyard on top of your library.
Ability ability = new EntersBattlefieldUntappedTriggeredAbility( Ability ability = new EntersBattlefieldUntappedTriggeredAbility(

View file

@ -1,17 +1,15 @@
package mage.cards.o; package mage.cards.o;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import mage.abilities.mana.WhiteManaAbility; import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.filter.StaticFilters; import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID; import java.util.UUID;
@ -20,21 +18,25 @@ import java.util.UUID;
*/ */
public final class OvergrownFarmland extends CardImpl { public final class OvergrownFarmland extends CardImpl {
private static final Condition condition = new PermanentsOnTheBattlefieldCondition( private static final FilterLandPermanent filter = new FilterLandPermanent("other lands");
StaticFilters.FILTER_LANDS, ComparisonType.FEWER_THAN, 2
); static {
filter.add(AnotherPredicate.instance);
}
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_GREATER, 2);
public OvergrownFarmland(UUID ownerId, CardSetInfo setInfo) { public OvergrownFarmland(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Overgrown Farmland enters the battlefield tapped unless you control two or more other lands. // Overgrown Farmland enters the battlefield tapped unless you control two or more other lands.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new ConditionalOneShotEffect(new TapSourceEffect(), condition),
"tapped unless you control two or more other lands"
));
// {T}: Add {G} or {W}. // {T}: Add {G}.
this.addAbility(new GreenManaAbility()); this.addAbility(new GreenManaAbility());
// {T}: Add {W}.
this.addAbility(new WhiteManaAbility()); this.addAbility(new WhiteManaAbility());
} }

View file

@ -1,45 +1,46 @@
package mage.cards.p; package mage.cards.p;
import java.util.UUID; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.Condition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.BlueManaAbility;
import mage.abilities.mana.WhiteManaAbility; import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.constants.SubType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.filter.common.FilterLandPermanent; import mage.filter.common.FilterLandPermanent;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class PrairieStream extends CardImpl { public final class PrairieStream extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent(); private static final FilterLandPermanent filter = new FilterLandPermanent("basic lands");
static { static {
filter.add(SuperType.BASIC.getPredicate()); filter.add(SuperType.BASIC.getPredicate());
} }
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_GREATER, 2);
public PrairieStream(UUID ownerId, CardSetInfo setInfo) { public PrairieStream(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.LAND},""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
this.subtype.add(SubType.PLAINS); this.subtype.add(SubType.PLAINS);
this.subtype.add(SubType.ISLAND); this.subtype.add(SubType.ISLAND);
// Prairie Stream enters the battlefield tapped unless you control two or more basic lands. // Prairie Stream enters the battlefield tapped unless you control two or more basic lands.
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 1)); this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
String abilityText = "tapped unless you control two or more basic lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); // {T}: Add {W}.
this.addAbility(new WhiteManaAbility()); this.addAbility(new WhiteManaAbility());
// {T}: Add {U}.
this.addAbility(new BlueManaAbility()); this.addAbility(new BlueManaAbility());
} }

View file

@ -1,35 +1,43 @@
package mage.cards.r; package mage.cards.r;
import java.util.UUID; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.Condition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import mage.abilities.mana.WhiteManaAbility; import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.filter.StaticFilters; import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID;
/** /**
*
* @author maurer.it_at_gmail.com * @author maurer.it_at_gmail.com
*/ */
public final class RazorvergeThicket extends CardImpl { public final class RazorvergeThicket extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent("other lands");
static {
filter.add(AnotherPredicate.instance);
}
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_LESS, 2);
public RazorvergeThicket(UUID ownerId, CardSetInfo setInfo) { public RazorvergeThicket(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, null); super(ownerId, setInfo, new CardType[]{CardType.LAND}, null);
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_LANDS, ComparisonType.FEWER_THAN, 3)); // Razorverge Thicket enters the battlefield tapped unless you control two or fewer other lands.
String abilityText = " tapped unless you control two or fewer other lands"; this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
// {T}: Add {G}.
this.addAbility(new GreenManaAbility()); this.addAbility(new GreenManaAbility());
// {T}: Add {W}.
this.addAbility(new WhiteManaAbility()); this.addAbility(new WhiteManaAbility());
} }

View file

@ -1,9 +1,7 @@
package mage.cards.r; package mage.cards.r;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.common.OneOpponentCondition; import mage.abilities.condition.common.TwoOrMoreOpponentsCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.BlueManaAbility;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -21,16 +19,12 @@ public final class RejuvenatingSprings extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Rejuvenating Springs enters the battlefield tapped unless you have two or more opponents. // Rejuvenating Springs enters the battlefield tapped unless you have two or more opponents.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(TwoOrMoreOpponentsCondition.instance));
new ConditionalOneShotEffect(
new TapSourceEffect(),
OneOpponentCondition.instance,
"tapped unless you have two or more opponents"
), "tapped unless you have two or more opponents"
));
// {T}: Add {G} or {U}. // {T}: Add {G}.
this.addAbility(new GreenManaAbility()); this.addAbility(new GreenManaAbility());
// {T}: Add {U}.
this.addAbility(new BlueManaAbility()); this.addAbility(new BlueManaAbility());
} }

View file

@ -2,22 +2,15 @@ package mage.cards.r;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.effects.keyword.ScryEffect; import mage.abilities.effects.keyword.ScryEffect;
import mage.abilities.hint.ConditionHint;
import mage.abilities.hint.Hint;
import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.BlueManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
@ -30,18 +23,13 @@ import java.util.UUID;
*/ */
public final class Rivendell extends CardImpl { public final class Rivendell extends CardImpl {
private static final FilterPermanent filter private static final FilterPermanent filter = new FilterControlledCreaturePermanent("a legendary creature");
= new FilterControlledCreaturePermanent("you control a legendary creature");
static { static {
filter.add(SuperType.LEGENDARY.getPredicate()); filter.add(SuperType.LEGENDARY.getPredicate());
} }
private static final Condition condition private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.EQUAL_TO, 0);
private static final Condition condition2
= new PermanentsOnTheBattlefieldCondition(filter);
private static final Hint hint = new ConditionHint( new InvertCondition(condition), "You control a legendary creature");
public Rivendell(UUID ownerId, CardSetInfo setInfo) { public Rivendell(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
@ -49,10 +37,7 @@ public final class Rivendell extends CardImpl {
this.supertype.add(SuperType.LEGENDARY); this.supertype.add(SuperType.LEGENDARY);
// Rivendell enters the battlefield tapped unless you control a legendary creature. // Rivendell enters the battlefield tapped unless you control a legendary creature.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new ConditionalOneShotEffect(new TapSourceEffect(), condition, ""),
"tapped unless you control a legendary creature"
).addHint(hint));
// {T}: Add {U}. // {T}: Add {U}.
this.addAbility(new BlueManaAbility()); this.addAbility(new BlueManaAbility());
@ -61,7 +46,7 @@ public final class Rivendell extends CardImpl {
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, Zone.BATTLEFIELD,
new ScryEffect(2, false), new ScryEffect(2, false),
new ManaCostsImpl<>("{1}{U}"), condition2 new ManaCostsImpl<>("{1}{U}"), condition
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
this.addAbility(ability); this.addAbility(ability);

View file

@ -1,17 +1,15 @@
package mage.cards.r; package mage.cards.r;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.RedManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.filter.StaticFilters; import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID; import java.util.UUID;
@ -20,21 +18,25 @@ import java.util.UUID;
*/ */
public final class RockfallVale extends CardImpl { public final class RockfallVale extends CardImpl {
private static final Condition condition = new PermanentsOnTheBattlefieldCondition( private static final FilterLandPermanent filter = new FilterLandPermanent("other lands");
StaticFilters.FILTER_LANDS, ComparisonType.FEWER_THAN, 2
); static {
filter.add(AnotherPredicate.instance);
}
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_GREATER, 2);
public RockfallVale(UUID ownerId, CardSetInfo setInfo) { public RockfallVale(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Rockfall Vale enters the battlefield tapped unless you control two or more other lands. // Rockfall Vale enters the battlefield tapped unless you control two or more other lands.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new ConditionalOneShotEffect(new TapSourceEffect(), condition),
"tapped unless you control two or more other lands"
));
// {T}: Add {R} or {G}. // {T}: Add {R}.
this.addAbility(new RedManaAbility()); this.addAbility(new RedManaAbility());
// {T}: Add {G}.
this.addAbility(new GreenManaAbility()); this.addAbility(new GreenManaAbility());
} }

View file

@ -1,12 +1,8 @@
package mage.cards.r; package mage.cards.r;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.RedManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -19,24 +15,28 @@ import mage.filter.predicate.Predicates;
import java.util.UUID; import java.util.UUID;
/** /**
*
* @author BetaSteward_at_googlemail.com * @author BetaSteward_at_googlemail.com
*/ */
public final class RootboundCrag extends CardImpl { public final class RootboundCrag extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent(); private static final FilterLandPermanent filter = new FilterLandPermanent("a Mountain or a Forest");
static { static {
filter.add(Predicates.or(SubType.MOUNTAIN.getPredicate(), SubType.FOREST.getPredicate())); filter.add(Predicates.or(SubType.MOUNTAIN.getPredicate(), SubType.FOREST.getPredicate()));
} }
private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
public RootboundCrag(UUID ownerId, CardSetInfo setInfo) { public RootboundCrag(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, null); super(ownerId, setInfo, new CardType[]{CardType.LAND}, null);
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(filter)); // Rootbound Crag enters the battlefield tapped unless you control a Mountain or a Forest.
String abilityText = " tapped unless you control a Mountain or a Forest"; this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
// {T}: Add {R}.
this.addAbility(new RedManaAbility()); this.addAbility(new RedManaAbility());
// {T}: Add {G}.
this.addAbility(new GreenManaAbility()); this.addAbility(new GreenManaAbility());
} }

View file

@ -1,19 +1,17 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.common.TwoOrMoreOpponentsCondition;
import mage.abilities.condition.common.OneOpponentCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.BlueManaAbility;
import mage.abilities.mana.WhiteManaAbility; import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import java.util.UUID;
/** /**
*
* @author TheElk801 * @author TheElk801
*/ */
public final class SeaOfClouds extends CardImpl { public final class SeaOfClouds extends CardImpl {
@ -22,16 +20,12 @@ public final class SeaOfClouds extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Sea of Clouds enters the battlefield tapped unless you have two or more opponents. // Sea of Clouds enters the battlefield tapped unless you have two or more opponents.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(TwoOrMoreOpponentsCondition.instance));
new ConditionalOneShotEffect(
new TapSourceEffect(),
OneOpponentCondition.instance,
"tapped unless you have two or more opponents"
), "tapped unless you have two or more opponents"
));
// {T}: Add {U} or {W}. // {T}: Add {U}.
this.addAbility(new BlueManaAbility()); this.addAbility(new BlueManaAbility());
// {T}: Add {W}.
this.addAbility(new WhiteManaAbility()); this.addAbility(new WhiteManaAbility());
} }

View file

@ -1,37 +1,43 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.Condition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.BlueManaAbility;
import mage.abilities.mana.WhiteManaAbility; import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.filter.StaticFilters; import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID;
/** /**
*
* @author maurer.it_at_gmail.com * @author maurer.it_at_gmail.com
*/ */
public final class SeachromeCoast extends CardImpl { public final class SeachromeCoast extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent("other lands");
static {
filter.add(AnotherPredicate.instance);
}
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_LESS, 2);
public SeachromeCoast(UUID ownerId, CardSetInfo setInfo) { public SeachromeCoast(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, null); super(ownerId, setInfo, new CardType[]{CardType.LAND}, null);
// Seachrome Coast enters the battlefield tapped unless you control two or fewer other lands. // Seachrome Coast enters the battlefield tapped unless you control two or fewer other lands.
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_LANDS, ComparisonType.FEWER_THAN, 3)); this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
String abilityText = " tapped unless you control two or fewer other lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
// {T}: Add {W} or {U}. // {T}: Add {W}.
this.addAbility(new WhiteManaAbility()); this.addAbility(new WhiteManaAbility());
// {T}: Add {U}.
this.addAbility(new BlueManaAbility()); this.addAbility(new BlueManaAbility());
} }

View file

@ -1,17 +1,15 @@
package mage.cards.s; package mage.cards.s;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlackManaAbility; import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.WhiteManaAbility; import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.filter.StaticFilters; import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID; import java.util.UUID;
@ -20,21 +18,25 @@ import java.util.UUID;
*/ */
public final class ShatteredSanctum extends CardImpl { public final class ShatteredSanctum extends CardImpl {
private static final Condition condition = new PermanentsOnTheBattlefieldCondition( private static final FilterLandPermanent filter = new FilterLandPermanent("other lands");
StaticFilters.FILTER_LANDS, ComparisonType.FEWER_THAN, 2
); static {
filter.add(AnotherPredicate.instance);
}
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_GREATER, 2);
public ShatteredSanctum(UUID ownerId, CardSetInfo setInfo) { public ShatteredSanctum(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Shattered Sanctum enters the battlefield tapped unless you control two or more other lands. // Shattered Sanctum enters the battlefield tapped unless you control two or more other lands.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new ConditionalOneShotEffect(new TapSourceEffect(), condition),
"tapped unless you control two or more other lands"
));
// {T}: Add {W} or {B}. // {T}: Add {W}.
this.addAbility(new WhiteManaAbility()); this.addAbility(new WhiteManaAbility());
// {T}: Add {B}.
this.addAbility(new BlackManaAbility()); this.addAbility(new BlackManaAbility());
} }

View file

@ -1,15 +1,12 @@
package mage.cards.s; package mage.cards.s;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.DeliriumCondition; import mage.abilities.condition.common.DeliriumCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalActivatedAbility; import mage.abilities.decorator.ConditionalActivatedAbility;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.hint.common.CardTypesInGraveyardHint; import mage.abilities.hint.common.CardTypesInGraveyardHint;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import mage.cards.Card; import mage.cards.Card;
@ -34,8 +31,7 @@ import java.util.UUID;
public final class ShiftingWoodland extends CardImpl { public final class ShiftingWoodland extends CardImpl {
private static final FilterPermanent filter = new FilterControlledPermanent(SubType.FOREST); private static final FilterPermanent filter = new FilterControlledPermanent(SubType.FOREST);
private static final Condition condition private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.EQUAL_TO, 0);
private static final FilterCard filterCard = new FilterPermanentCard("permanent card in your graveyard"); private static final FilterCard filterCard = new FilterPermanentCard("permanent card in your graveyard");
@ -43,9 +39,7 @@ public final class ShiftingWoodland extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Shifting Woodland enters the battlefield tapped unless you control a Forest. // Shifting Woodland enters the battlefield tapped unless you control a Forest.
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new TapSourceEffect(), condition
), "tapped unless you control a Forest"));
// {T}: Add {G}. // {T}: Add {G}.
this.addAbility(new GreenManaAbility()); this.addAbility(new GreenManaAbility());

View file

@ -1,17 +1,15 @@
package mage.cards.s; package mage.cards.s;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlackManaAbility; import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.BlueManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.filter.StaticFilters; import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID; import java.util.UUID;
@ -20,21 +18,25 @@ import java.util.UUID;
*/ */
public final class ShipwreckMarsh extends CardImpl { public final class ShipwreckMarsh extends CardImpl {
private static final Condition condition = new PermanentsOnTheBattlefieldCondition( private static final FilterLandPermanent filter = new FilterLandPermanent("other lands");
StaticFilters.FILTER_LANDS, ComparisonType.FEWER_THAN, 2
); static {
filter.add(AnotherPredicate.instance);
}
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_GREATER, 2);
public ShipwreckMarsh(UUID ownerId, CardSetInfo setInfo) { public ShipwreckMarsh(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Shipwreck Marsh enters the battlefield tapped unless you control two or more other lands. // Shipwreck Marsh enters the battlefield tapped unless you control two or more other lands.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new ConditionalOneShotEffect(new TapSourceEffect(), condition),
"tapped unless you control two or more other lands"
));
// {T}: Add {U} or {B}. // {T}: Add {U}.
this.addAbility(new BlueManaAbility()); this.addAbility(new BlueManaAbility());
// {T}: Add {B}.
this.addAbility(new BlackManaAbility()); this.addAbility(new BlackManaAbility());
} }

View file

@ -1,45 +1,46 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.Condition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlackManaAbility; import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.RedManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.constants.SubType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.filter.common.FilterLandPermanent; import mage.filter.common.FilterLandPermanent;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class SmolderingMarsh extends CardImpl { public final class SmolderingMarsh extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent(); private static final FilterLandPermanent filter = new FilterLandPermanent("basic lands");
static { static {
filter.add(SuperType.BASIC.getPredicate()); filter.add(SuperType.BASIC.getPredicate());
} }
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_GREATER, 2);
public SmolderingMarsh(UUID ownerId, CardSetInfo setInfo) { public SmolderingMarsh(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.LAND},""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
this.subtype.add(SubType.SWAMP); this.subtype.add(SubType.SWAMP);
this.subtype.add(SubType.MOUNTAIN); this.subtype.add(SubType.MOUNTAIN);
// Smoldering Marsh enters the battlefield tapped unless you control two or more basic lands. // Smoldering Marsh enters the battlefield tapped unless you control two or more basic lands.
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 1)); this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
String abilityText = "tapped unless you control two or more basic lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); // {T}: Add {B}.
this.addAbility(new BlackManaAbility()); this.addAbility(new BlackManaAbility());
// {T}: Add {R}.
this.addAbility(new RedManaAbility()); this.addAbility(new RedManaAbility());
} }

View file

@ -1,9 +1,7 @@
package mage.cards.s; package mage.cards.s;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.common.OneOpponentCondition; import mage.abilities.condition.common.TwoOrMoreOpponentsCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.RedManaAbility;
import mage.abilities.mana.WhiteManaAbility; import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -21,16 +19,12 @@ public final class SpectatorSeating extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Spectator Seating enters the battlefield tapped unless you have two or more opponents. // Spectator Seating enters the battlefield tapped unless you have two or more opponents.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(TwoOrMoreOpponentsCondition.instance));
new ConditionalOneShotEffect(
new TapSourceEffect(),
OneOpponentCondition.instance,
"tapped unless you have two or more opponents"
), "tapped unless you have two or more opponents"
));
// {T}: Add {R} or {W}. // {T}: Add {R}.
this.addAbility(new RedManaAbility()); this.addAbility(new RedManaAbility());
// {T}: Add {W}.
this.addAbility(new WhiteManaAbility()); this.addAbility(new WhiteManaAbility());
} }

View file

@ -1,19 +1,17 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.common.TwoOrMoreOpponentsCondition;
import mage.abilities.condition.common.OneOpponentCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.RedManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import java.util.UUID;
/** /**
*
* @author TheElk801 * @author TheElk801
*/ */
public final class SpireGarden extends CardImpl { public final class SpireGarden extends CardImpl {
@ -22,16 +20,12 @@ public final class SpireGarden extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Spire Garden enters the battlefield tapped unless you have two or more opponents. // Spire Garden enters the battlefield tapped unless you have two or more opponents.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(TwoOrMoreOpponentsCondition.instance));
new ConditionalOneShotEffect(
new TapSourceEffect(),
OneOpponentCondition.instance,
"tapped unless you have two or more opponents"
), "tapped unless you have two or more opponents"
));
// {T}: Add {R} or {G}. // {T}: Add {R}.
this.addAbility(new RedManaAbility()); this.addAbility(new RedManaAbility());
// {T}: Add {G}.
this.addAbility(new GreenManaAbility()); this.addAbility(new GreenManaAbility());
} }

View file

@ -1,37 +1,43 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.Condition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.BlueManaAbility;
import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.RedManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.filter.StaticFilters; import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class SpirebluffCanal extends CardImpl { public final class SpirebluffCanal extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent("other lands");
static {
filter.add(AnotherPredicate.instance);
}
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_LESS, 2);
public SpirebluffCanal(UUID ownerId, CardSetInfo setInfo) { public SpirebluffCanal(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Spirebluff Canal enters the battlefield tapped unless you control two or fewer other lands. // Spirebluff Canal enters the battlefield tapped unless you control two or fewer other lands.
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_LANDS, ComparisonType.FEWER_THAN, 3)); this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
String abilityText = " tapped unless you control two or fewer other lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
// {T}: Add {U} or {R}. // {T}: Add {U}.
this.addAbility(new BlueManaAbility()); this.addAbility(new BlueManaAbility());
// {T}: Add {R}.
this.addAbility(new RedManaAbility()); this.addAbility(new RedManaAbility());
} }

View file

@ -1,23 +1,18 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.dynamicvalue.common.CreaturesDiedThisTurnCount; import mage.abilities.dynamicvalue.common.CreaturesDiedThisTurnCount;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.effects.keyword.ConniveSourceEffect; import mage.abilities.effects.keyword.ConniveSourceEffect;
import mage.abilities.mana.BlackManaAbility; import mage.abilities.mana.BlackManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
@ -26,22 +21,21 @@ import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetControlledCreaturePermanent;
import java.util.UUID;
/** /**
*
* @author grimreap124 * @author grimreap124
*/ */
public final class SpymastersVault extends CardImpl { public final class SpymastersVault extends CardImpl {
private static final FilterPermanent filter = new FilterControlledPermanent(SubType.SWAMP); private static final FilterPermanent filter = new FilterControlledPermanent(SubType.SWAMP);
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.EQUAL_TO, private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
0);
public SpymastersVault(UUID ownerId, CardSetInfo setInfo) { public SpymastersVault(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[] { CardType.LAND }, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Spymaster's Vault enters the battlefield tapped unless you control a Swamp. // Spymaster's Vault enters the battlefield tapped unless you control a Swamp.
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new TapSourceEffect(), condition), "tapped unless you control a Swamp"));
// {T}: Add {B}. // {T}: Add {B}.
this.addAbility(new BlackManaAbility()); this.addAbility(new BlackManaAbility());

View file

@ -1,17 +1,15 @@
package mage.cards.s; package mage.cards.s;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.BlueManaAbility;
import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.RedManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.filter.StaticFilters; import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID; import java.util.UUID;
@ -20,21 +18,25 @@ import java.util.UUID;
*/ */
public final class StormcarvedCoast extends CardImpl { public final class StormcarvedCoast extends CardImpl {
private static final Condition condition = new PermanentsOnTheBattlefieldCondition( private static final FilterLandPermanent filter = new FilterLandPermanent("other lands");
StaticFilters.FILTER_LANDS, ComparisonType.FEWER_THAN, 2
); static {
filter.add(AnotherPredicate.instance);
}
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_GREATER, 2);
public StormcarvedCoast(UUID ownerId, CardSetInfo setInfo) { public StormcarvedCoast(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Stormcarved Coast enters the battlefield tapped unless you control two or more other lands. // Stormcarved Coast enters the battlefield tapped unless you control two or more other lands.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new ConditionalOneShotEffect(new TapSourceEffect(), condition),
"tapped unless you control two or more other lands"
));
// {T}: Add {U} or {R}. // {T}: Add {U}.
this.addAbility(new BlueManaAbility()); this.addAbility(new BlueManaAbility());
// {T}: Add {R}.
this.addAbility(new RedManaAbility()); this.addAbility(new RedManaAbility());
} }

View file

@ -2,12 +2,8 @@
package mage.cards.s; package mage.cards.s;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.BlueManaAbility;
import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.RedManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -24,19 +20,24 @@ import java.util.UUID;
*/ */
public final class SulfurFalls extends CardImpl { public final class SulfurFalls extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent(); private static final FilterLandPermanent filter = new FilterLandPermanent("an Island or a Mountain");
static { static {
filter.add(Predicates.or(SubType.ISLAND.getPredicate(), SubType.MOUNTAIN.getPredicate())); filter.add(Predicates.or(SubType.ISLAND.getPredicate(), SubType.MOUNTAIN.getPredicate()));
} }
public SulfurFalls(UUID ownerId, CardSetInfo setInfo) { private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
super(ownerId,setInfo,new CardType[]{CardType.LAND},null);
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(filter)); public SulfurFalls(UUID ownerId, CardSetInfo setInfo) {
String abilityText = " tapped unless you control an Island or a Mountain"; super(ownerId, setInfo, new CardType[]{CardType.LAND}, null);
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
// Sulfur Falls enters the battlefield tapped unless you control an Island or a Mountain.
this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
// {T}: Add {U}.
this.addAbility(new BlueManaAbility()); this.addAbility(new BlueManaAbility());
// {T}: Add {R}.
this.addAbility(new RedManaAbility()); this.addAbility(new RedManaAbility());
} }

View file

@ -1,17 +1,15 @@
package mage.cards.s; package mage.cards.s;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.RedManaAbility;
import mage.abilities.mana.WhiteManaAbility; import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.filter.StaticFilters; import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID; import java.util.UUID;
@ -20,21 +18,25 @@ import java.util.UUID;
*/ */
public final class SundownPass extends CardImpl { public final class SundownPass extends CardImpl {
private static final Condition condition = new PermanentsOnTheBattlefieldCondition( private static final FilterLandPermanent filter = new FilterLandPermanent("other lands");
StaticFilters.FILTER_LANDS, ComparisonType.FEWER_THAN, 2
); static {
filter.add(AnotherPredicate.instance);
}
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_GREATER, 2);
public SundownPass(UUID ownerId, CardSetInfo setInfo) { public SundownPass(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Sundown Pass enters the battlefield tapped unless you control two or more other lands. // Sundown Pass enters the battlefield tapped unless you control two or more other lands.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new ConditionalOneShotEffect(new TapSourceEffect(), condition),
"tapped unless you control two or more other lands"
));
// {T}: Add {R} or {W}. // {T}: Add {R}.
this.addAbility(new RedManaAbility()); this.addAbility(new RedManaAbility());
// {T}: Add {W}.
this.addAbility(new WhiteManaAbility()); this.addAbility(new WhiteManaAbility());
} }

View file

@ -1,45 +1,46 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.Condition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlackManaAbility; import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.BlueManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.constants.SubType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.filter.common.FilterLandPermanent; import mage.filter.common.FilterLandPermanent;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class SunkenHollow extends CardImpl { public final class SunkenHollow extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent(); private static final FilterLandPermanent filter = new FilterLandPermanent("basic lands");
static { static {
filter.add(SuperType.BASIC.getPredicate()); filter.add(SuperType.BASIC.getPredicate());
} }
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_GREATER, 2);
public SunkenHollow(UUID ownerId, CardSetInfo setInfo) { public SunkenHollow(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.LAND},""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
this.subtype.add(SubType.ISLAND); this.subtype.add(SubType.ISLAND);
this.subtype.add(SubType.SWAMP); this.subtype.add(SubType.SWAMP);
// Sunken Hollow enters the battlefield tapped unless you control two or more basic lands. // Sunken Hollow enters the battlefield tapped unless you control two or more basic lands.
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 1)); this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
String abilityText = "tapped unless you control two or more basic lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); // {T}: Add {U}.
this.addAbility(new BlueManaAbility()); this.addAbility(new BlueManaAbility());
// {T}: Add {B}.
this.addAbility(new BlackManaAbility()); this.addAbility(new BlackManaAbility());
} }

View file

@ -1,12 +1,8 @@
package mage.cards.s; package mage.cards.s;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import mage.abilities.mana.WhiteManaAbility; import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -19,24 +15,28 @@ import mage.filter.predicate.Predicates;
import java.util.UUID; import java.util.UUID;
/** /**
*
* @author BetaSteward_at_googlemail.com * @author BetaSteward_at_googlemail.com
*/ */
public final class SunpetalGrove extends CardImpl { public final class SunpetalGrove extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent(); private static final FilterLandPermanent filter = new FilterLandPermanent("a Forest or a Plains");
static { static {
filter.add(Predicates.or(SubType.FOREST.getPredicate(), SubType.PLAINS.getPredicate())); filter.add(Predicates.or(SubType.FOREST.getPredicate(), SubType.PLAINS.getPredicate()));
} }
private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
public SunpetalGrove(UUID ownerId, CardSetInfo setInfo) { public SunpetalGrove(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, null); super(ownerId, setInfo, new CardType[]{CardType.LAND}, null);
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(filter)); // Sunpetal Grove enters the battlefield tapped unless you control a Forest or a Plains.
String abilityText = " tapped unless you control a Forest or a Plains"; this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
// {T}: Add {G}.
this.addAbility(new GreenManaAbility()); this.addAbility(new GreenManaAbility());
// {T}: Add {W}.
this.addAbility(new WhiteManaAbility()); this.addAbility(new WhiteManaAbility());
} }

View file

@ -1,7 +1,5 @@
package mage.cards.t; package mage.cards.t;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.AsEntersBattlefieldAbility; import mage.abilities.common.AsEntersBattlefieldAbility;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
@ -23,8 +21,9 @@ import mage.game.permanent.Permanent;
import mage.players.Player; import mage.players.Player;
import mage.target.common.TargetCardInHand; import mage.target.common.TargetCardInHand;
import java.util.UUID;
/** /**
*
* @author weirddan455 * @author weirddan455
*/ */
public final class TempleOfTheDragonQueen extends CardImpl { public final class TempleOfTheDragonQueen extends CardImpl {
@ -110,6 +109,7 @@ class TempleOfTheDragonQueenEffect extends OneShotEffect {
} }
} }
if (entersTapped) { if (entersTapped) {
// Intentional use of Permanent::setTapped, to not cause any trigger
land.setTapped(true); land.setTapped(true);
return true; return true;
} }

View file

@ -1,24 +1,17 @@
package mage.cards.t; package mage.cards.t;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.common.TapTargetCost; import mage.abilities.costs.common.TapTargetCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.hint.ConditionHint;
import mage.abilities.hint.Hint;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
@ -33,15 +26,13 @@ import java.util.UUID;
*/ */
public final class TheShire extends CardImpl { public final class TheShire extends CardImpl {
private static final FilterPermanent filter = new FilterControlledCreaturePermanent(); private static final FilterPermanent filter = new FilterControlledCreaturePermanent("a legendary creature");
static { static {
filter.add(SuperType.LEGENDARY.getPredicate()); filter.add(SuperType.LEGENDARY.getPredicate());
} }
private static final Condition condition private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.EQUAL_TO, 0);
private static final Hint hint = new ConditionHint( new InvertCondition(condition), "You control a legendary creature");
public TheShire(UUID ownerId, CardSetInfo setInfo) { public TheShire(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
@ -49,10 +40,7 @@ public final class TheShire extends CardImpl {
this.supertype.add(SuperType.LEGENDARY); this.supertype.add(SuperType.LEGENDARY);
// The Shire enters the battlefield tapped unless you control a legendary creature. // The Shire enters the battlefield tapped unless you control a legendary creature.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new ConditionalOneShotEffect(new TapSourceEffect(), condition, ""),
"tapped unless you control a legendary creature"
).addHint(hint));
// {T}: Add {G}. // {T}: Add {G}.
this.addAbility(new GreenManaAbility()); this.addAbility(new GreenManaAbility());

View file

@ -2,16 +2,12 @@ package mage.cards.t;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.AsEntersBattlefieldAbility; import mage.abilities.common.AsEntersBattlefieldAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.PayLifeCost; import mage.abilities.costs.common.PayLifeCost;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.effects.ContinuousEffectImpl;
import mage.abilities.effects.common.ChooseBasicLandTypeEffect; import mage.abilities.effects.common.ChooseBasicLandTypeEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.effects.common.continuous.AddChosenSubtypeEffect; import mage.abilities.effects.common.continuous.AddChosenSubtypeEffect;
import mage.abilities.effects.common.cost.CostModificationEffectImpl; import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.abilities.effects.common.enterAttribute.EnterAttributeAddChosenSubtypeEffect; import mage.abilities.effects.common.enterAttribute.EnterAttributeAddChosenSubtypeEffect;
@ -20,6 +16,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.common.FilterLandPermanent; import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
@ -32,15 +29,22 @@ import java.util.UUID;
*/ */
public class ThranPortal extends CardImpl { public class ThranPortal extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent("other lands");
static {
filter.add(AnotherPredicate.instance);
}
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_LESS, 2);
public ThranPortal(UUID ownerId, CardSetInfo setInfo) { public ThranPortal(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
addSubType(SubType.GATE); addSubType(SubType.GATE);
// Thran Portal enters the battlefield tapped unless you control two or fewer other lands. // Thran Portal enters the battlefield tapped unless you control two or fewer other lands.
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(new FilterLandPermanent(), ComparisonType.FEWER_THAN, 3)); this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
String abilityText = " tapped unless you control two or fewer other lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
// As Thran Portal enters the battlefield, choose a basic land type. // As Thran Portal enters the battlefield, choose a basic land type.
// Thran Portal is the chosen type in addition to its other types. // Thran Portal is the chosen type in addition to its other types.

View file

@ -1,9 +1,7 @@
package mage.cards.t; package mage.cards.t;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.common.OneOpponentCondition; import mage.abilities.condition.common.TwoOrMoreOpponentsCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.BlueManaAbility;
import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.RedManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -21,16 +19,12 @@ public final class TrainingCenter extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Training Center enters the battlefield tapped unless you have two or more opponents. // Training Center enters the battlefield tapped unless you have two or more opponents.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(TwoOrMoreOpponentsCondition.instance));
new ConditionalOneShotEffect(
new TapSourceEffect(),
OneOpponentCondition.instance,
"tapped unless you have two or more opponents"
), "tapped unless you have two or more opponents"
));
// {T}: Add {U} or {R}. // {T}: Add {U}.
this.addAbility(new BlueManaAbility()); this.addAbility(new BlueManaAbility());
// {T}: Add {R}.
this.addAbility(new RedManaAbility()); this.addAbility(new RedManaAbility());
} }

View file

@ -1,9 +1,7 @@
package mage.cards.u; package mage.cards.u;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.common.OneOpponentCondition; import mage.abilities.condition.common.TwoOrMoreOpponentsCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlackManaAbility; import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -21,16 +19,12 @@ public final class UndergrowthStadium extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Undergrowth Stadium enters the battlefield tapped unless you have two or more opponents. // Undergrowth Stadium enters the battlefield tapped unless you have two or more opponents.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(TwoOrMoreOpponentsCondition.instance));
new ConditionalOneShotEffect(
new TapSourceEffect(),
OneOpponentCondition.instance,
"tapped unless you have two or more opponents"
), "tapped unless you have two or more opponents"
));
// {T}: Add {B} or {G}. // {T}: Add {B}.
this.addAbility(new BlackManaAbility()); this.addAbility(new BlackManaAbility());
// {T}: Add {G}.
this.addAbility(new GreenManaAbility()); this.addAbility(new GreenManaAbility());
} }

View file

@ -1,9 +1,7 @@
package mage.cards.v; package mage.cards.v;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.common.OneOpponentCondition; import mage.abilities.condition.common.TwoOrMoreOpponentsCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlackManaAbility; import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.WhiteManaAbility; import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -21,16 +19,12 @@ public final class VaultOfChampions extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Vault of Champions enters the battlefield tapped unless you have two or more opponents. // Vault of Champions enters the battlefield tapped unless you have two or more opponents.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(TwoOrMoreOpponentsCondition.instance));
new ConditionalOneShotEffect(
new TapSourceEffect(),
OneOpponentCondition.instance,
"tapped unless you have two or more opponents"
), "tapped unless you have two or more opponents"
));
// {T}: Add {W} or {B}. // {T}: Add {W}.
this.addAbility(new WhiteManaAbility()); this.addAbility(new WhiteManaAbility());
// {T}: Add {B}.
this.addAbility(new BlackManaAbility()); this.addAbility(new BlackManaAbility());
} }

View file

@ -1,13 +1,10 @@
package mage.cards.w; package mage.cards.w;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldUntappedTriggeredAbility; import mage.abilities.common.EntersBattlefieldUntappedTriggeredAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.PutOnLibraryTargetEffect; import mage.abilities.effects.common.PutOnLibraryTargetEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlackManaAbility; import mage.abilities.mana.BlackManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -28,14 +25,14 @@ import java.util.UUID;
public final class WitchsCottage extends CardImpl { public final class WitchsCottage extends CardImpl {
private static final FilterPermanent filter private static final FilterPermanent filter
= new FilterControlledPermanent(SubType.SWAMP); = new FilterControlledPermanent(SubType.SWAMP, "other Swamps");
static { static {
filter.add(AnotherPredicate.instance); filter.add(AnotherPredicate.instance);
} }
private static final Condition condition private static final YouControlPermanentCondition condition
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.FEWER_THAN, 3); = new YouControlPermanentCondition(filter, ComparisonType.OR_GREATER, 3);
public WitchsCottage(UUID ownerId, CardSetInfo setInfo) { public WitchsCottage(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
@ -46,10 +43,7 @@ public final class WitchsCottage extends CardImpl {
this.addAbility(new BlackManaAbility()); this.addAbility(new BlackManaAbility());
// Witch's Cottage enters the battlefield tapped unless you control three or more other Swamps. // Witch's Cottage enters the battlefield tapped unless you control three or more other Swamps.
this.addAbility(new EntersBattlefieldAbility( this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
new ConditionalOneShotEffect(new TapSourceEffect(), condition),
"tapped unless you control three or more other Swamps"
));
// When Witch's Cottage enters the battlefield untapped, you may put target creature card from your graveyard on top of your library. // When Witch's Cottage enters the battlefield untapped, you may put target creature card from your graveyard on top of your library.
Ability ability = new EntersBattlefieldUntappedTriggeredAbility( Ability ability = new EntersBattlefieldUntappedTriggeredAbility(

View file

@ -1,12 +1,8 @@
package mage.cards.w; package mage.cards.w;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlackManaAbility; import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -23,19 +19,24 @@ import java.util.UUID;
*/ */
public final class WoodlandCemetery extends CardImpl { public final class WoodlandCemetery extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent(); private static final FilterLandPermanent filter = new FilterLandPermanent("a Swamp or a Forest");
static { static {
filter.add(Predicates.or(SubType.FOREST.getPredicate(), SubType.SWAMP.getPredicate())); filter.add(Predicates.or(SubType.SWAMP.getPredicate(), SubType.FOREST.getPredicate()));
} }
private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
public WoodlandCemetery(UUID ownerId, CardSetInfo setInfo) { public WoodlandCemetery(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, null); super(ownerId, setInfo, new CardType[]{CardType.LAND}, null);
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(filter)); // Woodland Cemetery enters the battlefield tapped unless you control a Swamp or a Forest.
String abilityText = " tapped unless you control a Swamp or a Forest"; this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
// {T}: Add {B}.
this.addAbility(new BlackManaAbility()); this.addAbility(new BlackManaAbility());
// {T}: Add {G}.
this.addAbility(new GreenManaAbility()); this.addAbility(new GreenManaAbility());
} }

View file

@ -0,0 +1,258 @@
package org.mage.test.cards.replacement.entersBattlefield;
import mage.constants.PhaseStep;
import mage.constants.Zone;
import org.junit.Test;
import org.mage.test.serverside.base.CardTestPlayerBase;
/**
* @author Susucr
*/
public class EntersTheBattlefieldTappedUnlessTest extends CardTestPlayerBase {
/**
* Deathcap Glade enters the battlefield tapped unless you control two or more other lands.
*/
private static final String glade = "Deathcap Glade";
@Test
public void test_SlowLand_NotMet() {
setStrictChooseMode(true);
addCard(Zone.HAND, playerA, glade);
addCard(Zone.BATTLEFIELD, playerA, "Forest", 1);
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, glade);
setStopAt(1, PhaseStep.BEGIN_COMBAT);
execute();
assertTapped(glade, true);
}
@Test
public void test_SlowLand_Met() {
setStrictChooseMode(true);
addCard(Zone.HAND, playerA, glade);
addCard(Zone.BATTLEFIELD, playerA, "Forest", 2);
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, glade);
setStopAt(1, PhaseStep.BEGIN_COMBAT);
execute();
assertTapped(glade, false);
}
/**
* Blackcleave Cliffs enters the battlefield tapped unless you control two or fewer other lands.
*/
private static final String cliffs = "Blackcleave Cliffs";
@Test
public void test_FastLand_NotMet() {
setStrictChooseMode(true);
addCard(Zone.HAND, playerA, cliffs);
addCard(Zone.BATTLEFIELD, playerA, "Forest", 3);
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, cliffs);
setStopAt(1, PhaseStep.BEGIN_COMBAT);
execute();
assertTapped(cliffs, true);
}
@Test
public void test_FastLand_Met() {
setStrictChooseMode(true);
addCard(Zone.HAND, playerA, cliffs);
addCard(Zone.BATTLEFIELD, playerA, "Forest", 2);
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, cliffs);
setStopAt(1, PhaseStep.BEGIN_COMBAT);
execute();
assertTapped(cliffs, false);
}
/**
* Castle Ardenvale enters the battlefield tapped unless you control a Plains.
*/
private static final String castle = "Castle Ardenvale";
@Test
public void test_Castle_NotMet() {
setStrictChooseMode(true);
addCard(Zone.HAND, playerA, castle);
addCard(Zone.BATTLEFIELD, playerA, "Forest", 1);
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, castle);
setStopAt(1, PhaseStep.BEGIN_COMBAT);
execute();
assertTapped(castle, true);
}
@Test
public void test_Castle_Met() {
setStrictChooseMode(true);
addCard(Zone.HAND, playerA, castle);
addCard(Zone.BATTLEFIELD, playerA, "Plains", 1);
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, castle);
setStopAt(1, PhaseStep.BEGIN_COMBAT);
execute();
assertTapped(castle, false);
}
/**
* Canopy Vista enters the battlefield tapped unless you control two or more basic lands.
*/
private static final String vista = "Canopy Vista";
@Test
public void test_Tango_NotMet() {
setStrictChooseMode(true);
addCard(Zone.HAND, playerA, vista);
addCard(Zone.BATTLEFIELD, playerA, "Forest", 1);
addCard(Zone.BATTLEFIELD, playerA, "Tropical Island", 1);
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, vista);
setStopAt(1, PhaseStep.BEGIN_COMBAT);
execute();
assertTapped(vista, true);
}
@Test
public void test_Tango_Met() {
setStrictChooseMode(true);
addCard(Zone.HAND, playerA, vista);
addCard(Zone.BATTLEFIELD, playerA, "Plains", 2);
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, vista);
setStopAt(1, PhaseStep.BEGIN_COMBAT);
execute();
assertTapped(vista, false);
}
/**
* Clifftop Retreat enters the battlefield tapped unless you control a Mountain or a Plains.
*/
private static final String retreat = "Clifftop Retreat";
@Test
public void test_CheckLand_NotMet() {
setStrictChooseMode(true);
addCard(Zone.HAND, playerA, retreat);
addCard(Zone.BATTLEFIELD, playerA, "Forest", 1);
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, retreat);
setStopAt(1, PhaseStep.BEGIN_COMBAT);
execute();
assertTapped(retreat, true);
}
@Test
public void test_CheckLand_Met() {
setStrictChooseMode(true);
addCard(Zone.HAND, playerA, retreat);
addCard(Zone.BATTLEFIELD, playerA, "Scrubland", 1);
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, retreat);
setStopAt(1, PhaseStep.BEGIN_COMBAT);
execute();
assertTapped(retreat, false);
}
/**
* Dwarven Mine enters the battlefield tapped unless you control three or more other Mountains.
*/
private static final String mine = "Dwarven Mine";
@Test
public void test_EldraineAdamantLands_NotMet() {
setStrictChooseMode(true);
addCard(Zone.HAND, playerA, mine);
addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2);
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, mine);
setStopAt(1, PhaseStep.BEGIN_COMBAT);
execute();
assertTapped(mine, true);
}
@Test
public void test_EldraineAdamantLands_Met() {
setStrictChooseMode(true);
addCard(Zone.HAND, playerA, mine);
addCard(Zone.BATTLEFIELD, playerA, "Mountain", 3);
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, mine);
setStopAt(1, PhaseStep.BEGIN_COMBAT);
execute();
assertTapped(mine, false);
}
/**
* Barad-dûr enters the battlefield tapped unless you control a legendary creature.
*/
private static final String barad = "Barad-dur";
@Test
public void test_LTRLegendary_NotMet() {
setStrictChooseMode(true);
addCard(Zone.HAND, playerA, barad);
addCard(Zone.BATTLEFIELD, playerA, "Memnite");
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, barad);
setStopAt(1, PhaseStep.BEGIN_COMBAT);
execute();
assertTapped(barad, true);
}
@Test
public void test_LTRLegendary_Met() {
setStrictChooseMode(true);
addCard(Zone.HAND, playerA, barad);
addCard(Zone.BATTLEFIELD, playerA, "Six");
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, barad);
setStopAt(1, PhaseStep.BEGIN_COMBAT);
execute();
assertTapped(barad, false);
}
}

View file

@ -0,0 +1,32 @@
package mage.abilities.common;
import mage.abilities.condition.Condition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
/**
* @author Susucr
*/
public class EntersBattlefieldTappedUnlessAbility extends EntersBattlefieldAbility {
public EntersBattlefieldTappedUnlessAbility(Condition condition) {
this(condition, condition.toString());
}
public EntersBattlefieldTappedUnlessAbility(Condition condition, String conditionText) {
super(
new ConditionalOneShotEffect(null, new TapSourceEffect(true), condition, null),
"tapped unless " + conditionText
);
}
private EntersBattlefieldTappedUnlessAbility(final EntersBattlefieldTappedUnlessAbility ability) {
super(ability);
}
@Override
public EntersBattlefieldTappedUnlessAbility copy() {
return new EntersBattlefieldTappedUnlessAbility(this);
}
}

View file

@ -6,7 +6,7 @@ import mage.abilities.condition.Condition;
import mage.game.Game; import mage.game.Game;
public enum MyTurnCondition implements Condition { public enum MyTurnCondition implements Condition {
instance; instance;
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
@ -15,6 +15,6 @@ public enum MyTurnCondition implements Condition {
@Override @Override
public String toString() { public String toString() {
return "during your turn"; return "during your turn";
} }
} }

View file

@ -17,9 +17,9 @@ import mage.game.Game;
*/ */
public class PermanentsOnTheBattlefieldCondition implements Condition { public class PermanentsOnTheBattlefieldCondition implements Condition {
private final FilterPermanent filter; protected final FilterPermanent filter;
private final ComparisonType type; protected final ComparisonType type;
private final int count; protected final int count;
private final boolean onlyControlled; private final boolean onlyControlled;
/** /**

View file

@ -9,8 +9,7 @@ import java.util.Objects;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
public enum OneOpponentCondition implements Condition { public enum TwoOrMoreOpponentsCondition implements Condition {
instance; instance;
@Override @Override
@ -19,11 +18,11 @@ public enum OneOpponentCondition implements Condition {
.stream() .stream()
.map(game::getPlayer) .map(game::getPlayer)
.filter(Objects::nonNull) .filter(Objects::nonNull)
.count() <= 1; .count() >= 2;
} }
@Override @Override
public String toString() { public String toString() {
return "you have one opponent"; return "you have two or more opponents";
} }
} }

View file

@ -0,0 +1,59 @@
package mage.abilities.condition.common;
import mage.abilities.hint.ConditionHint;
import mage.abilities.hint.Hint;
import mage.constants.ComparisonType;
import mage.filter.FilterPermanent;
import mage.util.CardUtil;
/**
* PermanentsOnTheBattlefieldCondition with onlyControlled parameter at true
* Separate as it has a name closer to card's text, so easier to find.
*
* @author Susucr
*/
public class YouControlPermanentCondition extends PermanentsOnTheBattlefieldCondition {
public Hint getHint() {
return new ConditionHint(this);
}
public YouControlPermanentCondition(FilterPermanent filter) {
this(filter, ComparisonType.OR_GREATER, 1);
}
public YouControlPermanentCondition(FilterPermanent filter, ComparisonType comparisonType, int count) {
super(filter, comparisonType, count, true);
}
@Override
public String toString() {
String text = "you control ";
String filterText = filter.getMessage();
if (filterText.endsWith(" you control")) {
filterText = filterText.substring(0, filterText.length() - " you control".length());
}
switch (type) {
case OR_LESS:
text += CardUtil.numberToText(count) + " or fewer " + filterText;
break;
case OR_GREATER:
if (count == 1) {
text += CardUtil.addArticle(filterText);
} else {
text += CardUtil.numberToText(count) + " or more " + filterText;
}
break;
case EQUAL_TO:
if (count == 0) {
text += "no " + filterText;
} else {
text += "exactly " + CardUtil.numberToText(count) + " " + filterText;
}
break;
default:
throw new IllegalArgumentException("Wrong code usage: ComparisonType not handled in text generation: " + type);
}
return text;
}
}

View file

@ -5,6 +5,7 @@ import mage.abilities.Mode;
import mage.abilities.condition.Condition; import mage.abilities.condition.Condition;
import mage.abilities.effects.Effects; import mage.abilities.effects.Effects;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.constants.Outcome;
import mage.game.Game; import mage.game.Game;
import mage.util.CardUtil; import mage.util.CardUtil;
@ -27,8 +28,18 @@ public class ConditionalOneShotEffect extends OneShotEffect {
this(effect, null, condition, text); this(effect, null, condition, text);
} }
private static Outcome generateOutcome(OneShotEffect effect, OneShotEffect otherwiseEffect) {
if (effect != null) {
return effect.getOutcome();
}
if (otherwiseEffect != null) {
return Outcome.inverse(otherwiseEffect.getOutcome());
}
throw new IllegalArgumentException("Wrong code usage: ConditionalOneShot should start with an effect to generate Outcome.");
}
public ConditionalOneShotEffect(OneShotEffect effect, OneShotEffect otherwiseEffect, Condition condition, String text) { public ConditionalOneShotEffect(OneShotEffect effect, OneShotEffect otherwiseEffect, Condition condition, String text) {
super(effect.getOutcome()); super(generateOutcome(effect, otherwiseEffect));
if (effect != null) { if (effect != null) {
this.effects.add(effect); this.effects.add(effect);
} }