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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,13 +1,8 @@
package mage.cards.b;
import java.util.UUID;
import mage.abilities.common.EntersBattlefieldAbility;
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.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.GreenManaAbility;
import mage.cards.CardImpl;
@ -15,23 +10,33 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID;
/**
*
* @author fireshoes
*/
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) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// 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));
String abilityText = " tapped unless you control two or fewer other lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
// {T}: Add {B} or {G}.
// {T}: Add {B}.
this.addAbility(new BlackManaAbility());
// {T}: Add {G}.
this.addAbility(new GreenManaAbility());
}

View file

@ -1,13 +1,8 @@
package mage.cards.b;
import java.util.UUID;
import mage.abilities.common.EntersBattlefieldAbility;
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.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.mana.BlueManaAbility;
import mage.abilities.mana.GreenManaAbility;
import mage.cards.CardImpl;
@ -15,23 +10,34 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID;
/**
*
* @author fireshoes
*/
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) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// 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));
String abilityText = " tapped unless you control two or fewer other lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
// {T}: Add {G} or {U}.
// {T}: Add {G}.
this.addAbility(new GreenManaAbility());
// {T}: Add {U}.
this.addAbility(new BlueManaAbility());
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,45 +1,46 @@
package mage.cards.c;
import java.util.UUID;
import mage.abilities.common.EntersBattlefieldAbility;
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.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.mana.GreenManaAbility;
import mage.abilities.mana.RedManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.ComparisonType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.common.FilterLandPermanent;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public final class CinderGlade extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent();
private static final FilterLandPermanent filter = new FilterLandPermanent("basic lands");
static {
filter.add(SuperType.BASIC.getPredicate());
}
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_GREATER, 2);
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.FOREST);
// 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));
String abilityText = "tapped unless you control two or more basic lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
// {T}: Add {R}.
this.addAbility(new RedManaAbility());
// {T}: Add {G}.
this.addAbility(new GreenManaAbility());
}

View file

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

View file

@ -1,37 +1,43 @@
package mage.cards.c;
import java.util.UUID;
import mage.abilities.common.EntersBattlefieldAbility;
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.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
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
*/
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) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// 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));
String abilityText = " tapped unless you control two or fewer other lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
// {T}: Add {W}.
// {T}: Add {W} or {B}.this.addAbility(new BlackManaAbility());
this.addAbility(new WhiteManaAbility());
// {T}: Add {B}.
this.addAbility(new BlackManaAbility());
}

View file

@ -1,35 +1,43 @@
package mage.cards.c;
import java.util.UUID;
import mage.abilities.common.EntersBattlefieldAbility;
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.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.mana.GreenManaAbility;
import mage.abilities.mana.RedManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
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
*/
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) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, null);
// 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));
String abilityText = " tapped unless you control two or fewer other lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
// {T}: Add {R}.
this.addAbility(new RedManaAbility());
// {T}: Add {G}.
this.addAbility(new GreenManaAbility());
}

View file

@ -1,13 +1,8 @@
package mage.cards.d;
import java.util.UUID;
import mage.abilities.common.EntersBattlefieldAbility;
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.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.BlueManaAbility;
import mage.cards.CardImpl;
@ -17,27 +12,32 @@ import mage.constants.ComparisonType;
import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID;
/**
*
* @author maurer.it_at_gmail.com
*/
public final class DarkslickShores 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 DarkslickShores(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, null);
// 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));
String abilityText = " tapped unless you control two or fewer other lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
// {T}: Add {U}.
this.addAbility(new BlueManaAbility());
// {T}: Add {B}.
this.addAbility(new BlackManaAbility());
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,12 +1,10 @@
package mage.cards.h;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.condition.common.NotMyTurnCondition;
import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.common.MyTurnCondition;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.PutOnTopOrBottomLibraryTargetEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.keyword.FlashAbility;
import mage.abilities.keyword.WardAbility;
import mage.cards.AdventureCard;
@ -45,10 +43,7 @@ public final class HornedLochWhale extends AdventureCard {
this.addAbility(new WardAbility(new ManaCostsImpl<>("{2}"), false));
// Horned Loch-Whale enters the battlefield tapped unless it's your turn.
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(
new TapSourceEffect(true), NotMyTurnCondition.instance,
"tapped unless it's your turn"
)));
this.addAbility(new EntersBattlefieldTappedUnlessAbility(MyTurnCondition.instance, "it's your turn"));
// Lagoon Breach
// 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;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldUntappedTriggeredAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl;
@ -28,13 +25,14 @@ import java.util.UUID;
public final class IdyllicGrange extends CardImpl {
private static final FilterPermanent filter
= new FilterControlledPermanent(SubType.PLAINS);
= new FilterControlledPermanent(SubType.PLAINS, "other Plains");
static {
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) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
@ -45,10 +43,7 @@ public final class IdyllicGrange extends CardImpl {
this.addAbility(new WhiteManaAbility());
// Idyllic Grange enters the battlefield tapped unless you control three or more other Plains.
this.addAbility(new EntersBattlefieldAbility(
new ConditionalOneShotEffect(new TapSourceEffect(), condition),
"tapped unless you control three or more other Plains"
));
this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
// When Idyllic Grange enters the battlefield untapped, put a +1/+1 counter on target creature you control.
Ability ability = new EntersBattlefieldUntappedTriggeredAbility(

View file

@ -1,36 +1,43 @@
package mage.cards.i;
import java.util.UUID;
import mage.abilities.common.EntersBattlefieldAbility;
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.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.mana.RedManaAbility;
import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
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
*/
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) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// 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));
String abilityText = " tapped unless you control two or fewer other lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
// {T}: Add {R} or {W}.
// {T}: Add {R}.
this.addAbility(new RedManaAbility());
// {T}: Add {W}.
this.addAbility(new WhiteManaAbility());
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,45 +1,46 @@
package mage.cards.p;
import java.util.UUID;
import mage.abilities.common.EntersBattlefieldAbility;
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.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.mana.BlueManaAbility;
import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.ComparisonType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.common.FilterLandPermanent;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public final class PrairieStream extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent();
private static final FilterLandPermanent filter = new FilterLandPermanent("basic lands");
static {
filter.add(SuperType.BASIC.getPredicate());
}
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_GREATER, 2);
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.ISLAND);
// 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));
String abilityText = "tapped unless you control two or more basic lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
// {T}: Add {W}.
this.addAbility(new WhiteManaAbility());
// {T}: Add {U}.
this.addAbility(new BlueManaAbility());
}

View file

@ -1,35 +1,43 @@
package mage.cards.r;
import java.util.UUID;
import mage.abilities.common.EntersBattlefieldAbility;
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.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.mana.GreenManaAbility;
import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
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
*/
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) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, null);
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_LANDS, ComparisonType.FEWER_THAN, 3));
String abilityText = " tapped unless you control two or fewer other lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
// Razorverge Thicket enters the battlefield tapped unless you control two or fewer other lands.
this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
// {T}: Add {G}.
this.addAbility(new GreenManaAbility());
// {T}: Add {W}.
this.addAbility(new WhiteManaAbility());
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,37 +1,43 @@
package mage.cards.s;
import java.util.UUID;
import mage.abilities.common.EntersBattlefieldAbility;
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.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.mana.BlueManaAbility;
import mage.abilities.mana.WhiteManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
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
*/
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) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, null);
// 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));
String abilityText = " tapped unless you control two or fewer other lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
// {T}: Add {W} or {U}.
// {T}: Add {W}.
this.addAbility(new WhiteManaAbility());
// {T}: Add {U}.
this.addAbility(new BlueManaAbility());
}

View file

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

View file

@ -1,15 +1,12 @@
package mage.cards.s;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.condition.Condition;
import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
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.decorator.ConditionalActivatedAbility;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.hint.common.CardTypesInGraveyardHint;
import mage.abilities.mana.GreenManaAbility;
import mage.cards.Card;
@ -34,8 +31,7 @@ import java.util.UUID;
public final class ShiftingWoodland extends CardImpl {
private static final FilterPermanent filter = new FilterControlledPermanent(SubType.FOREST);
private static final Condition condition
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.EQUAL_TO, 0);
private static final YouControlPermanentCondition condition = new YouControlPermanentCondition(filter);
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}, "");
// Shifting Woodland enters the battlefield tapped unless you control a Forest.
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(
new TapSourceEffect(), condition
), "tapped unless you control a Forest"));
this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
// {T}: Add {G}.
this.addAbility(new GreenManaAbility());

View file

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

View file

@ -1,45 +1,46 @@
package mage.cards.s;
import java.util.UUID;
import mage.abilities.common.EntersBattlefieldAbility;
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.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.RedManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.ComparisonType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.common.FilterLandPermanent;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public final class SmolderingMarsh extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent();
private static final FilterLandPermanent filter = new FilterLandPermanent("basic lands");
static {
filter.add(SuperType.BASIC.getPredicate());
}
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_GREATER, 2);
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.MOUNTAIN);
// 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));
String abilityText = "tapped unless you control two or more basic lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
// {T}: Add {B}.
this.addAbility(new BlackManaAbility());
// {T}: Add {R}.
this.addAbility(new RedManaAbility());
}

View file

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

View file

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

View file

@ -1,37 +1,43 @@
package mage.cards.s;
import java.util.UUID;
import mage.abilities.common.EntersBattlefieldAbility;
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.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.mana.BlueManaAbility;
import mage.abilities.mana.RedManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
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
*/
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) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// 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));
String abilityText = " tapped unless you control two or fewer other lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
// {T}: Add {U} or {R}.
// {T}: Add {U}.
this.addAbility(new BlueManaAbility());
// {T}: Add {R}.
this.addAbility(new RedManaAbility());
}

View file

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

View file

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

View file

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

View file

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

View file

@ -1,45 +1,46 @@
package mage.cards.s;
import java.util.UUID;
import mage.abilities.common.EntersBattlefieldAbility;
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.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.BlueManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.ComparisonType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.common.FilterLandPermanent;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public final class SunkenHollow extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent();
private static final FilterLandPermanent filter = new FilterLandPermanent("basic lands");
static {
filter.add(SuperType.BASIC.getPredicate());
}
private static final YouControlPermanentCondition condition =
new YouControlPermanentCondition(filter, ComparisonType.OR_GREATER, 2);
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.SWAMP);
// 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));
String abilityText = "tapped unless you control two or more basic lands";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
// {T}: Add {U}.
this.addAbility(new BlueManaAbility());
// {T}: Add {B}.
this.addAbility(new BlackManaAbility());
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,13 +1,10 @@
package mage.cards.w;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.common.EntersBattlefieldUntappedTriggeredAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.effects.common.PutOnLibraryTargetEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.mana.BlackManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@ -28,14 +25,14 @@ import java.util.UUID;
public final class WitchsCottage extends CardImpl {
private static final FilterPermanent filter
= new FilterControlledPermanent(SubType.SWAMP);
= new FilterControlledPermanent(SubType.SWAMP, "other Swamps");
static {
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 WitchsCottage(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
@ -46,10 +43,7 @@ public final class WitchsCottage extends CardImpl {
this.addAbility(new BlackManaAbility());
// Witch's Cottage enters the battlefield tapped unless you control three or more other Swamps.
this.addAbility(new EntersBattlefieldAbility(
new ConditionalOneShotEffect(new TapSourceEffect(), condition),
"tapped unless you control three or more other Swamps"
));
this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
// 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(

View file

@ -1,12 +1,8 @@
package mage.cards.w;
import mage.abilities.common.EntersBattlefieldAbility;
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.common.EntersBattlefieldTappedUnlessAbility;
import mage.abilities.condition.common.YouControlPermanentCondition;
import mage.abilities.mana.BlackManaAbility;
import mage.abilities.mana.GreenManaAbility;
import mage.cards.CardImpl;
@ -23,19 +19,24 @@ import java.util.UUID;
*/
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 {
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) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, null);
Condition controls = new InvertCondition(new PermanentsOnTheBattlefieldCondition(filter));
String abilityText = " tapped unless you control a Swamp or a Forest";
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText));
// Woodland Cemetery enters the battlefield tapped unless you control a Swamp or a Forest.
this.addAbility(new EntersBattlefieldTappedUnlessAbility(condition).addHint(condition.getHint()));
// {T}: Add {B}.
this.addAbility(new BlackManaAbility());
// {T}: Add {G}.
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,15 +6,15 @@ import mage.abilities.condition.Condition;
import mage.game.Game;
public enum MyTurnCondition implements Condition {
instance;
instance;
@Override
public boolean apply(Game game, Ability source) {
return game.isActivePlayer(source.getControllerId());
}
@Override
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 {
private final FilterPermanent filter;
private final ComparisonType type;
private final int count;
protected final FilterPermanent filter;
protected final ComparisonType type;
protected final int count;
private final boolean onlyControlled;
/**

View file

@ -9,21 +9,20 @@ import java.util.Objects;
/**
* @author TheElk801
*/
public enum OneOpponentCondition implements Condition {
public enum TwoOrMoreOpponentsCondition implements Condition {
instance;
@Override
public boolean apply(Game game, Ability source) {
return game.getOpponents(source.getControllerId(), true)
.stream()
.map(game::getPlayer)
.filter(Objects::nonNull)
.count() <= 1;
.count() >= 2;
}
@Override
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.effects.Effects;
import mage.abilities.effects.OneShotEffect;
import mage.constants.Outcome;
import mage.game.Game;
import mage.util.CardUtil;
@ -27,8 +28,18 @@ public class ConditionalOneShotEffect extends OneShotEffect {
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) {
super(effect.getOutcome());
super(generateOutcome(effect, otherwiseEffect));
if (effect != null) {
this.effects.add(effect);
}