[KLD] various text fixes

This commit is contained in:
Evan Kranzler 2022-02-20 09:37:58 -05:00
parent 83713f36d0
commit cc8ddbfd7c
40 changed files with 249 additions and 230 deletions

View file

@ -22,10 +22,10 @@ public final class AcrobaticManeuver extends CardImpl {
// Exile target creature you control, then return that card to the battlefield under its owner's control. // Exile target creature you control, then return that card to the battlefield under its owner's control.
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
this.getSpellAbility().addEffect(new ExileTargetForSourceEffect()); this.getSpellAbility().addEffect(new ExileTargetForSourceEffect());
this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false)); this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false).concatBy(","));
// Draw a card. // Draw a card.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("<br>"));
} }
private AcrobaticManeuver(final AcrobaticManeuver card) { private AcrobaticManeuver(final AcrobaticManeuver card) {

View file

@ -1,7 +1,5 @@
package mage.cards.a; package mage.cards.a;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.common.SpellCastControllerTriggeredAbility;
@ -10,31 +8,30 @@ import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.effects.Effect; import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.hint.ValueHint;
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.Zone;
import mage.game.Game; import mage.game.Game;
import mage.target.common.TargetAnyTarget; import mage.target.common.TargetAnyTarget;
import mage.watchers.common.CastSpellLastTurnWatcher; import mage.watchers.common.CastSpellLastTurnWatcher;
import java.util.UUID;
/** /**
*
* @author emerald000 * @author emerald000
*/ */
public final class AetherfluxReservoir extends CardImpl { public final class AetherfluxReservoir extends CardImpl {
public AetherfluxReservoir(UUID ownerId, CardSetInfo setInfo) { public AetherfluxReservoir(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{4}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}");
// Whenever you cast a spell, you gain 1 life for each spell you've cast this turn. // Whenever you cast a spell, you gain 1 life for each spell you've cast this turn.
Ability abilityGainLife = new SpellCastControllerTriggeredAbility(new GainLifeEffect(new AetherfluxReservoirDynamicValue()), false); this.addAbility(new SpellCastControllerTriggeredAbility(new GainLifeEffect(
abilityGainLife.addHint(new ValueHint("You've cast spells this turn", new AetherfluxReservoirDynamicValue())); AetherfluxReservoirDynamicValue.instance, "you gain 1 life for each spell you've cast this turn"
this.addAbility(abilityGainLife); ), false));
// Pay 50 life: Aetherflux Reservoir deals 50 damage to any target. // Pay 50 life: Aetherflux Reservoir deals 50 damage to any target.
Ability abilityPayLife = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(50), new PayLifeCost(50)); Ability abilityPayLife = new SimpleActivatedAbility(new DamageTargetEffect(50), new PayLifeCost(50));
abilityPayLife.addTarget(new TargetAnyTarget()); abilityPayLife.addTarget(new TargetAnyTarget());
this.addAbility(abilityPayLife); this.addAbility(abilityPayLife);
} }
@ -49,20 +46,20 @@ public final class AetherfluxReservoir extends CardImpl {
} }
} }
class AetherfluxReservoirDynamicValue implements DynamicValue { enum AetherfluxReservoirDynamicValue implements DynamicValue {
instance;
@Override @Override
public int calculate(Game game, Ability sourceAbility, Effect effect) { public int calculate(Game game, Ability sourceAbility, Effect effect) {
CastSpellLastTurnWatcher watcher = game.getState().getWatcher(CastSpellLastTurnWatcher.class); return game
if(watcher != null) { .getState()
return watcher.getAmountOfSpellsPlayerCastOnCurrentTurn(sourceAbility.getControllerId()); .getWatcher(CastSpellLastTurnWatcher.class)
} .getAmountOfSpellsPlayerCastOnCurrentTurn(sourceAbility.getControllerId());
return 0;
} }
@Override @Override
public AetherfluxReservoirDynamicValue copy() { public AetherfluxReservoirDynamicValue copy() {
return new AetherfluxReservoirDynamicValue(); return this;
} }
@Override @Override
@ -74,5 +71,4 @@ class AetherfluxReservoirDynamicValue implements DynamicValue {
public String getMessage() { public String getMessage() {
return "spell you've cast this turn"; return "spell you've cast this turn";
} }
} }

View file

@ -28,7 +28,7 @@ public final class BuiltToLast extends CardImpl {
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().addEffect(new ConditionalContinuousEffect( this.getSpellAbility().addEffect(new ConditionalContinuousEffect(
new GainAbilityTargetEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn), new LockedInCondition(new TargetHasCardTypeCondition(CardType.ARTIFACT)), new GainAbilityTargetEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn), new LockedInCondition(new TargetHasCardTypeCondition(CardType.ARTIFACT)),
"If its an artifact creature, it gains indestructible until end of turn")); "If it's an artifact creature, it gains indestructible until end of turn"));
} }

View file

@ -28,7 +28,7 @@ public final class BuiltToSmash extends CardImpl {
this.getSpellAbility().addTarget(new TargetAttackingCreature()); this.getSpellAbility().addTarget(new TargetAttackingCreature());
this.getSpellAbility().addEffect(new ConditionalContinuousEffect( this.getSpellAbility().addEffect(new ConditionalContinuousEffect(
new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn), new LockedInCondition(new TargetHasCardTypeCondition(CardType.ARTIFACT)), new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn), new LockedInCondition(new TargetHasCardTypeCondition(CardType.ARTIFACT)),
"If its an artifact creature, it gains trample until end of turn")); "If it's an artifact creature, it gains trample until end of turn"));
} }
private BuiltToSmash(final BuiltToSmash card) { private BuiltToSmash(final BuiltToSmash card) {

View file

@ -1,26 +1,25 @@
package mage.cards.c; package mage.cards.c;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.keyword.ScryEffect; import mage.abilities.effects.keyword.ScryEffect;
import mage.abilities.keyword.LifelinkAbility; import mage.abilities.keyword.LifelinkAbility;
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.constants.Zone; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledArtifactPermanent;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class ContrabandKingpin extends CardImpl { public final class ContrabandKingpin extends CardImpl {
public ContrabandKingpin(UUID ownerId, CardSetInfo setInfo) { public ContrabandKingpin(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{U}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{U}{B}");
this.subtype.add(SubType.AETHERBORN); this.subtype.add(SubType.AETHERBORN);
this.subtype.add(SubType.ROGUE); this.subtype.add(SubType.ROGUE);
this.power = new MageInt(1); this.power = new MageInt(1);
@ -30,7 +29,10 @@ public final class ContrabandKingpin extends CardImpl {
this.addAbility(LifelinkAbility.getInstance()); this.addAbility(LifelinkAbility.getInstance());
// Whenever an artifact enters the battlefield under your control, scry 1. // Whenever an artifact enters the battlefield under your control, scry 1.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new ScryEffect(1, false), new FilterControlledArtifactPermanent(), false, null, true)); this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
new ScryEffect(1, false),
StaticFilters.FILTER_PERMANENT_ARTIFACT_AN
));
} }
private ContrabandKingpin(final ContrabandKingpin card) { private ContrabandKingpin(final ContrabandKingpin card) {

View file

@ -1,14 +1,11 @@
package mage.cards.d; package mage.cards.d;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.counter.AddCountersAllEffect; import mage.abilities.effects.common.counter.AddCountersAllEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect;
@ -18,27 +15,33 @@ import mage.constants.CardType;
import mage.constants.SetTargetPointer; import mage.constants.SetTargetPointer;
import mage.constants.Zone; import mage.constants.Zone;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
import java.util.UUID;
/** /**
*
* @author spjspj * @author spjspj
*/ */
public final class DurableHandicraft extends CardImpl { public final class DurableHandicraft extends CardImpl {
public DurableHandicraft(UUID ownerId, CardSetInfo setInfo) { public DurableHandicraft(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{G}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}");
// Whenever a creature enters the battlefield under your control, you may pay {1}. If you do, put a +1/+1 counter on that creature. // Whenever a creature enters the battlefield under your control, you may pay {1}. If you do, put a +1/+1 counter on that creature.
Effect effect = new AddCountersTargetEffect(CounterType.P1P1.createInstance()); this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
effect.setText("put a +1/+1 counter on that creature"); Zone.BATTLEFIELD,
DoIfCostPaid doIfCostPaid = new DoIfCostPaid(effect, new GenericManaCost(1)); new DoIfCostPaid(
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, doIfCostPaid, new FilterControlledCreaturePermanent(), false, SetTargetPointer.PERMANENT, null)); new AddCountersTargetEffect(CounterType.P1P1.createInstance())
.setText("put a +1/+1 counter on that creature"),
new GenericManaCost(1)
), StaticFilters.FILTER_PERMANENT_A_CREATURE,
false, SetTargetPointer.PERMANENT, null
));
// {5}{G}, Sacrifice Durable Handicraft: Put a +1/+1 counter on each creature you control. // {5}{G}, Sacrifice Durable Handicraft: Put a +1/+1 counter on each creature you control.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, Ability ability = new SimpleActivatedAbility(new AddCountersAllEffect(
new AddCountersAllEffect(CounterType.P1P1.createInstance(), new FilterControlledCreaturePermanent()), CounterType.P1P1.createInstance(), StaticFilters.FILTER_CONTROLLED_CREATURE
new ManaCostsImpl("{5}{G}")); ), new ManaCostsImpl<>("{5}{G}"));
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());
this.addAbility(ability); this.addAbility(ability);
} }
@ -52,4 +55,3 @@ public final class DurableHandicraft extends CardImpl {
return new DurableHandicraft(this); return new DurableHandicraft(this);
} }
} }

View file

@ -1,7 +1,5 @@
package mage.cards.d; package mage.cards.d;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.common.SpellCastControllerTriggeredAbility;
@ -12,24 +10,27 @@ import mage.abilities.effects.common.counter.GetEnergyCountersControllerEffect;
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.Zone; import mage.filter.StaticFilters;
import mage.filter.common.FilterInstantOrSorcerySpell;
import mage.target.common.TargetAnyTarget; import mage.target.common.TargetAnyTarget;
import java.util.UUID;
/** /**
*
* @author emerald000 * @author emerald000
*/ */
public final class DynavoltTower extends CardImpl { public final class DynavoltTower extends CardImpl {
public DynavoltTower(UUID ownerId, CardSetInfo setInfo) { public DynavoltTower(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{3}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}");
// Whenever you cast an instant or sorcery spell, you get {E}{E}. // Whenever you cast an instant or sorcery spell, you get {E}{E}.
this.addAbility(new SpellCastControllerTriggeredAbility(new GetEnergyCountersControllerEffect(2), new FilterInstantOrSorcerySpell(), false)); this.addAbility(new SpellCastControllerTriggeredAbility(
new GetEnergyCountersControllerEffect(2),
StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY, false
));
// {T}, Pay {E}{E}{E}{E}{E}: Dynavolt Tower deals 3 damage to any target. // {T}, Pay {E}{E}{E}{E}{E}: Dynavolt Tower deals 3 damage to any target.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(3), new TapSourceCost()); Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(3), new TapSourceCost());
ability.addCost(new PayEnergyCost(5)); ability.addCost(new PayEnergyCost(5));
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());
this.addAbility(ability); this.addAbility(ability);

View file

@ -1,29 +1,31 @@
package mage.cards.e; package mage.cards.e;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.PayEnergyCost; import mage.abilities.costs.common.PayEnergyCost;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.SourcePermanentPowerCount; import mage.abilities.dynamicvalue.common.SourcePermanentPowerCount;
import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.effects.common.counter.GetEnergyCountersControllerEffect; import mage.abilities.effects.common.counter.GetEnergyCountersControllerEffect;
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.Duration; import mage.constants.Duration;
import mage.constants.Zone; import mage.constants.SubType;
import java.util.UUID;
/** /**
*
* @author emerald000 * @author emerald000
*/ */
public final class ElectrostaticPummeler extends CardImpl { public final class ElectrostaticPummeler extends CardImpl {
private static final DynamicValue xValue = new SourcePermanentPowerCount(false);
public ElectrostaticPummeler(UUID ownerId, CardSetInfo setInfo) { public ElectrostaticPummeler(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{3}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}");
this.subtype.add(SubType.CONSTRUCT); this.subtype.add(SubType.CONSTRUCT);
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
@ -32,7 +34,9 @@ public final class ElectrostaticPummeler extends CardImpl {
this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(3))); this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(3)));
// Pay {E}{E}{E}: Electrostatic Pummeler gets +X/+X until end of turn, where X is its power. // Pay {E}{E}{E}: Electrostatic Pummeler gets +X/+X until end of turn, where X is its power.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(new SourcePermanentPowerCount(), new SourcePermanentPowerCount(), Duration.EndOfTurn, true), new PayEnergyCost(3))); this.addAbility(new SimpleActivatedAbility(new BoostSourceEffect(
xValue, xValue, Duration.EndOfTurn, true
).setText("{this} gets +X/+X until end of turn, where X is its power"), new PayEnergyCost(3)));
} }
private ElectrostaticPummeler(final ElectrostaticPummeler card) { private ElectrostaticPummeler(final ElectrostaticPummeler card) {

View file

@ -52,7 +52,7 @@ class EmpyrealVoyagerEffect extends OneShotEffect {
public EmpyrealVoyagerEffect() { public EmpyrealVoyagerEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "get that many {E} counters"; this.staticText = "you get that many {E}";
} }
public EmpyrealVoyagerEffect(final EmpyrealVoyagerEffect effect) { public EmpyrealVoyagerEffect(final EmpyrealVoyagerEffect effect) {

View file

@ -1,14 +1,11 @@
package mage.cards.e; package mage.cards.e;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.PayEnergyCost; import mage.abilities.costs.common.PayEnergyCost;
import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.counter.GetEnergyCountersControllerEffect; import mage.abilities.effects.common.counter.GetEnergyCountersControllerEffect;
@ -16,17 +13,18 @@ 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.FilterPermanent;
import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.Predicates; import mage.filter.predicate.Predicates;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class EraOfInnovation extends CardImpl { public final class EraOfInnovation extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledPermanent("an artifact or Artificer"); private static final FilterPermanent filter = new FilterControlledPermanent("an artifact or Artificer");
static { static {
filter.add(Predicates.or(CardType.ARTIFACT.getPredicate(), filter.add(Predicates.or(CardType.ARTIFACT.getPredicate(),
@ -34,15 +32,15 @@ public final class EraOfInnovation extends CardImpl {
} }
public EraOfInnovation(UUID ownerId, CardSetInfo setInfo) { public EraOfInnovation(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{U}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}");
// Whenever an artifact or Artificer enters the battlefield under you control, you may pay {1}. If you do, you get {E}{E}. // Whenever an artifact or Artificer enters the battlefield under you control, you may pay {1}. If you do, you get {E}{E}.
Effect effect = new DoIfCostPaid(new GetEnergyCountersControllerEffect(2), new GenericManaCost(1)); this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new DoIfCostPaid(
this.addAbility(new EntersBattlefieldAllTriggeredAbility(effect, filter, new GetEnergyCountersControllerEffect(2), new GenericManaCost(1)
"Whenever an artifact or Artificer enters the battlefield under you control, you may pay {1}. If you do, you get {E}{E}.")); ), filter));
// {E}{E}{E}{E}{E}{E}, Sacrifice Era of Innovation: Draw three cards. // {E}{E}{E}{E}{E}{E}, Sacrifice Era of Innovation: Draw three cards.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(3), new PayEnergyCost(6)); Ability ability = new SimpleActivatedAbility(new DrawCardSourceControllerEffect(3), new PayEnergyCost(6));
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,7 +1,5 @@
package mage.cards.f; package mage.cards.f;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.common.continuous.AddCardTypeSourceEffect; import mage.abilities.effects.common.continuous.AddCardTypeSourceEffect;
@ -14,8 +12,9 @@ import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import java.util.UUID;
/** /**
*
* @author emerald000 * @author emerald000
*/ */
public final class FleetwheelCruiser extends CardImpl { public final class FleetwheelCruiser extends CardImpl {
@ -33,8 +32,9 @@ public final class FleetwheelCruiser extends CardImpl {
this.addAbility(HasteAbility.getInstance()); this.addAbility(HasteAbility.getInstance());
// When Fleetwheel Cruiser enters the battlefield, it becomes an artifact creature until the end of turn. // When Fleetwheel Cruiser enters the battlefield, it becomes an artifact creature until the end of turn.
this.addAbility(new EntersBattlefieldTriggeredAbility( this.addAbility(new EntersBattlefieldTriggeredAbility(new AddCardTypeSourceEffect(
new AddCardTypeSourceEffect(Duration.EndOfTurn, CardType.ARTIFACT, CardType.CREATURE))); Duration.EndOfTurn, CardType.ARTIFACT, CardType.CREATURE
).setText("it becomes an artifact creature until end of turn")));
// Crew 2 // Crew 2
this.addAbility(new CrewAbility(2)); this.addAbility(new CrewAbility(2));

View file

@ -1,10 +1,11 @@
package mage.cards.f; package mage.cards.f;
import mage.abilities.Mode; import mage.abilities.Mode;
import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
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.filter.FilterCard;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.filter.common.FilterArtifactCard; import mage.filter.common.FilterArtifactCard;
import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetCardInYourGraveyard;
@ -16,6 +17,8 @@ import java.util.UUID;
*/ */
public final class FortuitousFind extends CardImpl { public final class FortuitousFind extends CardImpl {
private static final FilterCard filter = new FilterArtifactCard("artifact card from your graveyard");
public FortuitousFind(UUID ownerId, CardSetInfo setInfo) { public FortuitousFind(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{B}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{B}");
@ -24,12 +27,12 @@ public final class FortuitousFind extends CardImpl {
this.getSpellAbility().getModes().setMaxModes(2); this.getSpellAbility().getModes().setMaxModes(2);
// Return target artifact card from your graveyard to your hand.; // Return target artifact card from your graveyard to your hand.;
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect());
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(new FilterArtifactCard("artifact card from your graveyard")).withChooseHint("return to hand")); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(filter).withChooseHint("return to hand"));
// or Return target creature card from your graveyard to your hand. // or Return target creature card from your graveyard to your hand.
Mode mode = new Mode(); Mode mode = new Mode();
mode.addEffect(new ReturnToHandTargetEffect()); mode.addEffect(new ReturnFromGraveyardToHandTargetEffect());
mode.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD).withChooseHint("return to hand")); mode.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD).withChooseHint("return to hand"));
this.getSpellAbility().addMode(mode); this.getSpellAbility().addMode(mode);
} }

View file

@ -1,7 +1,5 @@
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.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
@ -10,16 +8,16 @@ import mage.abilities.effects.common.combat.CantBeBlockedByAllTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Zone; import mage.constants.SubType;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.PowerPredicate; import mage.filter.predicate.mageobject.PowerPredicate;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetControlledCreaturePermanent;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class GhirapurGuide extends CardImpl { public final class GhirapurGuide extends CardImpl {
@ -31,15 +29,17 @@ public final class GhirapurGuide extends CardImpl {
} }
public GhirapurGuide(UUID ownerId, CardSetInfo setInfo) { public GhirapurGuide(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
this.subtype.add(SubType.ELF); this.subtype.add(SubType.ELF);
this.subtype.add(SubType.SCOUT); this.subtype.add(SubType.SCOUT);
this.power = new MageInt(3); this.power = new MageInt(3);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// {2}{G}: Target creature you control can't be blocked by creatures with power 2 or less this turn. // {2}{G}: Target creature you control can't be blocked by creatures with power 2 or less this turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CantBeBlockedByAllTargetEffect(filter, Duration.EndOfTurn), new ManaCostsImpl("{2}{G}")); Ability ability = new SimpleActivatedAbility(
ability.addTarget(new TargetCreaturePermanent()); new CantBeBlockedByAllTargetEffect(filter, Duration.EndOfTurn), new ManaCostsImpl<>("{2}{G}")
);
ability.addTarget(new TargetControlledCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,4 +1,3 @@
package mage.cards.h; package mage.cards.h;
import mage.abilities.effects.common.continuous.BoostAllEffect; import mage.abilities.effects.common.continuous.BoostAllEffect;
@ -17,7 +16,7 @@ import java.util.UUID;
*/ */
public final class HazardousConditions extends CardImpl { public final class HazardousConditions extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures with no counter"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures with no counters on them");
static { static {
filter.add(Predicates.not(CounterAnyPredicate.instance)); filter.add(Predicates.not(CounterAnyPredicate.instance));

View file

@ -1,7 +1,5 @@
package mage.cards.i; package mage.cards.i;
import java.util.UUID;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
@ -13,27 +11,27 @@ import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import java.util.UUID;
/** /**
*
* @author emerald000 * @author emerald000
*/ */
public final class InventorsGoggles extends CardImpl { public final class InventorsGoggles extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent(SubType.ARTIFICER, "an Artificer");
public InventorsGoggles(UUID ownerId, CardSetInfo setInfo) { public InventorsGoggles(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{1}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}");
this.subtype.add(SubType.EQUIPMENT); this.subtype.add(SubType.EQUIPMENT);
// Equipped creature gets +1/+2. // Equipped creature gets +1/+2.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(1, 2, Duration.WhileOnBattlefield))); this.addAbility(new SimpleStaticAbility(new BoostEquippedEffect(1, 2, Duration.WhileOnBattlefield)));
// Whenever an Artificer enters the battlefield under your control, you may attach Inventor's Goggles to it. // Whenever an Artificer enters the battlefield under your control, you may attach Inventor's Goggles to it.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility( this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, Zone.BATTLEFIELD, new AttachEffect(Outcome.BoostCreature, "attach {this} to it"),
new AttachEffect(Outcome.BoostCreature, "attach {this} to it"), filter, true, SetTargetPointer.PERMANENT, null
new FilterPermanent(SubType.ARTIFICER, "Artificer"), ));
true,
SetTargetPointer.PERMANENT,
null));
// Equip {2} // Equip {2}
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(2))); this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(2)));

View file

@ -1,7 +1,5 @@
package mage.cards.l; package mage.cards.l;
import java.util.UUID;
import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.search.SearchLibraryGraveyardPutInHandEffect; import mage.abilities.effects.common.search.SearchLibraryGraveyardPutInHandEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -11,8 +9,9 @@ import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.NamePredicate; import mage.filter.predicate.mageobject.NamePredicate;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public final class LiberatingCombustion extends CardImpl { public final class LiberatingCombustion extends CardImpl {
@ -29,9 +28,9 @@ public final class LiberatingCombustion extends CardImpl {
// Liberating Combustion deals 6 damage to target creature. // Liberating Combustion deals 6 damage to target creature.
this.getSpellAbility().addEffect(new DamageTargetEffect(6)); this.getSpellAbility().addEffect(new DamageTargetEffect(6));
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
// You may search your library and/or graveyard for a card named Chandra, Pyrogenius, reveal it, and put it into your hand. If you search your library this way, shuffle it. // You may search your library and/or graveyard for a card named Chandra, Pyrogenius, reveal it, and put it into your hand. If you search your library this way, shuffle it.
this.getSpellAbility().addEffect(new SearchLibraryGraveyardPutInHandEffect(filter)); this.getSpellAbility().addEffect(new SearchLibraryGraveyardPutInHandEffect(filter, false, true));
} }
private LiberatingCombustion(final LiberatingCombustion card) { private LiberatingCombustion(final LiberatingCombustion card) {

View file

@ -1,7 +1,5 @@
package mage.cards.m; package mage.cards.m;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
@ -12,15 +10,16 @@ import mage.abilities.keyword.EnchantAbility;
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.Outcome; import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.predicate.Predicates; import mage.filter.predicate.Predicates;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import java.util.UUID;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public final class Malfunction extends CardImpl { public final class Malfunction extends CardImpl {
@ -34,7 +33,7 @@ public final class Malfunction extends CardImpl {
} }
public Malfunction(UUID ownerId, CardSetInfo setInfo) { public Malfunction(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{U}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{U}");
this.subtype.add(SubType.AURA); this.subtype.add(SubType.AURA);
// Enchant artifact or creature. // Enchant artifact or creature.
@ -45,7 +44,7 @@ public final class Malfunction extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
// When Malfunction enters the battlefield, tap enchanted permanent. // When Malfunction enters the battlefield, tap enchanted permanent.
this.addAbility(new EntersBattlefieldTriggeredAbility(new TapEnchantedEffect())); this.addAbility(new EntersBattlefieldTriggeredAbility(new TapEnchantedEffect().setText("tap enchanted permanent")));
// Enchanted permanent doesn't untap during its controller's untap step. // Enchanted permanent doesn't untap during its controller's untap step.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DontUntapInControllersUntapStepEnchantedEffect("permanent"))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DontUntapInControllersUntapStepEnchantedEffect("permanent")));

View file

@ -1,7 +1,5 @@
package mage.cards.m; package mage.cards.m;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
@ -13,36 +11,42 @@ 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.constants.Zone;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicates; import mage.filter.predicate.Predicates;
import mage.game.permanent.token.ServoToken; import mage.game.permanent.token.ServoToken;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class MasterTrinketeer extends CardImpl { public final class MasterTrinketeer extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Servo and Thopter creatures"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Servos and Thopters");
static { static {
filter.add(Predicates.or(SubType.SERVO.getPredicate(), filter.add(Predicates.or(
SubType.THOPTER.getPredicate())); SubType.SERVO.getPredicate(),
SubType.THOPTER.getPredicate()
));
} }
public MasterTrinketeer(UUID ownerId, CardSetInfo setInfo) { public MasterTrinketeer(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
this.subtype.add(SubType.DWARF); this.subtype.add(SubType.DWARF);
this.subtype.add(SubType.ARTIFICER); this.subtype.add(SubType.ARTIFICER);
this.power = new MageInt(3); this.power = new MageInt(3);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Servo and Thopter creatures you control get +1/+1. // Servo and Thopter creatures you control get +1/+1.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, filter, false))); this.addAbility(new SimpleStaticAbility(new BoostControlledEffect(
1, 1, Duration.WhileOnBattlefield, filter, false
)));
// {3}{W}: Create a 1/1 colorless Servo artifact creature token. // {3}{W}: Create a 1/1 colorless Servo artifact creature token.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new ServoToken(), 1), new ManaCostsImpl("{3}{W}"))); this.addAbility(new SimpleActivatedAbility(
new CreateTokenEffect(new ServoToken(), 1), new ManaCostsImpl<>("{3}{W}")
));
} }
private MasterTrinketeer(final MasterTrinketeer card) { private MasterTrinketeer(final MasterTrinketeer card) {

View file

@ -38,7 +38,8 @@ public final class MidnightOil extends CardImpl {
// At the beginning of your draw step, draw an additional card and remove two hour counters from Midnight Oil. // At the beginning of your draw step, draw an additional card and remove two hour counters from Midnight Oil.
Ability ability = new BeginningOfDrawTriggeredAbility( Ability ability = new BeginningOfDrawTriggeredAbility(
new DrawCardSourceControllerEffect(1), new DrawCardSourceControllerEffect(1)
.setText("draw an additional card"),
TargetController.YOU, false TargetController.YOU, false
); );
ability.addEffect(new RemoveCounterSourceEffect( ability.addEffect(new RemoveCounterSourceEffect(

View file

@ -1,34 +1,24 @@
package mage.cards.n; package mage.cards.n;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.UUID;
import mage.MageObject; import mage.MageObject;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility; import mage.abilities.LoyaltyAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.keyword.TrampleAbility; import mage.abilities.keyword.TrampleAbility;
import mage.cards.Card; import mage.cards.*;
import mage.cards.CardImpl; import mage.constants.*;
import mage.cards.CardSetInfo;
import mage.cards.Cards;
import mage.cards.CardsImpl;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.common.FilterLandCard; import mage.filter.common.FilterLandCard;
import mage.game.Game; import mage.game.Game;
import mage.players.Player; import mage.players.Player;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class NissaNaturesArtisan extends CardImpl { public final class NissaNaturesArtisan extends CardImpl {
@ -48,13 +38,12 @@ public final class NissaNaturesArtisan extends CardImpl {
this.addAbility(new LoyaltyAbility(new NissaNaturesArtisanEffect(), -4)); this.addAbility(new LoyaltyAbility(new NissaNaturesArtisanEffect(), -4));
// -12: Creatures you control get +5/+5 and gain trample until end of turn. // -12: Creatures you control get +5/+5 and gain trample until end of turn.
Effect effect = new BoostControlledEffect(5, 5, Duration.EndOfTurn); LoyaltyAbility ability = new LoyaltyAbility(new BoostControlledEffect(
effect.setText("Creature you control get +5/+5"); 5, 5, Duration.EndOfTurn
LoyaltyAbility ability = new LoyaltyAbility(effect, -12); ).setText("creatures you control get +5/+5"), -12);
Effect effect2 = new GainAbilityControlledEffect( ability.addEffect(new GainAbilityControlledEffect(
TrampleAbility.getInstance(), Duration.EndOfTurn); TrampleAbility.getInstance(), Duration.EndOfTurn
effect2.setText("and gain trample until end of turn"); ).setText("and gain trample until end of turn"));
ability.addEffect(effect2);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,21 +1,17 @@
package mage.cards.n; package mage.cards.n;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.LoyaltyAbility; import mage.abilities.LoyaltyAbility;
import mage.abilities.effects.common.GetEmblemEffect; import mage.abilities.effects.common.GetEmblemEffect;
import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.abilities.effects.common.UntapTargetEffect; import mage.abilities.effects.common.UntapTargetEffect;
import mage.abilities.effects.common.continuous.BecomesCreatureTargetEffect; import mage.abilities.effects.common.continuous.BecomesCreatureTargetEffect;
import mage.abilities.keyword.HasteAbility; import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.*;
import mage.constants.SubType; import mage.filter.FilterCard;
import mage.constants.Duration;
import mage.constants.SuperType;
import mage.constants.TargetController;
import mage.filter.common.FilterLandPermanent; import mage.filter.common.FilterLandPermanent;
import mage.filter.common.FilterPermanentCard; import mage.filter.common.FilterPermanentCard;
import mage.game.command.emblems.NissaVitalForceEmblem; import mage.game.command.emblems.NissaVitalForceEmblem;
@ -23,13 +19,15 @@ import mage.game.permanent.token.TokenImpl;
import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetCardInYourGraveyard;
import mage.target.common.TargetLandPermanent; import mage.target.common.TargetLandPermanent;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class NissaVitalForce extends CardImpl { public final class NissaVitalForce extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent("land you control"); private static final FilterLandPermanent filter = new FilterLandPermanent("land you control");
private static final FilterCard filter2 = new FilterPermanentCard("permanent card from your graveyard");
static { static {
filter.add(TargetController.YOU.getControllerPredicate()); filter.add(TargetController.YOU.getControllerPredicate());
@ -44,13 +42,15 @@ public final class NissaVitalForce extends CardImpl {
// +1: Untap target land you control. Until your next turn, it becomes a 5/5 Elemental creature with haste. It's still a land. // +1: Untap target land you control. Until your next turn, it becomes a 5/5 Elemental creature with haste. It's still a land.
LoyaltyAbility ability = new LoyaltyAbility(new UntapTargetEffect(), 1); LoyaltyAbility ability = new LoyaltyAbility(new UntapTargetEffect(), 1);
ability.addEffect(new BecomesCreatureTargetEffect(new NissaVitalForceToken(), false, true, Duration.UntilYourNextTurn)); ability.addEffect(new BecomesCreatureTargetEffect(
new NissaVitalForceToken(), false, true, Duration.UntilYourNextTurn
).setText("Until your next turn, it becomes a 5/5 Elemental creature with haste. It's still a land"));
ability.addTarget(new TargetLandPermanent(filter)); ability.addTarget(new TargetLandPermanent(filter));
this.addAbility(ability); this.addAbility(ability);
// -3: Return target permanent card from your graveyard to your hand. // -3: Return target permanent card from your graveyard to your hand.
ability = new LoyaltyAbility(new ReturnToHandTargetEffect(), -3); ability = new LoyaltyAbility(new ReturnFromGraveyardToHandTargetEffect(), -3);
ability.addTarget(new TargetCardInYourGraveyard(new FilterPermanentCard("permanent card from your graveyard"))); ability.addTarget(new TargetCardInYourGraveyard(filter2));
this.addAbility(ability); this.addAbility(ability);
// -6: You get an emblem with "Whenever a land enters the battlefield under your control, you may draw a card." // -6: You get an emblem with "Whenever a land enters the battlefield under your control, you may draw a card."
@ -78,6 +78,7 @@ class NissaVitalForceToken extends TokenImpl {
this.toughness = new MageInt(5); this.toughness = new MageInt(5);
this.addAbility(HasteAbility.getInstance()); this.addAbility(HasteAbility.getInstance());
} }
public NissaVitalForceToken(final NissaVitalForceToken token) { public NissaVitalForceToken(final NissaVitalForceToken token) {
super(token); super(token);
} }

View file

@ -1,22 +1,17 @@
package mage.cards.o; package mage.cards.o;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.effects.common.ReturnToHandSourceEffect; import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.*;
import mage.constants.SubType;
import mage.constants.SetTargetPointer;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.common.FilterArtifactPermanent; import mage.filter.common.FilterArtifactPermanent;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class OvalchaseDaredevil extends CardImpl { public final class OvalchaseDaredevil extends CardImpl {
@ -35,7 +30,10 @@ public final class OvalchaseDaredevil extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Whenever an artifact enters the battlefield under your control, you may return Ovalchase Daredevil from your graveyard to your hand. // Whenever an artifact enters the battlefield under your control, you may return Ovalchase Daredevil from your graveyard to your hand.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.GRAVEYARD, new ReturnToHandSourceEffect(), filter, true, SetTargetPointer.NONE, null, true)); this.addAbility(new EntersBattlefieldAllTriggeredAbility(
Zone.GRAVEYARD, new ReturnSourceFromGraveyardToHandEffect(), filter,
true, SetTargetPointer.NONE, null, true
));
} }
private OvalchaseDaredevil(final OvalchaseDaredevil card) { private OvalchaseDaredevil(final OvalchaseDaredevil card) {

View file

@ -35,7 +35,7 @@ public final class PadeemConsulOfInnovation extends CardImpl {
// Artifacts you control have hexproof. // Artifacts you control have hexproof.
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect( this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
HexproofAbility.getInstance(), Duration.WhileOnBattlefield, HexproofAbility.getInstance(), Duration.WhileOnBattlefield,
StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACTS, false StaticFilters.FILTER_PERMANENT_ARTIFACTS, false
))); )));
// At the beginning of your upkeep, if you control the artifact with the highest converted mana cost or tied for the highest converted mana cost, draw a card. // At the beginning of your upkeep, if you control the artifact with the highest converted mana cost or tied for the highest converted mana cost, draw a card.

View file

@ -23,7 +23,7 @@ public final class RenegadeTactics extends CardImpl {
this.getSpellAbility().addEffect(new CantBlockTargetEffect(Duration.EndOfTurn)); this.getSpellAbility().addEffect(new CantBlockTargetEffect(Duration.EndOfTurn));
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
// Draw a card. // Draw a card.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("<br>"));
} }
private RenegadeTactics(final RenegadeTactics card) { private RenegadeTactics(final RenegadeTactics card) {

View file

@ -30,7 +30,7 @@ public final class SaheelisArtistry extends CardImpl {
Mode mode1 = new Mode(); Mode mode1 = new Mode();
effect = new CreateTokenCopyTargetEffect(); effect = new CreateTokenCopyTargetEffect();
effect.setBecomesArtifact(true); effect.setBecomesArtifact(true);
effect.setText("Create a token that's a copy of target creature, except that it's an artifact in addition to its other types"); effect.setText("Create a token that's a copy of target creature, except it's an artifact in addition to its other types");
mode1.addEffect(effect); mode1.addEffect(effect);
mode1.addTarget(new TargetCreaturePermanent().withChooseHint("create copy of that, artifact type")); mode1.addTarget(new TargetCreaturePermanent().withChooseHint("create copy of that, artifact type"));
this.getSpellAbility().addMode(mode1); this.getSpellAbility().addMode(mode1);

View file

@ -1,7 +1,5 @@
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.CantBlockAbility; import mage.abilities.common.CantBlockAbility;
@ -19,8 +17,9 @@ import mage.filter.common.FilterCreatureCard;
import mage.filter.predicate.mageobject.AnotherCardPredicate; import mage.filter.predicate.mageobject.AnotherCardPredicate;
import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
/** /**
*
* @author emerald000 * @author emerald000
*/ */
public final class ScrapheapScrounger extends CardImpl { public final class ScrapheapScrounger extends CardImpl {
@ -41,7 +40,7 @@ public final class ScrapheapScrounger extends CardImpl {
this.addAbility(new CantBlockAbility()); this.addAbility(new CantBlockAbility());
// {1}{B}, Exile another creature card from your graveyard: Return Scrapheap Scrounger from your graveyard to the battlefield. // {1}{B}, Exile another creature card from your graveyard: Return Scrapheap Scrounger from your graveyard to the battlefield.
Ability ability = new SimpleActivatedAbility(Zone.GRAVEYARD, new ReturnSourceFromGraveyardToBattlefieldEffect(false), new ManaCostsImpl<>("{1}{B}")); Ability ability = new SimpleActivatedAbility(Zone.GRAVEYARD, new ReturnSourceFromGraveyardToBattlefieldEffect(false, false), new ManaCostsImpl<>("{1}{B}"));
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(filter))); ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(filter)));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,7 +1,5 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.Effect; import mage.abilities.effects.Effect;
@ -11,22 +9,24 @@ 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.FilterCard;
import mage.filter.common.FilterCreatureCard;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class SelfAssembler extends CardImpl { public final class SelfAssembler extends CardImpl {
private static final FilterCard filter = new FilterCard("an Assembly-Worker card"); private static final FilterCard filter = new FilterCreatureCard("an Assembly-Worker creature card");
static { static {
filter.add(SubType.ASSEMBLY_WORKER.getPredicate()); filter.add(SubType.ASSEMBLY_WORKER.getPredicate());
} }
public SelfAssembler(UUID ownerId, CardSetInfo setInfo) { public SelfAssembler(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{5}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{5}");
this.subtype.add(SubType.ASSEMBLY_WORKER); this.subtype.add(SubType.ASSEMBLY_WORKER);
this.power = new MageInt(4); this.power = new MageInt(4);
this.toughness = new MageInt(4); this.toughness = new MageInt(4);
@ -34,7 +34,7 @@ public final class SelfAssembler extends CardImpl {
// When Self-Assembler enters the battlefield, you may search your library for an Assembly-Worker creature card, reveal it, put it into your hand, // When Self-Assembler enters the battlefield, you may search your library for an Assembly-Worker creature card, reveal it, put it into your hand,
// then shuffle your library. // then shuffle your library.
Effect effect = new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 1, filter), true, true); Effect effect = new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 1, filter), true, true);
effect.setText("you may search your library for an Assembly-Worker card, reveal it, put it into your hand, then shuffle"); effect.setText("you may search your library for an Assembly-Worker creature card, reveal it, put it into your hand, then shuffle");
this.addAbility(new EntersBattlefieldTriggeredAbility(effect, true)); this.addAbility(new EntersBattlefieldTriggeredAbility(effect, true));
} }

View file

@ -1,7 +1,5 @@
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.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
@ -13,30 +11,34 @@ import mage.abilities.keyword.IndestructibleAbility;
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.Duration; import mage.constants.Duration;
import mage.constants.Zone; import mage.constants.SubType;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.common.FilterControlledArtifactPermanent; import mage.filter.StaticFilters;
import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetControlledPermanent;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class SyndicateTrafficker extends CardImpl { public final class SyndicateTrafficker extends CardImpl {
public SyndicateTrafficker(UUID ownerId, CardSetInfo setInfo) { public SyndicateTrafficker(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}");
this.subtype.add(SubType.AETHERBORN); this.subtype.add(SubType.AETHERBORN);
this.subtype.add(SubType.ROGUE); this.subtype.add(SubType.ROGUE);
this.power = new MageInt(3); this.power = new MageInt(3);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// {1}, Sacrifice an artifact: Put a +1/+1 counter on Syndicate Trafficker. It gains indestructible until end of turn. // {1}, Sacrifice an artifact: Put a +1/+1 counter on Syndicate Trafficker. It gains indestructible until end of turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.P1P1.createInstance()), new GenericManaCost(1)); Ability ability = new SimpleActivatedAbility(
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(new FilterControlledArtifactPermanent("an artifact")))); new AddCountersSourceEffect(CounterType.P1P1.createInstance()), new GenericManaCost(1)
ability.addEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn)); );
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT_AN)));
ability.addEffect(new GainAbilitySourceEffect(
IndestructibleAbility.getInstance(), Duration.EndOfTurn
).setText("It gains indestructible until end of turn"));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,7 +1,6 @@
package mage.cards.t; package mage.cards.t;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@ -15,24 +14,30 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.counters.CounterType; import mage.counters.CounterType;
import java.util.UUID;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public final class ThrivingGrubs extends CardImpl { public final class ThrivingGrubs extends CardImpl {
public ThrivingGrubs(UUID ownerId, CardSetInfo setInfo) { public ThrivingGrubs(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}");
this.subtype.add(SubType.GREMLIN); this.subtype.add(SubType.GREMLIN);
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// When Thriving Grubs enters the battlefield, you get {E}{E}. // When Thriving Grubs enters the battlefield, you get {E}{E}.
this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2), false)); this.addAbility(new EntersBattlefieldTriggeredAbility(
new GetEnergyCountersControllerEffect(2), false
));
// Whenever Thriving Grubs attacks, you may pay {E}{E}. If you do, put a +1/+1 counter on it. // Whenever Thriving Grubs attacks, you may pay {E}{E}. If you do, put a +1/+1 counter on it.
this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), new PayEnergyCost(2)), false, this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(
"Whenever {this} attacks you may pay {E}{E}. If you do, put a +1/+1 counter on it.")); new AddCountersSourceEffect(CounterType.P1P1.createInstance())
.setText("put a +1/+1 counter on it"),
new PayEnergyCost(2)
), false));
} }
private ThrivingGrubs(final ThrivingGrubs card) { private ThrivingGrubs(final ThrivingGrubs card) {

View file

@ -1,7 +1,5 @@
package mage.cards.t; package mage.cards.t;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@ -15,14 +13,15 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.counters.CounterType; import mage.counters.CounterType;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class ThrivingIbex extends CardImpl { public final class ThrivingIbex extends CardImpl {
public ThrivingIbex(UUID ownerId, CardSetInfo setInfo) { public ThrivingIbex(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}");
this.subtype.add(SubType.GOAT); this.subtype.add(SubType.GOAT);
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(4); this.toughness = new MageInt(4);
@ -31,8 +30,11 @@ public final class ThrivingIbex extends CardImpl {
this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2))); this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2)));
// Whenever Thriving Ibex attacks, you may pay {E}{E}. If you do, put a +1/+1 counter on it. // Whenever Thriving Ibex attacks, you may pay {E}{E}. If you do, put a +1/+1 counter on it.
this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), new PayEnergyCost(2)), false, this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(
"Whenever {this} attacks you may pay {E}{E}. If you do, put a +1/+1 counter on it.")); new AddCountersSourceEffect(CounterType.P1P1.createInstance())
.setText("put a +1/+1 counter on it"),
new PayEnergyCost(2)
), false));
} }
private ThrivingIbex(final ThrivingIbex card) { private ThrivingIbex(final ThrivingIbex card) {

View file

@ -1,7 +1,5 @@
package mage.cards.t; package mage.cards.t;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@ -15,14 +13,15 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.counters.CounterType; import mage.counters.CounterType;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class ThrivingRats extends CardImpl { public final class ThrivingRats extends CardImpl {
public ThrivingRats(UUID ownerId, CardSetInfo setInfo) { public ThrivingRats(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}");
this.subtype.add(SubType.RAT); this.subtype.add(SubType.RAT);
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
@ -31,8 +30,11 @@ public final class ThrivingRats extends CardImpl {
this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2))); this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2)));
// Whenever Thriving Rats attacks, you may pay {E}{E}. If you do, put a +1/+1 counter on it. // Whenever Thriving Rats attacks, you may pay {E}{E}. If you do, put a +1/+1 counter on it.
this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), new PayEnergyCost(2)), false, this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(
"Whenever {this} attacks you may pay {E}{E}. If you do, put a +1/+1 counter on it.")); new AddCountersSourceEffect(CounterType.P1P1.createInstance())
.setText("put a +1/+1 counter on it"),
new PayEnergyCost(2)
), false));
} }
private ThrivingRats(final ThrivingRats card) { private ThrivingRats(final ThrivingRats card) {

View file

@ -1,7 +1,5 @@
package mage.cards.t; package mage.cards.t;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@ -15,14 +13,15 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.counters.CounterType; import mage.counters.CounterType;
import java.util.UUID;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public final class ThrivingRhino extends CardImpl { public final class ThrivingRhino extends CardImpl {
public ThrivingRhino(UUID ownerId, CardSetInfo setInfo) { public ThrivingRhino(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
this.subtype.add(SubType.RHINO); this.subtype.add(SubType.RHINO);
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
@ -31,8 +30,11 @@ public final class ThrivingRhino extends CardImpl {
this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2))); this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2)));
// Whenever Thriving Rhino attacks, you may pay {E}{E}. If you do, put a +1/+1 counter on it. // Whenever Thriving Rhino attacks, you may pay {E}{E}. If you do, put a +1/+1 counter on it.
this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), new PayEnergyCost(2)), false)); this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(
new AddCountersSourceEffect(CounterType.P1P1.createInstance())
.setText("put a +1/+1 counter on it"),
new PayEnergyCost(2)
), false));
} }
private ThrivingRhino(final ThrivingRhino card) { private ThrivingRhino(final ThrivingRhino card) {

View file

@ -1,7 +1,5 @@
package mage.cards.t; package mage.cards.t;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@ -15,14 +13,15 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.counters.CounterType; import mage.counters.CounterType;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class ThrivingTurtle extends CardImpl { public final class ThrivingTurtle extends CardImpl {
public ThrivingTurtle(UUID ownerId, CardSetInfo setInfo) { public ThrivingTurtle(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{U}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{U}");
this.subtype.add(SubType.TURTLE); this.subtype.add(SubType.TURTLE);
this.power = new MageInt(0); this.power = new MageInt(0);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
@ -31,7 +30,11 @@ public final class ThrivingTurtle extends CardImpl {
this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2))); this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2)));
// Whenever Thriving Turtle attacks, you may pay {E}{E}. If you do, put a +1/+1 counter on it. // Whenever Thriving Turtle attacks, you may pay {E}{E}. If you do, put a +1/+1 counter on it.
this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), new PayEnergyCost(2)), false)); this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(
new AddCountersSourceEffect(CounterType.P1P1.createInstance())
.setText("put a +1/+1 counter on it"),
new PayEnergyCost(2)
), false));
} }
private ThrivingTurtle(final ThrivingTurtle card) { private ThrivingTurtle(final ThrivingTurtle card) {

View file

@ -38,7 +38,7 @@ public final class WispweaverAngel extends CardImpl {
// When Wispweaver Angel enters the battlefield, you may exile another target creature you control, then return that card to the battlefield under its owner's control. // When Wispweaver Angel enters the battlefield, you may exile another target creature you control, then return that card to the battlefield under its owner's control.
Ability ability = new EntersBattlefieldTriggeredAbility(new ExileTargetForSourceEffect(), true); Ability ability = new EntersBattlefieldTriggeredAbility(new ExileTargetForSourceEffect(), true);
ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false)); ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false).concatBy(","));
ability.addTarget(new TargetControlledCreaturePermanent(1, 1, filter, false)); ability.addTarget(new TargetControlledCreaturePermanent(1, 1, filter, false));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -62,7 +62,7 @@ public class VerifyCardDataTest {
private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class); private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class);
private static final String FULL_ABILITIES_CHECK_SET_CODE = "AER"; // check all abilities and output cards with wrong abilities texts; private static final String FULL_ABILITIES_CHECK_SET_CODE = "KLD"; // check all abilities and output cards with wrong abilities texts;
private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: auto-fix sample decks by test_checkSampleDecks test run private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: auto-fix sample decks by test_checkSampleDecks test run
private static final boolean ONLY_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages private static final boolean ONLY_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages

View file

@ -43,6 +43,6 @@ public class CrewsVehicleSourceTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public String getTriggerPhrase() { public String getTriggerPhrase() {
return "When {this} crews a Vehicle, " ; return "Whenever {this} crews a Vehicle, " ;
} }
} }

View file

@ -51,7 +51,7 @@ public class PreventAllDamageToPlayersEffect extends PreventionEffectImpl {
} }
sb.append("damage that would be dealt to players"); sb.append("damage that would be dealt to players");
if (duration == Duration.EndOfTurn) { if (duration == Duration.EndOfTurn) {
sb.append(" this turn"); sb.append(" this turn");
} }
return sb.toString(); return sb.toString();
} }

View file

@ -1,6 +1,7 @@
package mage.abilities.effects.common.combat; package mage.abilities.effects.common.combat;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.Mode;
import mage.abilities.effects.RestrictionEffect; import mage.abilities.effects.RestrictionEffect;
import mage.constants.Duration; import mage.constants.Duration;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
@ -19,11 +20,6 @@ public class CantBeBlockedByAllTargetEffect extends RestrictionEffect {
public CantBeBlockedByAllTargetEffect(FilterCreaturePermanent filterBlockedBy, Duration duration) { public CantBeBlockedByAllTargetEffect(FilterCreaturePermanent filterBlockedBy, Duration duration) {
super(duration); super(duration);
this.filterBlockedBy = filterBlockedBy; this.filterBlockedBy = filterBlockedBy;
staticText = "target creature"
+ " can't be blocked "
+ (duration == EndOfTurn ? "this turn " : "")
+ (filterBlockedBy.getMessage().startsWith("except by") ? "" : "by ")
+ filterBlockedBy.getMessage();
} }
public CantBeBlockedByAllTargetEffect(final CantBeBlockedByAllTargetEffect effect) { public CantBeBlockedByAllTargetEffect(final CantBeBlockedByAllTargetEffect effect) {
@ -45,4 +41,17 @@ public class CantBeBlockedByAllTargetEffect extends RestrictionEffect {
public CantBeBlockedByAllTargetEffect copy() { public CantBeBlockedByAllTargetEffect copy() {
return new CantBeBlockedByAllTargetEffect(this); return new CantBeBlockedByAllTargetEffect(this);
} }
@Override
public String getText(Mode mode) {
if (staticText != null && !staticText.isEmpty()) {
return staticText;
}
return "target "
+ mode.getTargets().get(0).getTargetName()
+ " can't be blocked "
+ (duration == EndOfTurn ? "this turn " : "")
+ (filterBlockedBy.getMessage().startsWith("except by") ? "" : "by ")
+ filterBlockedBy.getMessage();
}
} }

View file

@ -80,7 +80,7 @@ public class AddCardTypeSourceEffect extends ContinuousEffectImpl {
} }
sb.append(cardType.toString().toLowerCase(Locale.ENGLISH)).append(" "); sb.append(cardType.toString().toLowerCase(Locale.ENGLISH)).append(" ");
} }
sb.append(" in addition to its other types ").append(this.getDuration().toString()); sb.append("in addition to its other types ").append(this.getDuration().toString());
return sb.toString(); return sb.toString();
} }
} }

View file

@ -8,6 +8,7 @@ import mage.counters.Counter;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.util.CardUtil;
/** /**
* @author Loki * @author Loki
@ -66,7 +67,7 @@ public class RemoveCounterSourceEffect extends OneShotEffect {
private void setText() { private void setText() {
if (counter.getCount() > 1) { if (counter.getCount() > 1) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("remove ").append(Integer.toString(counter.getCount())).append(' ').append(counter.getName()).append(" counters from {this}"); sb.append("remove ").append(CardUtil.numberToText(counter.getCount())).append(' ').append(counter.getName()).append(" counters from {this}");
staticText = sb.toString(); staticText = sb.toString();
} else { } else {
staticText = "remove " + CounterType.findArticle(counter.getName()) + " " + counter.getName() + " counter from {this}"; staticText = "remove " + CounterType.findArticle(counter.getName()) + " " + counter.getName() + " counter from {this}";