mirror of
https://github.com/correl/mage.git
synced 2024-12-26 11:09:27 +00:00
[HOU] added shared predicate class for Desert controlled or in graveyard
This commit is contained in:
parent
511b42a6ce
commit
313a19865a
10 changed files with 132 additions and 212 deletions
|
@ -1,13 +1,8 @@
|
||||||
|
|
||||||
package mage.cards.d;
|
package mage.cards.d;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.abilities.Ability;
|
|
||||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
import mage.abilities.condition.OrCondition;
|
import mage.abilities.condition.common.DesertControlledOrGraveyardCondition;
|
||||||
import mage.abilities.condition.common.CardsInControllerGraveyardCondition;
|
|
||||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
|
||||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||||
import mage.abilities.effects.common.AttachEffect;
|
import mage.abilities.effects.common.AttachEffect;
|
||||||
import mage.abilities.effects.common.GainLifeEffect;
|
import mage.abilities.effects.common.GainLifeEffect;
|
||||||
|
@ -18,25 +13,16 @@ import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Outcome;
|
import mage.constants.Outcome;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.Zone;
|
|
||||||
import mage.filter.FilterCard;
|
|
||||||
import mage.filter.common.FilterControlledPermanent;
|
|
||||||
import mage.target.TargetPermanent;
|
import mage.target.TargetPermanent;
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author emerald000
|
* @author emerald000
|
||||||
*/
|
*/
|
||||||
public final class DesertsHold extends CardImpl {
|
public final class DesertsHold extends CardImpl {
|
||||||
|
|
||||||
private static final FilterControlledPermanent filterDesertPermanent = new FilterControlledPermanent("Desert");
|
|
||||||
private static final FilterCard filterDesertCard = new FilterCard("Desert card");
|
|
||||||
static {
|
|
||||||
filterDesertPermanent.add(SubType.DESERT.getPredicate());
|
|
||||||
filterDesertCard.add(SubType.DESERT.getPredicate());
|
|
||||||
}
|
|
||||||
|
|
||||||
public DesertsHold(UUID ownerId, CardSetInfo setInfo) {
|
public DesertsHold(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}");
|
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}");
|
||||||
|
|
||||||
|
@ -46,19 +32,17 @@ public final class DesertsHold extends CardImpl {
|
||||||
TargetPermanent auraTarget = new TargetCreaturePermanent();
|
TargetPermanent auraTarget = new TargetCreaturePermanent();
|
||||||
this.getSpellAbility().addTarget(auraTarget);
|
this.getSpellAbility().addTarget(auraTarget);
|
||||||
this.getSpellAbility().addEffect(new AttachEffect(Outcome.Removal));
|
this.getSpellAbility().addEffect(new AttachEffect(Outcome.Removal));
|
||||||
Ability ability = new EnchantAbility(auraTarget.getTargetName());
|
this.addAbility(new EnchantAbility(auraTarget.getTargetName()));
|
||||||
this.addAbility(ability);
|
|
||||||
|
|
||||||
// When Desert's Hold enters the battlefield, if you control a Desert or there is a Desert card in your graveyard, you gain 3 life.
|
// When Desert's Hold enters the battlefield, if you control a Desert or there is a Desert card in your graveyard, you gain 3 life.
|
||||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||||
new EntersBattlefieldTriggeredAbility(new GainLifeEffect(3)),
|
new EntersBattlefieldTriggeredAbility(new GainLifeEffect(3)),
|
||||||
new OrCondition(
|
DesertControlledOrGraveyardCondition.instance, "When {this} enters the battlefield, " +
|
||||||
new PermanentsOnTheBattlefieldCondition(new FilterControlledPermanent(filterDesertPermanent)),
|
"if you control a Desert or there is a Desert card in your graveyard, you gain 3 life."
|
||||||
new CardsInControllerGraveyardCondition(1, filterDesertCard)),
|
).addHint(DesertControlledOrGraveyardCondition.getHint()));
|
||||||
"When {this} enters the battlefield, if you control a Desert or there is a Desert card in your graveyard, you gain 3 life."));
|
|
||||||
|
|
||||||
// Enchanted creature can't attack or block, and its activated abilities can't be activated.
|
// Enchanted creature can't attack or block, and its activated abilities can't be activated.
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBlockAttackActivateAttachedEffect()));
|
this.addAbility(new SimpleStaticAbility(new CantBlockAttackActivateAttachedEffect()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private DesertsHold(final DesertsHold card) {
|
private DesertsHold(final DesertsHold card) {
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
package mage.cards.g;
|
package mage.cards.g;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.AttacksTriggeredAbility;
|
import mage.abilities.common.AttacksTriggeredAbility;
|
||||||
import mage.abilities.condition.Condition;
|
import mage.abilities.condition.common.DesertControlledOrGraveyardCondition;
|
||||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||||
import mage.abilities.effects.common.combat.CantBlockTargetEffect;
|
import mage.abilities.effects.common.combat.CantBlockTargetEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
|
@ -12,14 +11,11 @@ import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.filter.FilterCard;
|
|
||||||
import mage.filter.FilterPermanent;
|
|
||||||
import mage.game.Game;
|
|
||||||
import mage.players.Player;
|
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author jeffwadsworth
|
* @author jeffwadsworth
|
||||||
*/
|
*/
|
||||||
public final class GildedCerodon extends CardImpl {
|
public final class GildedCerodon extends CardImpl {
|
||||||
|
@ -35,9 +31,12 @@ public final class GildedCerodon extends CardImpl {
|
||||||
this.toughness = new MageInt(4);
|
this.toughness = new MageInt(4);
|
||||||
|
|
||||||
// Whenever Gilded Cerodon attacks, if you control a Desert or there is a Desert card in your graveyard, target creature can't block this turn.
|
// Whenever Gilded Cerodon attacks, if you control a Desert or there is a Desert card in your graveyard, target creature can't block this turn.
|
||||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(new AttacksTriggeredAbility(new CantBlockTargetEffect(Duration.EndOfTurn), false), new GildedCerodonCondition(), rule);
|
Ability ability = new ConditionalInterveningIfTriggeredAbility(
|
||||||
|
new AttacksTriggeredAbility(new CantBlockTargetEffect(Duration.EndOfTurn), false),
|
||||||
|
DesertControlledOrGraveyardCondition.instance, rule
|
||||||
|
);
|
||||||
ability.addTarget(new TargetCreaturePermanent());
|
ability.addTarget(new TargetCreaturePermanent());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability.addHint(DesertControlledOrGraveyardCondition.getHint()));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,27 +49,3 @@ public final class GildedCerodon extends CardImpl {
|
||||||
return new GildedCerodon(this);
|
return new GildedCerodon(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class GildedCerodonCondition implements Condition {
|
|
||||||
|
|
||||||
private static final FilterPermanent filter = new FilterPermanent();
|
|
||||||
private static final FilterCard filter2 = new FilterCard();
|
|
||||||
|
|
||||||
static {
|
|
||||||
filter.add(SubType.DESERT.getPredicate());
|
|
||||||
filter2.add(SubType.DESERT.getPredicate());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean apply(Game game, Ability source) {
|
|
||||||
Player controller = game.getPlayer(source.getControllerId());
|
|
||||||
return (!game.getBattlefield().getAllActivePermanents(filter, source.getControllerId(), game).isEmpty()
|
|
||||||
|| !controller.getGraveyard().getCards(filter2, game).isEmpty());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "if you control a Desert or there is a Desert card in your graveyard";
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
import mage.abilities.condition.common.CardsInControllerGraveyardCondition;
|
import mage.abilities.condition.common.CardsInControllerGraveyardCondition;
|
||||||
|
import mage.abilities.condition.common.DesertControlledOrGraveyardCondition;
|
||||||
import mage.abilities.effects.WhileConditionContinuousEffect;
|
import mage.abilities.effects.WhileConditionContinuousEffect;
|
||||||
import mage.abilities.effects.common.continuous.BoostSourceWhileControlsEffect;
|
import mage.abilities.effects.common.continuous.BoostSourceWhileControlsEffect;
|
||||||
import mage.abilities.keyword.ReachAbility;
|
import mage.abilities.keyword.ReachAbility;
|
||||||
|
@ -52,7 +53,7 @@ public final class RamunapHydra extends CardImpl {
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostSourceWhileControlsEffect(new FilterPermanent(SubType.DESERT, "Desert"), 1, 1)));
|
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostSourceWhileControlsEffect(new FilterPermanent(SubType.DESERT, "Desert"), 1, 1)));
|
||||||
|
|
||||||
// Ramunap Hydra gets +1/+1 as long as there is a Desert card in your graveyard.
|
// Ramunap Hydra gets +1/+1 as long as there is a Desert card in your graveyard.
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new RamunapHydraBoostEffect(1, 1)));
|
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new RamunapHydraBoostEffect(1, 1)).addHint(DesertControlledOrGraveyardCondition.getHint()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private RamunapHydra(final RamunapHydra card) {
|
private RamunapHydra(final RamunapHydra card) {
|
||||||
|
|
|
@ -1,37 +1,24 @@
|
||||||
|
|
||||||
package mage.cards.s;
|
package mage.cards.s;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
import mage.abilities.condition.OrCondition;
|
import mage.abilities.condition.common.DesertControlledOrGraveyardCondition;
|
||||||
import mage.abilities.condition.common.CardsInControllerGraveyardCondition;
|
|
||||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
|
||||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||||
import mage.abilities.effects.common.DamageTargetEffect;
|
import mage.abilities.effects.common.DamageTargetEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.filter.FilterCard;
|
|
||||||
import mage.filter.common.FilterControlledPermanent;
|
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author spjspj
|
* @author spjspj
|
||||||
*/
|
*/
|
||||||
public final class SandStrangler extends CardImpl {
|
public final class SandStrangler extends CardImpl {
|
||||||
|
|
||||||
private static final FilterControlledPermanent filterDesertPermanent = new FilterControlledPermanent("Desert");
|
|
||||||
private static final FilterCard filterDesertCard = new FilterCard("Desert card");
|
|
||||||
|
|
||||||
static {
|
|
||||||
filterDesertPermanent.add(SubType.DESERT.getPredicate());
|
|
||||||
filterDesertCard.add(SubType.DESERT.getPredicate());
|
|
||||||
}
|
|
||||||
|
|
||||||
public SandStrangler(UUID ownerId, CardSetInfo setInfo) {
|
public SandStrangler(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");
|
||||||
|
|
||||||
|
@ -42,13 +29,11 @@ public final class SandStrangler extends CardImpl {
|
||||||
// When Sand Strangler enters the battlefield, if you control a Desert or there is a Desert card in your graveyard, you may have Sand Strangler deal 3 damage to target creature.
|
// When Sand Strangler enters the battlefield, if you control a Desert or there is a Desert card in your graveyard, you may have Sand Strangler deal 3 damage to target creature.
|
||||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(
|
Ability ability = new ConditionalInterveningIfTriggeredAbility(
|
||||||
new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(3), true),
|
new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(3), true),
|
||||||
new OrCondition(
|
DesertControlledOrGraveyardCondition.instance, "When {this} enters the battlefield, " +
|
||||||
new PermanentsOnTheBattlefieldCondition(new FilterControlledPermanent(filterDesertPermanent)),
|
"if you control a Desert or there is a Desert card in your graveyard, " +
|
||||||
new CardsInControllerGraveyardCondition(1, filterDesertCard)),
|
"you may have {this} deal 3 damage to target creature.");
|
||||||
"When {this} enters the battlefield, if you control a Desert or there is a Desert card in your graveyard, you may have {this} deal 3 damage to target creature.");
|
|
||||||
ability.addTarget(new TargetCreaturePermanent());
|
ability.addTarget(new TargetCreaturePermanent());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability.addHint(DesertControlledOrGraveyardCondition.getHint()));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private SandStrangler(final SandStrangler card) {
|
private SandStrangler(final SandStrangler card) {
|
||||||
|
|
|
@ -6,6 +6,7 @@ import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
import mage.abilities.condition.Condition;
|
import mage.abilities.condition.Condition;
|
||||||
|
import mage.abilities.condition.common.DesertControlledOrGraveyardCondition;
|
||||||
import mage.abilities.decorator.ConditionalContinuousEffect;
|
import mage.abilities.decorator.ConditionalContinuousEffect;
|
||||||
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
|
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
|
||||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||||
|
@ -38,11 +39,15 @@ public final class SidewinderNaga extends CardImpl {
|
||||||
this.toughness = new MageInt(2);
|
this.toughness = new MageInt(2);
|
||||||
|
|
||||||
// As long as you control a Desert or there is a Desert card in your graveyard, Sidewinder Naga gets +1/+0 and has trample.
|
// As long as you control a Desert or there is a Desert card in your graveyard, Sidewinder Naga gets +1/+0 and has trample.
|
||||||
ConditionalContinuousEffect effect = new ConditionalContinuousEffect(new BoostSourceEffect(1, 0, Duration.WhileOnBattlefield), new DesertInGYorBFCondition(), "As long as you control a Desert or there is a Desert card in your graveyard, {this} gets +1/+0 ");
|
Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect(
|
||||||
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect);
|
new BoostSourceEffect(1, 0, Duration.WhileOnBattlefield),
|
||||||
ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect);
|
DesertControlledOrGraveyardCondition.instance, "As long as you control a Desert " +
|
||||||
ability.addEffect(new ConditionalContinuousEffect(new GainAbilitySourceEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield), new DesertInGYorBFCondition(), "and has trample"));
|
"or there is a Desert card in your graveyard, {this} gets +1/+0 "
|
||||||
this.addAbility(ability);
|
));
|
||||||
|
ability.addEffect(new ConditionalContinuousEffect(new GainAbilitySourceEffect(
|
||||||
|
TrampleAbility.getInstance(), Duration.WhileOnBattlefield
|
||||||
|
),DesertControlledOrGraveyardCondition.instance, "and has trample"));
|
||||||
|
this.addAbility(ability.addHint(DesertControlledOrGraveyardCondition.getHint()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private SidewinderNaga(final SidewinderNaga card) {
|
private SidewinderNaga(final SidewinderNaga card) {
|
||||||
|
@ -54,33 +59,3 @@ public final class SidewinderNaga extends CardImpl {
|
||||||
return new SidewinderNaga(this);
|
return new SidewinderNaga(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class DesertInGYorBFCondition implements Condition {
|
|
||||||
|
|
||||||
private static final FilterCard filter = new FilterCard();
|
|
||||||
|
|
||||||
static {
|
|
||||||
filter.add(SubType.DESERT.getPredicate());
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final FilterControlledLandPermanent filter2 = new FilterControlledLandPermanent("a desert");
|
|
||||||
|
|
||||||
static {
|
|
||||||
filter2.add(SubType.DESERT.getPredicate());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean apply(Game game, Ability source) {
|
|
||||||
Player player = game.getPlayer(source.getControllerId());
|
|
||||||
if (player != null) {
|
|
||||||
for (Card card : player.getGraveyard().getCards(game)) {
|
|
||||||
if (filter.match(card, game)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PermanentsOnBattlefieldCount count = new PermanentsOnBattlefieldCount(filter2);
|
|
||||||
return count.calculate(game, source, null) >= 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,13 +1,8 @@
|
||||||
|
|
||||||
package mage.cards.s;
|
package mage.cards.s;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
import mage.abilities.condition.OrCondition;
|
import mage.abilities.condition.common.DesertControlledOrGraveyardCondition;
|
||||||
import mage.abilities.condition.common.CardsInControllerGraveyardCondition;
|
|
||||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
|
||||||
import mage.abilities.decorator.ConditionalContinuousEffect;
|
import mage.abilities.decorator.ConditionalContinuousEffect;
|
||||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||||
import mage.abilities.keyword.LifelinkAbility;
|
import mage.abilities.keyword.LifelinkAbility;
|
||||||
|
@ -15,24 +10,14 @@ import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.Zone;
|
|
||||||
import mage.filter.FilterCard;
|
import java.util.UUID;
|
||||||
import mage.filter.common.FilterControlledPermanent;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author spjspj
|
* @author spjspj
|
||||||
*/
|
*/
|
||||||
public final class SolitaryCamel extends CardImpl {
|
public final class SolitaryCamel extends CardImpl {
|
||||||
|
|
||||||
private static final FilterControlledPermanent filterDesertPermanent = new FilterControlledPermanent("Desert");
|
|
||||||
private static final FilterCard filterDesertCard = new FilterCard("Desert card");
|
|
||||||
|
|
||||||
static {
|
|
||||||
filterDesertPermanent.add(SubType.DESERT.getPredicate());
|
|
||||||
filterDesertCard.add(SubType.DESERT.getPredicate());
|
|
||||||
}
|
|
||||||
|
|
||||||
public SolitaryCamel(UUID ownerId, CardSetInfo setInfo) {
|
public SolitaryCamel(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
|
||||||
|
|
||||||
|
@ -41,13 +26,11 @@ public final class SolitaryCamel extends CardImpl {
|
||||||
this.toughness = new MageInt(2);
|
this.toughness = new MageInt(2);
|
||||||
|
|
||||||
// Solitary Camel has lifelink as long as you control a desert or there is a desert card in your graveyard.
|
// Solitary Camel has lifelink as long as you control a desert or there is a desert card in your graveyard.
|
||||||
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(
|
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
|
||||||
new GainAbilitySourceEffect(LifelinkAbility.getInstance()),
|
new GainAbilitySourceEffect(LifelinkAbility.getInstance()),
|
||||||
new OrCondition(
|
DesertControlledOrGraveyardCondition.instance, "{this} has lifelink as long as " +
|
||||||
new PermanentsOnTheBattlefieldCondition(new FilterControlledPermanent(filterDesertPermanent)),
|
"you control a desert or there is a desert card in your graveyard."
|
||||||
new CardsInControllerGraveyardCondition(1, filterDesertCard)),
|
)).addHint(DesertControlledOrGraveyardCondition.getHint()));
|
||||||
"{this} has lifelink as long as you control a desert or there is a desert card in your graveyard."));
|
|
||||||
this.addAbility(ability);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private SolitaryCamel(final SolitaryCamel card) {
|
private SolitaryCamel(final SolitaryCamel card) {
|
||||||
|
|
|
@ -1,13 +1,9 @@
|
||||||
|
|
||||||
package mage.cards.u;
|
package mage.cards.u;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.abilities.Ability;
|
|
||||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
import mage.abilities.condition.OrCondition;
|
import mage.abilities.condition.common.DesertControlledOrGraveyardCondition;
|
||||||
import mage.abilities.condition.common.CardsInControllerGraveyardCondition;
|
|
||||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
|
||||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||||
import mage.abilities.effects.common.AttachEffect;
|
import mage.abilities.effects.common.AttachEffect;
|
||||||
import mage.abilities.effects.common.DontUntapInControllersUntapStepEnchantedEffect;
|
import mage.abilities.effects.common.DontUntapInControllersUntapStepEnchantedEffect;
|
||||||
|
@ -18,26 +14,16 @@ import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Outcome;
|
import mage.constants.Outcome;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.Zone;
|
|
||||||
import mage.filter.FilterCard;
|
|
||||||
import mage.filter.common.FilterControlledPermanent;
|
|
||||||
import mage.target.TargetPermanent;
|
import mage.target.TargetPermanent;
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author spjspj
|
* @author spjspj
|
||||||
*/
|
*/
|
||||||
public final class UnquenchableThirst extends CardImpl {
|
public final class UnquenchableThirst extends CardImpl {
|
||||||
|
|
||||||
private static final FilterControlledPermanent filterDesertPermanent = new FilterControlledPermanent("Desert");
|
|
||||||
private static final FilterCard filterDesertCard = new FilterCard("Desert card");
|
|
||||||
|
|
||||||
static {
|
|
||||||
filterDesertPermanent.add(SubType.DESERT.getPredicate());
|
|
||||||
filterDesertCard.add(SubType.DESERT.getPredicate());
|
|
||||||
}
|
|
||||||
|
|
||||||
public UnquenchableThirst(UUID ownerId, CardSetInfo setInfo) {
|
public UnquenchableThirst(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}");
|
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}");
|
||||||
|
|
||||||
|
@ -47,20 +33,17 @@ public final class UnquenchableThirst extends CardImpl {
|
||||||
TargetPermanent auraTarget = new TargetCreaturePermanent();
|
TargetPermanent auraTarget = new TargetCreaturePermanent();
|
||||||
this.getSpellAbility().addTarget(auraTarget);
|
this.getSpellAbility().addTarget(auraTarget);
|
||||||
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
|
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
|
||||||
Ability ability = new EnchantAbility(auraTarget.getTargetName());
|
this.addAbility(new EnchantAbility(auraTarget.getTargetName()));
|
||||||
this.addAbility(ability);
|
|
||||||
|
|
||||||
// When Unquenchable Thirst enters the battlefield, if you control a Desert or there is a Desert card in your graveyard, tap enchanted creature.
|
// When Unquenchable Thirst enters the battlefield, if you control a Desert or there is a Desert card in your graveyard, tap enchanted creature.
|
||||||
Ability ability2 = new ConditionalInterveningIfTriggeredAbility(
|
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||||
new EntersBattlefieldTriggeredAbility(new TapEnchantedEffect()),
|
new EntersBattlefieldTriggeredAbility(new TapEnchantedEffect()),
|
||||||
new OrCondition(
|
DesertControlledOrGraveyardCondition.instance, "When {this} enters the battlefield, " +
|
||||||
new PermanentsOnTheBattlefieldCondition(new FilterControlledPermanent(filterDesertPermanent)),
|
"if you control a Desert or there is a Desert card in your graveyard, tap enchanted creature."
|
||||||
new CardsInControllerGraveyardCondition(1, filterDesertCard)),
|
).addHint(DesertControlledOrGraveyardCondition.getHint()));
|
||||||
"When {this} enters the battlefield, if you control a Desert or there is a Desert card in your graveyard, tap enchanted creature.");
|
|
||||||
this.addAbility(ability2);
|
|
||||||
|
|
||||||
// Enchanted creature doesn't untap during its controller's untap step.
|
// Enchanted creature doesn't untap during its controller's untap step.
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DontUntapInControllersUntapStepEnchantedEffect()));
|
this.addAbility(new SimpleStaticAbility(new DontUntapInControllersUntapStepEnchantedEffect()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private UnquenchableThirst(final UnquenchableThirst card) {
|
private UnquenchableThirst(final UnquenchableThirst card) {
|
||||||
|
|
|
@ -1,13 +1,9 @@
|
||||||
|
|
||||||
package mage.cards.w;
|
package mage.cards.w;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.ActivateIfConditionActivatedAbility;
|
import mage.abilities.common.ActivateIfConditionActivatedAbility;
|
||||||
import mage.abilities.condition.OrCondition;
|
import mage.abilities.condition.common.DesertControlledOrGraveyardCondition;
|
||||||
import mage.abilities.condition.common.CardsInControllerGraveyardCondition;
|
|
||||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
|
||||||
import mage.abilities.costs.common.TapSourceCost;
|
import mage.abilities.costs.common.TapSourceCost;
|
||||||
import mage.abilities.effects.common.DamageTargetEffect;
|
import mage.abilities.effects.common.DamageTargetEffect;
|
||||||
import mage.abilities.keyword.DefenderAbility;
|
import mage.abilities.keyword.DefenderAbility;
|
||||||
|
@ -16,24 +12,15 @@ import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.filter.FilterCard;
|
|
||||||
import mage.filter.common.FilterControlledPermanent;
|
|
||||||
import mage.target.common.TargetPlayerOrPlaneswalker;
|
import mage.target.common.TargetPlayerOrPlaneswalker;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author spjspj
|
* @author spjspj
|
||||||
*/
|
*/
|
||||||
public final class WallOfForgottenPharaohs extends CardImpl {
|
public final class WallOfForgottenPharaohs extends CardImpl {
|
||||||
|
|
||||||
private static final FilterControlledPermanent filterDesertPermanent = new FilterControlledPermanent("Desert");
|
|
||||||
private static final FilterCard filterDesertCard = new FilterCard("Desert card");
|
|
||||||
|
|
||||||
static {
|
|
||||||
filterDesertPermanent.add(SubType.DESERT.getPredicate());
|
|
||||||
filterDesertCard.add(SubType.DESERT.getPredicate());
|
|
||||||
}
|
|
||||||
|
|
||||||
public WallOfForgottenPharaohs(UUID ownerId, CardSetInfo setInfo) {
|
public WallOfForgottenPharaohs(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}");
|
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}");
|
||||||
|
|
||||||
|
@ -46,17 +33,11 @@ public final class WallOfForgottenPharaohs extends CardImpl {
|
||||||
|
|
||||||
// {T}: Wall of Forgotten Pharaohs deals 1 damage to target player. Activate this ability only if you control a Desert or there is a Desert card in your graveyard.
|
// {T}: Wall of Forgotten Pharaohs deals 1 damage to target player. Activate this ability only if you control a Desert or there is a Desert card in your graveyard.
|
||||||
Ability ability = new ActivateIfConditionActivatedAbility(
|
Ability ability = new ActivateIfConditionActivatedAbility(
|
||||||
Zone.BATTLEFIELD,
|
Zone.BATTLEFIELD, new DamageTargetEffect(1),
|
||||||
new DamageTargetEffect(1),
|
new TapSourceCost(), DesertControlledOrGraveyardCondition.instance
|
||||||
new TapSourceCost(),
|
|
||||||
new OrCondition(
|
|
||||||
"you control a Desert or there is a Desert card in your graveyard",
|
|
||||||
new PermanentsOnTheBattlefieldCondition(new FilterControlledPermanent(filterDesertPermanent)),
|
|
||||||
new CardsInControllerGraveyardCondition(1, filterDesertCard)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
ability.addTarget(new TargetPlayerOrPlaneswalker());
|
ability.addTarget(new TargetPlayerOrPlaneswalker());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability.addHint(DesertControlledOrGraveyardCondition.getHint()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private WallOfForgottenPharaohs(final WallOfForgottenPharaohs card) {
|
private WallOfForgottenPharaohs(final WallOfForgottenPharaohs card) {
|
||||||
|
|
|
@ -1,37 +1,24 @@
|
||||||
|
|
||||||
package mage.cards.w;
|
package mage.cards.w;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||||
import mage.abilities.condition.OrCondition;
|
import mage.abilities.condition.common.DesertControlledOrGraveyardCondition;
|
||||||
import mage.abilities.condition.common.CardsInControllerGraveyardCondition;
|
|
||||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
|
||||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||||
import mage.abilities.effects.common.discard.DiscardTargetEffect;
|
import mage.abilities.effects.common.discard.DiscardTargetEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.filter.FilterCard;
|
|
||||||
import mage.filter.common.FilterControlledPermanent;
|
|
||||||
import mage.target.TargetPlayer;
|
import mage.target.TargetPlayer;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author spjspj
|
* @author spjspj
|
||||||
*/
|
*/
|
||||||
public final class WretchedCamel extends CardImpl {
|
public final class WretchedCamel extends CardImpl {
|
||||||
|
|
||||||
private static final FilterControlledPermanent filterDesertPermanent = new FilterControlledPermanent("Desert");
|
|
||||||
private static final FilterCard filterDesertCard = new FilterCard("Desert card");
|
|
||||||
|
|
||||||
static {
|
|
||||||
filterDesertPermanent.add(SubType.DESERT.getPredicate());
|
|
||||||
filterDesertCard.add(SubType.DESERT.getPredicate());
|
|
||||||
}
|
|
||||||
|
|
||||||
public WretchedCamel(UUID ownerId, CardSetInfo setInfo) {
|
public WretchedCamel(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}");
|
||||||
|
|
||||||
|
@ -43,13 +30,11 @@ public final class WretchedCamel extends CardImpl {
|
||||||
// When Wretched Camel dies, if you control a Desert or there is a Desert card in your graveyard, target player discards a card.
|
// When Wretched Camel dies, if you control a Desert or there is a Desert card in your graveyard, target player discards a card.
|
||||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(
|
Ability ability = new ConditionalInterveningIfTriggeredAbility(
|
||||||
new DiesSourceTriggeredAbility(new DiscardTargetEffect(1)),
|
new DiesSourceTriggeredAbility(new DiscardTargetEffect(1)),
|
||||||
new OrCondition(
|
DesertControlledOrGraveyardCondition.instance, "When {this} dies, " +
|
||||||
new PermanentsOnTheBattlefieldCondition(new FilterControlledPermanent(filterDesertPermanent)),
|
"if you control a Desert or there is a Desert card in your graveyard, target player discards a card."
|
||||||
new CardsInControllerGraveyardCondition(1, filterDesertCard)),
|
);
|
||||||
"When {this} dies, if you control a Desert or there is a Desert card in your graveyard, target player discards a card.");
|
|
||||||
|
|
||||||
ability.addTarget(new TargetPlayer());
|
ability.addTarget(new TargetPlayer());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability.addHint(DesertControlledOrGraveyardCondition.getHint()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private WretchedCamel(final WretchedCamel card) {
|
private WretchedCamel(final WretchedCamel card) {
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
package mage.abilities.condition.common;
|
||||||
|
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.condition.Condition;
|
||||||
|
import mage.abilities.hint.Hint;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.filter.FilterCard;
|
||||||
|
import mage.filter.FilterPermanent;
|
||||||
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
|
import mage.game.Game;
|
||||||
|
import mage.players.Player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public enum DesertControlledOrGraveyardCondition implements Condition {
|
||||||
|
instance;
|
||||||
|
|
||||||
|
private static final FilterPermanent filter = new FilterControlledPermanent(SubType.DESERT);
|
||||||
|
private static final FilterCard filter2 = new FilterCard();
|
||||||
|
|
||||||
|
static {
|
||||||
|
filter2.add(SubType.DESERT.getPredicate());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(Game game, Ability source) {
|
||||||
|
if (game.getBattlefield().contains(filter, source, game, 1)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
Player player = game.getPlayer(source.getControllerId());
|
||||||
|
return player != null && player.getGraveyard().count(filter2, game) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "you control a Desert or there is a Desert card in your graveyard";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Hint getHint() {
|
||||||
|
return DesertControlledOrGraveyardHint.instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum DesertControlledOrGraveyardHint implements Hint {
|
||||||
|
instance;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getText(Game game, Ability ability) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
if (game.getBattlefield().contains(filter, ability, game, 1)) {
|
||||||
|
sb.append("You control a Desert");
|
||||||
|
}
|
||||||
|
Player player = game.getPlayer(ability.getControllerId());
|
||||||
|
if (player != null && player.getGraveyard().count(filter2, game) > 0) {
|
||||||
|
if (sb.length() > 0) {
|
||||||
|
sb.append("<br>");
|
||||||
|
}
|
||||||
|
sb.append("You have a Desert card in your graveyard");
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Hint copy() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue