forked from External/mage
[J25] various text fixes
This commit is contained in:
parent
cfd51d7dce
commit
1ab9eeaad8
17 changed files with 101 additions and 134 deletions
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.a;
|
package mage.cards.a;
|
||||||
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
|
|
@ -18,11 +17,11 @@ import mage.game.permanent.Permanent;
|
||||||
import mage.target.TargetPermanent;
|
import mage.target.TargetPermanent;
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.Objects;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author spjspj
|
* @author spjspj
|
||||||
*/
|
*/
|
||||||
public final class AuramancersGuise extends CardImpl {
|
public final class AuramancersGuise extends CardImpl {
|
||||||
|
|
@ -36,16 +35,16 @@ public final class AuramancersGuise 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);
|
this.addAbility(new EnchantAbility(auraTarget));
|
||||||
this.addAbility(ability);
|
|
||||||
|
|
||||||
// Enchanted creature gets +2/+2 for each Aura attached to it and has vigilance.
|
// Enchanted creature gets +2/+2 for each Aura attached to it and has vigilance.
|
||||||
DynamicValue ptBoost = new EnchantedCreatureAurasCount();
|
Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect(
|
||||||
BoostEnchantedEffect effect = new BoostEnchantedEffect(ptBoost, ptBoost, Duration.WhileOnBattlefield);
|
AuramancersGuiseValue.instance, AuramancersGuiseValue.instance, Duration.WhileOnBattlefield
|
||||||
effect.setText("Enchanted creature gets +2/+2 for each Aura attached to it");
|
));
|
||||||
SimpleStaticAbility ability2 = new SimpleStaticAbility(effect);
|
ability.addEffect(new GainAbilityAttachedEffect(
|
||||||
ability2.addEffect(new GainAbilityAttachedEffect(VigilanceAbility.getInstance(), AttachmentType.AURA).setText("and has vigilance"));
|
VigilanceAbility.getInstance(), AttachmentType.AURA
|
||||||
this.addAbility(ability2);
|
).setText("and has vigilance"));
|
||||||
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
private AuramancersGuise(final AuramancersGuise card) {
|
private AuramancersGuise(final AuramancersGuise card) {
|
||||||
|
|
@ -58,48 +57,40 @@ public final class AuramancersGuise extends CardImpl {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class EnchantedCreatureAurasCount implements DynamicValue {
|
enum AuramancersGuiseValue implements DynamicValue {
|
||||||
|
instance;
|
||||||
public EnchantedCreatureAurasCount() {
|
|
||||||
}
|
|
||||||
|
|
||||||
private EnchantedCreatureAurasCount(final EnchantedCreatureAurasCount dynamicValue) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int calculate(Game game, Ability sourceAbility, Effect effect) {
|
public int calculate(Game game, Ability sourceAbility, Effect effect) {
|
||||||
int count = 0;
|
Permanent permanent = Optional
|
||||||
Permanent aura = game.getPermanent(sourceAbility.getSourceId());
|
.ofNullable(sourceAbility.getSourcePermanentIfItStillExists(game))
|
||||||
if (aura != null) {
|
.map(Permanent::getAttachedTo)
|
||||||
Permanent permanent = game.getPermanent(aura.getAttachedTo());
|
.map(game::getPermanent)
|
||||||
if (permanent != null) {
|
.orElse(null);
|
||||||
List<UUID> attachments = permanent.getAttachments();
|
return permanent != null
|
||||||
for (UUID attachmentId : attachments) {
|
? 2 * permanent
|
||||||
Permanent attached = game.getPermanent(attachmentId);
|
.getAttachments()
|
||||||
if (attached != null && attached.hasSubtype(SubType.AURA, game)) {
|
.stream()
|
||||||
count++;
|
.map(game::getPermanent)
|
||||||
}
|
.filter(Objects::nonNull)
|
||||||
|
.filter(p -> p.hasSubtype(SubType.AURA, game))
|
||||||
}
|
.mapToInt(x -> 1)
|
||||||
return 2 * count;
|
.sum()
|
||||||
}
|
: 0;
|
||||||
}
|
|
||||||
return count;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EnchantedCreatureAurasCount copy() {
|
public AuramancersGuiseValue copy() {
|
||||||
return new EnchantedCreatureAurasCount(this);
|
return this;
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "1";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getMessage() {
|
public String getMessage() {
|
||||||
return "of its auras";
|
return "for each Aura attached to it";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "2";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -48,8 +48,8 @@ class BountyOfSkemfarEffect extends OneShotEffect {
|
||||||
|
|
||||||
BountyOfSkemfarEffect() {
|
BountyOfSkemfarEffect() {
|
||||||
super(Outcome.Benefit);
|
super(Outcome.Benefit);
|
||||||
staticText = "reveal the top six cards of your library. You may put a land card from among them " +
|
staticText = "reveal the top six cards of your library. You may put up to one land card from among them " +
|
||||||
"onto the battlefield tapped and an Elf card from among them into your hand. " +
|
"onto the battlefield tapped and up to one Elf card from among them into your hand. " +
|
||||||
"Put the rest on the bottom of your library in a random order";
|
"Put the rest on the bottom of your library in a random order";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ public final class FaithfulPikemaster extends CardImpl {
|
||||||
// As long as it's your turn, Faithful Pikemaster has first strike.
|
// As long as it's your turn, Faithful Pikemaster has first strike.
|
||||||
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
|
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
|
||||||
new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield),
|
new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield),
|
||||||
MyTurnCondition.instance, "during your turn, {this} has first strike."
|
MyTurnCondition.instance, "as long as it's your turn, {this} has first strike."
|
||||||
)).addHint(MyTurnHint.instance));
|
)).addHint(MyTurnHint.instance));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -167,7 +167,7 @@ class GodsendRuleModifyingEffect extends ContinuousRuleModifyingEffectImpl {
|
||||||
|
|
||||||
GodsendRuleModifyingEffect() {
|
GodsendRuleModifyingEffect() {
|
||||||
super(Duration.WhileOnBattlefield, Outcome.Detriment);
|
super(Duration.WhileOnBattlefield, Outcome.Detriment);
|
||||||
staticText = "Your opponents can't cast cards with the same name as cards exiled with {this}";
|
staticText = "Your opponents can't cast spells with the same name as a card exiled with {this}";
|
||||||
}
|
}
|
||||||
|
|
||||||
private GodsendRuleModifyingEffect(final GodsendRuleModifyingEffect effect) {
|
private GodsendRuleModifyingEffect(final GodsendRuleModifyingEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,8 @@
|
||||||
|
|
||||||
package mage.cards.l;
|
package mage.cards.l;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
|
import mage.abilities.condition.Condition;
|
||||||
import mage.abilities.condition.common.SourceHasCounterCondition;
|
import mage.abilities.condition.common.SourceHasCounterCondition;
|
||||||
import mage.abilities.decorator.ConditionalContinuousEffect;
|
import mage.abilities.decorator.ConditionalContinuousEffect;
|
||||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||||
|
|
@ -12,26 +11,29 @@ 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.counters.CounterType;
|
import mage.counters.CounterType;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author fireshoes
|
* @author fireshoes
|
||||||
*/
|
*/
|
||||||
public final class Lightwalker extends CardImpl {
|
public final class Lightwalker extends CardImpl {
|
||||||
|
|
||||||
|
private static final Condition condition = new SourceHasCounterCondition(CounterType.P1P1);
|
||||||
|
|
||||||
public Lightwalker(UUID ownerId, CardSetInfo setInfo) {
|
public Lightwalker(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}");
|
||||||
this.subtype.add(SubType.HUMAN);
|
this.subtype.add(SubType.HUMAN);
|
||||||
this.subtype.add(SubType.WARRIOR);
|
this.subtype.add(SubType.WARRIOR);
|
||||||
this.power = new MageInt(2);
|
this.power = new MageInt(2);
|
||||||
this.toughness = new MageInt(1);
|
this.toughness = new MageInt(1);
|
||||||
|
|
||||||
// Lightwalker has flying as long as it has a +1/+1 counter on it.
|
// Lightwalker has flying as long as it has a +1/+1 counter on it.
|
||||||
this.addAbility(new SimpleStaticAbility(
|
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
|
||||||
new ConditionalContinuousEffect(new GainAbilitySourceEffect(FlyingAbility.getInstance()),
|
new GainAbilitySourceEffect(FlyingAbility.getInstance()), condition,
|
||||||
new SourceHasCounterCondition(CounterType.P1P1),"Lightwalker has flying as long as it has a +1/+1 counter on it")));
|
"{this} has flying as long as it has a +1/+1 counter on it"
|
||||||
|
)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Lightwalker(final Lightwalker card) {
|
private Lightwalker(final Lightwalker card) {
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ class NabanDeanOfIterationEffect extends ReplacementEffectImpl {
|
||||||
|
|
||||||
NabanDeanOfIterationEffect() {
|
NabanDeanOfIterationEffect() {
|
||||||
super(Duration.WhileOnBattlefield, Outcome.Benefit);
|
super(Duration.WhileOnBattlefield, Outcome.Benefit);
|
||||||
staticText = "If a Wizard entering under your control causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time";
|
staticText = "if a Wizard you control entering causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time";
|
||||||
}
|
}
|
||||||
|
|
||||||
private NabanDeanOfIterationEffect(final NabanDeanOfIterationEffect effect) {
|
private NabanDeanOfIterationEffect(final NabanDeanOfIterationEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,28 @@
|
||||||
package mage.cards.p;
|
package mage.cards.p;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
import mage.MageObject;
|
||||||
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.ControlsPermanentGreatestCMCCondition;
|
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
|
||||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||||
|
import mage.abilities.hint.ConditionHint;
|
||||||
|
import mage.abilities.hint.Hint;
|
||||||
import mage.abilities.keyword.HexproofAbility;
|
import mage.abilities.keyword.HexproofAbility;
|
||||||
|
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.*;
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.Duration;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.constants.SuperType;
|
||||||
|
import mage.filter.FilterPermanent;
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
|
import mage.filter.common.FilterControlledArtifactPermanent;
|
||||||
|
import mage.filter.predicate.Predicate;
|
||||||
|
import mage.game.Game;
|
||||||
|
import mage.game.permanent.Permanent;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
|
@ -21,8 +31,16 @@ import java.util.UUID;
|
||||||
*/
|
*/
|
||||||
public final class PadeemConsulOfInnovation extends CardImpl {
|
public final class PadeemConsulOfInnovation extends CardImpl {
|
||||||
|
|
||||||
private static final Condition condition
|
private static final FilterPermanent filter = new FilterControlledArtifactPermanent(
|
||||||
= new ControlsPermanentGreatestCMCCondition(StaticFilters.FILTER_PERMANENT_ARTIFACT);
|
"you control the artifact with the greatest mana value or tied for the greatest mana value"
|
||||||
|
);
|
||||||
|
|
||||||
|
static {
|
||||||
|
filter.add(PadeemConsulOfInnovationPredicate.instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter);
|
||||||
|
private static final Hint hint = new ConditionHint(condition);
|
||||||
|
|
||||||
public PadeemConsulOfInnovation(UUID ownerId, CardSetInfo setInfo) {
|
public PadeemConsulOfInnovation(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}");
|
||||||
|
|
@ -39,12 +57,7 @@ public final class PadeemConsulOfInnovation extends CardImpl {
|
||||||
)));
|
)));
|
||||||
|
|
||||||
// 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.
|
||||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new DrawCardSourceControllerEffect(1)).withInterveningIf(condition).addHint(hint));
|
||||||
new BeginningOfUpkeepTriggeredAbility(
|
|
||||||
new DrawCardSourceControllerEffect(1), false
|
|
||||||
), condition, "At the beginning of your upkeep, if you control the artifact " +
|
|
||||||
"with the highest mana value or tied for the highest mana value, draw a card."
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private PadeemConsulOfInnovation(final PadeemConsulOfInnovation card) {
|
private PadeemConsulOfInnovation(final PadeemConsulOfInnovation card) {
|
||||||
|
|
@ -56,3 +69,18 @@ public final class PadeemConsulOfInnovation extends CardImpl {
|
||||||
return new PadeemConsulOfInnovation(this);
|
return new PadeemConsulOfInnovation(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum PadeemConsulOfInnovationPredicate implements Predicate<Permanent> {
|
||||||
|
instance;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(Permanent input, Game game) {
|
||||||
|
return input.getManaValue() >= game
|
||||||
|
.getBattlefield()
|
||||||
|
.getActivePermanents(StaticFilters.FILTER_PERMANENT_ARTIFACT, input.getControllerId(), game)
|
||||||
|
.stream()
|
||||||
|
.mapToInt(MageObject::getManaValue)
|
||||||
|
.max()
|
||||||
|
.orElse(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ public final class PriestOfForgottenGods extends CardImpl {
|
||||||
);
|
);
|
||||||
ability.addEffect(
|
ability.addEffect(
|
||||||
new SacrificeEffect(StaticFilters.FILTER_PERMANENT_CREATURE, 1, "")
|
new SacrificeEffect(StaticFilters.FILTER_PERMANENT_CREATURE, 1, "")
|
||||||
.setText("and sacrifice a creature")
|
.setText("and sacrifice a creature of their choice")
|
||||||
);
|
);
|
||||||
ability.addCost(new SacrificeTargetCost(2, filter));
|
ability.addCost(new SacrificeTargetCost(2, filter));
|
||||||
ability.addEffect(new BasicManaEffect(Mana.BlackMana(2)).setText("You add {B}{B}"));
|
ability.addEffect(new BasicManaEffect(Mana.BlackMana(2)).setText("You add {B}{B}"));
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ public final class RevTitheExtractor extends CardImpl {
|
||||||
);
|
);
|
||||||
ability.addEffect(new ExileFaceDownTopNLibraryYouMayPlayAsLongAsExiledTargetEffect(true, CastManaAdjustment.NONE)
|
ability.addEffect(new ExileFaceDownTopNLibraryYouMayPlayAsLongAsExiledTargetEffect(true, CastManaAdjustment.NONE)
|
||||||
.setText(", then look at the top card of that player's library and exile it face down. "
|
.setText(", then look at the top card of that player's library and exile it face down. "
|
||||||
+ "You may play that card for as long as it remains exiled"));
|
+ "You may cast that card for as long as it remains exiled"));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,7 @@ class ScreamingSwarmEffect extends OneShotEffect {
|
||||||
|
|
||||||
ScreamingSwarmEffect() {
|
ScreamingSwarmEffect() {
|
||||||
super(Outcome.Benefit);
|
super(Outcome.Benefit);
|
||||||
staticText = "put {this} from your graveyard into your library second from the top";
|
staticText = "put this card from your graveyard into your library second from the top";
|
||||||
}
|
}
|
||||||
|
|
||||||
private ScreamingSwarmEffect(final ScreamingSwarmEffect effect) {
|
private ScreamingSwarmEffect(final ScreamingSwarmEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ public final class ShieldMare extends CardImpl {
|
||||||
|
|
||||||
// When Shield Mare enters the battlefield or becomes the target of a spell or ability and opponent controls, you gain 3 life.
|
// When Shield Mare enters the battlefield or becomes the target of a spell or ability and opponent controls, you gain 3 life.
|
||||||
this.addAbility(new OrTriggeredAbility(Zone.ALL, new GainLifeEffect(3), false,
|
this.addAbility(new OrTriggeredAbility(Zone.ALL, new GainLifeEffect(3), false,
|
||||||
"Whenever {this} enters or becomes the target of a spell or ability an opponent controls, ",
|
"When {this} enters or becomes the target of a spell or ability an opponent controls, ",
|
||||||
new EntersBattlefieldTriggeredAbility(null),
|
new EntersBattlefieldTriggeredAbility(null),
|
||||||
new BecomesTargetSourceTriggeredAbility(null, StaticFilters.FILTER_SPELL_OR_ABILITY_OPPONENTS)));
|
new BecomesTargetSourceTriggeredAbility(null, StaticFilters.FILTER_SPELL_OR_ABILITY_OPPONENTS)));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -48,10 +48,10 @@ public final class ToughCookie extends CardImpl {
|
||||||
// {2}{G}: Target noncreature artifact you control becomes a 4/4 artifact creature until end of turn.
|
// {2}{G}: Target noncreature artifact you control becomes a 4/4 artifact creature until end of turn.
|
||||||
Ability ability = new SimpleActivatedAbility(new AddCardTypeTargetEffect(
|
Ability ability = new SimpleActivatedAbility(new AddCardTypeTargetEffect(
|
||||||
Duration.EndOfTurn, CardType.ARTIFACT, CardType.CREATURE
|
Duration.EndOfTurn, CardType.ARTIFACT, CardType.CREATURE
|
||||||
).setText("target noncreature artifact you control becomes"), new ManaCostsImpl<>("{2}{G}"));
|
).setText("until end of turn, target noncreature artifact you control becomes"), new ManaCostsImpl<>("{2}{G}"));
|
||||||
ability.addEffect(new SetBasePowerToughnessTargetEffect(
|
ability.addEffect(new SetBasePowerToughnessTargetEffect(
|
||||||
4, 4, Duration.EndOfTurn
|
4, 4, Duration.EndOfTurn
|
||||||
).setText(" a 4/4 artifact creature until end of turn"));
|
).setText(" a 4/4 artifact creature"));
|
||||||
ability.addTarget(new TargetPermanent(filter));
|
ability.addTarget(new TargetPermanent(filter));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,7 @@ class WoodlandChampionTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "Whenever one or more tokens enter the battlefield under your control, " +
|
return "Whenever one or more tokens you control enter, " +
|
||||||
"put that many +1/+1 counters on {this}.";
|
"put that many +1/+1 counters on {this}.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,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_CODES = "ODY,TOR,JUD,ONS,LGN,SCG"; // check ability text due mtgjson, can use multiple sets like MAT;CMD or * for all
|
private static final String FULL_ABILITIES_CHECK_SET_CODES = "J25"; // check ability text due mtgjson, can use multiple sets like MAT;CMD or * for all
|
||||||
private static final boolean CHECK_ONLY_ABILITIES_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages
|
private static final boolean CHECK_ONLY_ABILITIES_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages
|
||||||
private static final boolean CHECK_COPYABLE_FIELDS = true; // disable for better verify test performance
|
private static final boolean CHECK_COPYABLE_FIELDS = true; // disable for better verify test performance
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,54 +0,0 @@
|
||||||
package mage.abilities.condition.common;
|
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.abilities.Ability;
|
|
||||||
import mage.abilities.condition.Condition;
|
|
||||||
import mage.filter.FilterPermanent;
|
|
||||||
import mage.game.Game;
|
|
||||||
import mage.game.permanent.Permanent;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author LevelX2
|
|
||||||
*/
|
|
||||||
public class ControlsPermanentGreatestCMCCondition implements Condition {
|
|
||||||
|
|
||||||
private final FilterPermanent filter;
|
|
||||||
|
|
||||||
public ControlsPermanentGreatestCMCCondition() {
|
|
||||||
this(new FilterPermanent());
|
|
||||||
}
|
|
||||||
|
|
||||||
public ControlsPermanentGreatestCMCCondition(FilterPermanent filter) {
|
|
||||||
super();
|
|
||||||
this.filter = filter;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean apply(Game game, Ability source) {
|
|
||||||
Set<UUID> controllers = new HashSet<>();
|
|
||||||
Integer maxCMC = null;
|
|
||||||
|
|
||||||
List<Permanent> permanents = game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source, game);
|
|
||||||
for (Permanent permanent : permanents) {
|
|
||||||
int cmc = permanent.getManaCost().manaValue();
|
|
||||||
if (maxCMC == null || cmc > maxCMC) {
|
|
||||||
maxCMC = cmc;
|
|
||||||
controllers.clear();
|
|
||||||
}
|
|
||||||
if (cmc == maxCMC) {
|
|
||||||
controllers.add(permanent.getControllerId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return controllers.contains(source.getControllerId());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "you control the " + filter.getMessage() + " with the highest mana value or tied for the highest mana value";
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -11,14 +11,14 @@ import mage.constants.SubType;
|
||||||
public final class FishToken extends TokenImpl {
|
public final class FishToken extends TokenImpl {
|
||||||
|
|
||||||
public FishToken() {
|
public FishToken() {
|
||||||
super("Fish Token", "1/1 blue Fish creature token with \"This creature can't be blocked.\"");
|
super("Fish Token", "1/1 blue Fish creature token with \"This token can't be blocked.\"");
|
||||||
cardType.add(CardType.CREATURE);
|
cardType.add(CardType.CREATURE);
|
||||||
subtype.add(SubType.FISH);
|
subtype.add(SubType.FISH);
|
||||||
color.setBlue(true);
|
color.setBlue(true);
|
||||||
power = new MageInt(1);
|
power = new MageInt(1);
|
||||||
toughness = new MageInt(1);
|
toughness = new MageInt(1);
|
||||||
|
|
||||||
addAbility(new CantBeBlockedSourceAbility("this creature can't be blocked"));
|
addAbility(new CantBeBlockedSourceAbility("this token can't be blocked"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private FishToken(final FishToken token) {
|
private FishToken(final FishToken token) {
|
||||||
|
|
|
||||||
|
|
@ -980,7 +980,7 @@ public final class CardUtil {
|
||||||
}
|
}
|
||||||
if (!targetPlayerGets) {
|
if (!targetPlayerGets) {
|
||||||
sb.append(add ? " on " : " from ");
|
sb.append(add ? " on " : " from ");
|
||||||
if (description.contains("up to")) {
|
if (description.contains("up to") && !description.contains("up to one")) {
|
||||||
sb.append("each of ");
|
sb.append("each of ");
|
||||||
}
|
}
|
||||||
sb.append(description);
|
sb.append(description);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue