mirror of
https://github.com/magefree/mage.git
synced 2025-12-29 23:12:10 -08:00
more text fixes
This commit is contained in:
parent
3baabe2534
commit
bc2bfba02a
37 changed files with 124 additions and 126 deletions
|
|
@ -87,7 +87,7 @@ public class AgelessSentinels extends CardImpl {
|
|||
|
||||
public AgelessSentinelsEffect() {
|
||||
super(Duration.WhileOnBattlefield, Outcome.BecomeCreature);
|
||||
staticText = "it becomes a Bird Giant, ";
|
||||
staticText = "it becomes a Bird Giant,";
|
||||
}
|
||||
|
||||
public AgelessSentinelsEffect(final AgelessSentinelsEffect effect) {
|
||||
|
|
|
|||
|
|
@ -109,6 +109,6 @@ class AlphaStatusDynamicValue implements DynamicValue {
|
|||
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return "each other creature on the battlefield that shares a creature type with it";
|
||||
return "other creature on the battlefield that shares a creature type with it";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,15 +52,17 @@ import mage.game.permanent.Permanent;
|
|||
public class AncientOoze extends CardImpl {
|
||||
|
||||
public AncientOoze(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{G}{G}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{G}{G}");
|
||||
this.subtype.add(SubType.OOZE);
|
||||
|
||||
this.color.setGreen(true);
|
||||
this.color.setGreen(true);
|
||||
this.power = new MageInt(0);
|
||||
this.toughness = new MageInt(0);
|
||||
|
||||
// Ancient Ooze's power and toughness are each equal to the total converted mana cost of other creatures you control.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetPowerToughnessSourceEffect(new AncientOozePowerToughnessValue(), Duration.EndOfGame)));
|
||||
// Ancient Ooze's power and toughness are each equal to the total converted mana cost of other creatures you control.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetPowerToughnessSourceEffect(new AncientOozePowerToughnessValue(), Duration.EndOfGame)
|
||||
.setText("{this}'s power and toughness are each equal to the total converted mana cost of other creatures you control.")
|
||||
));
|
||||
}
|
||||
|
||||
public AncientOoze(final AncientOoze card) {
|
||||
|
|
@ -74,12 +76,12 @@ public class AncientOoze extends CardImpl {
|
|||
}
|
||||
|
||||
class AncientOozePowerToughnessValue implements DynamicValue {
|
||||
|
||||
|
||||
@Override
|
||||
public int calculate(Game game, Ability sourceAbility, Effect effect) {
|
||||
int value = 0;
|
||||
for(Permanent creature : game.getBattlefield().getActivePermanents(new FilterControlledCreaturePermanent(), sourceAbility.getControllerId(), game)){
|
||||
if(creature != null && !sourceAbility.getSourceId().equals(creature.getId())){
|
||||
for (Permanent creature : game.getBattlefield().getActivePermanents(new FilterControlledCreaturePermanent(), sourceAbility.getControllerId(), game)) {
|
||||
if (creature != null && !sourceAbility.getSourceId().equals(creature.getId())) {
|
||||
value += creature.getConvertedManaCost();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,21 +52,21 @@ import mage.target.common.TargetControlledCreaturePermanent;
|
|||
public class BlackCarriage extends CardImpl {
|
||||
|
||||
public BlackCarriage(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}{B}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}{B}");
|
||||
this.subtype.add(SubType.HORSE);
|
||||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(4);
|
||||
|
||||
// Trample
|
||||
this.addAbility(TrampleAbility.getInstance());
|
||||
|
||||
|
||||
// Black Carriage doesn't untap during your untap step.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DontUntapInControllersUntapStepSourceEffect()));
|
||||
|
||||
|
||||
// Sacrifice a creature: Untap Black Carriage. Activate this ability only during your upkeep.
|
||||
this.addAbility(new ConditionalActivatedAbility(Zone.BATTLEFIELD,
|
||||
this.addAbility(new ConditionalActivatedAbility(Zone.BATTLEFIELD,
|
||||
new UntapSourceEffect(), new SacrificeTargetCost(new TargetControlledCreaturePermanent(new FilterControlledCreaturePermanent("a creature"))),
|
||||
new IsStepCondition(PhaseStep.UPKEEP), null));
|
||||
new IsStepCondition(PhaseStep.UPKEEP), "Sacrifice a creature: Untap {this}. Activate this ability only during your upkeep."));
|
||||
}
|
||||
|
||||
public BlackCarriage(final BlackCarriage card) {
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ import java.util.UUID;
|
|||
*/
|
||||
public class BrownOuphe extends CardImpl {
|
||||
|
||||
private final static FilterStackObject filter = new FilterStackObject("ability from an artifact source");
|
||||
private final static FilterStackObject filter = new FilterStackObject("activated ability from an artifact source");
|
||||
|
||||
static {
|
||||
filter.add(new ArtifactSourcePredicate());
|
||||
|
|
|
|||
|
|
@ -42,10 +42,12 @@ import mage.target.TargetPlayer;
|
|||
public class CabalConditioning extends CardImpl {
|
||||
|
||||
public CabalConditioning(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{6}{B}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{6}{B}");
|
||||
|
||||
// Any number of target players each discard a number of cards equal to the highest converted mana cost among permanents you control.
|
||||
this.getSpellAbility().addEffect(new DiscardTargetEffect(new HighestConvertedManaCostValue()));
|
||||
this.getSpellAbility().addEffect(new DiscardTargetEffect(new HighestConvertedManaCostValue())
|
||||
.setText("Any number of target players each discard a number of cards equal to the highest converted mana cost among permanents you control.")
|
||||
);
|
||||
this.getSpellAbility().addTarget(new TargetPlayer(0, Integer.MAX_VALUE, false));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ import mage.game.permanent.Permanent;
|
|||
public class ClergyOfTheHolyNimbus extends CardImpl {
|
||||
|
||||
public ClergyOfTheHolyNimbus(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{W}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}");
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.CLERIC);
|
||||
this.power = new MageInt(1);
|
||||
|
|
@ -61,7 +61,7 @@ public class ClergyOfTheHolyNimbus extends CardImpl {
|
|||
|
||||
// If Clergy of the Holy Nimbus would be destroyed, regenerate it.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.ALL, new ClergyOfTheHolyNimbusReplacementEffect()));
|
||||
|
||||
|
||||
// {1}: Clergy of the Holy Nimbus can't be regenerated this turn. Only any opponent may activate this ability.
|
||||
this.addAbility(new ActivateOnlyByOpponentActivatedAbility(Zone.BATTLEFIELD, new CantBeRegeneratedSourceEffect(Duration.EndOfTurn), new ManaCostsImpl("{1}")));
|
||||
}
|
||||
|
|
@ -90,7 +90,7 @@ class ClergyOfTheHolyNimbusReplacementEffect extends ReplacementEffectImpl {
|
|||
@Override
|
||||
public boolean replaceEvent(GameEvent event, Ability source, Game game) {
|
||||
Permanent ClergyOfTheHolyNimbus = game.getPermanent(event.getTargetId());
|
||||
if (ClergyOfTheHolyNimbus != null
|
||||
if (ClergyOfTheHolyNimbus != null
|
||||
&& event.getAmount() == 0) { // 1=noRegen
|
||||
if (ClergyOfTheHolyNimbus.regenerate(source.getSourceId(), game)) {
|
||||
game.informPlayers(source.getSourceObject(game).getName() + " has been regenerated.");
|
||||
|
|
@ -116,4 +116,4 @@ class ClergyOfTheHolyNimbusReplacementEffect extends ReplacementEffectImpl {
|
|||
return new ClergyOfTheHolyNimbusReplacementEffect(this);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ import mage.constants.SubType;
|
|||
import mage.constants.Zone;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.target.TargetPermanent;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
import mage.target.common.TargetControlledCreaturePermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -59,7 +59,7 @@ public class CoalitionFlag extends CardImpl {
|
|||
this.subtype.add(SubType.AURA);
|
||||
|
||||
// Enchant creature you control
|
||||
TargetPermanent auraTarget = new TargetCreaturePermanent();
|
||||
TargetPermanent auraTarget = new TargetControlledCreaturePermanent();
|
||||
this.getSpellAbility().addTarget(auraTarget);
|
||||
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
|
||||
Ability ability = new EnchantAbility(auraTarget.getTargetName());
|
||||
|
|
|
|||
|
|
@ -71,6 +71,7 @@ public class DaughterOfAutumn extends CardImpl {
|
|||
// {W}: The next 1 damage that would be dealt to target white creature this turn is dealt to Daughter of Autumn instead.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DaughterOfAutumnPreventDamageTargetEffect(Duration.EndOfTurn, 1), new ManaCostsImpl("{W}"));
|
||||
ability.addTarget(new TargetCreaturePermanent(filter));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public DaughterOfAutumn(final DaughterOfAutumn card) {
|
||||
|
|
|
|||
|
|
@ -50,10 +50,12 @@ public class DivineLight extends CardImpl {
|
|||
}
|
||||
|
||||
public DivineLight(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{W}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{W}");
|
||||
|
||||
// Prevent all damage that would be dealt this turn to creatures you control.
|
||||
this.getSpellAbility().addEffect(new PreventAllDamageToAllEffect(Duration.EndOfTurn, filter));
|
||||
this.getSpellAbility().addEffect(new PreventAllDamageToAllEffect(Duration.EndOfTurn, filter)
|
||||
.setText("Prevent all damage that would be dealt this turn to creatures you control.")
|
||||
);
|
||||
}
|
||||
|
||||
public DivineLight(final DivineLight card) {
|
||||
|
|
|
|||
|
|
@ -46,18 +46,18 @@ import mage.filter.predicate.mageobject.ColorPredicate;
|
|||
/**
|
||||
*
|
||||
* @author LoneFox
|
||||
|
||||
*
|
||||
*/
|
||||
public class DwarvenPatrol extends CardImpl {
|
||||
|
||||
private static final FilterSpell filter = new FilterSpell("nonred spell");
|
||||
private static final FilterSpell filter = new FilterSpell("a nonred spell");
|
||||
|
||||
static {
|
||||
filter.add(Predicates.not(new ColorPredicate(ObjectColor.RED)));
|
||||
}
|
||||
|
||||
public DwarvenPatrol(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}");
|
||||
this.subtype.add(SubType.DWARF);
|
||||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(2);
|
||||
|
|
|
|||
|
|
@ -48,7 +48,9 @@ public class GreatDefender extends CardImpl {
|
|||
|
||||
// Target creature gets +0/+X until end of turn, where X is its converted mana cost.
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||
this.getSpellAbility().addEffect(new BoostTargetEffect(new StaticValue(0), new TargetConvertedManaCost(), Duration.EndOfTurn, true));
|
||||
this.getSpellAbility().addEffect(new BoostTargetEffect(new StaticValue(0), new TargetConvertedManaCost(), Duration.EndOfTurn, true)
|
||||
.setText("Target creature gets +0/+X until end of turn, where X is its converted mana cost.")
|
||||
);
|
||||
}
|
||||
|
||||
public GreatDefender(final GreatDefender card) {
|
||||
|
|
|
|||
|
|
@ -52,11 +52,10 @@ import mage.players.Player;
|
|||
public class IceCave extends CardImpl {
|
||||
|
||||
public IceCave(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{U}{U}");
|
||||
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{U}{U}");
|
||||
|
||||
// Whenever a player casts a spell, any other player may pay that spell's mana cost. If a player does, counter the spell. (Mana cost includes color.)
|
||||
this.addAbility(new SpellCastAllTriggeredAbility(Zone.BATTLEFIELD, new IceCaveEffect(), StaticFilters.FILTER_SPELL, false, SetTargetPointer.SPELL));
|
||||
this.addAbility(new SpellCastAllTriggeredAbility(Zone.BATTLEFIELD, new IceCaveEffect(), StaticFilters.FILTER_A_SPELL, false, SetTargetPointer.SPELL));
|
||||
}
|
||||
|
||||
public IceCave(final IceCave card) {
|
||||
|
|
@ -90,17 +89,17 @@ class IceCaveEffect extends OneShotEffect {
|
|||
Player controller = game.getPlayer(source.getControllerId());
|
||||
Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId());
|
||||
Spell spell = (Spell) game.getStack().getStackObject(targetPointer.getFirst(game, source));
|
||||
if(sourcePermanent != null && spell != null && controller != null) {
|
||||
if (sourcePermanent != null && spell != null && controller != null) {
|
||||
Player spellController = game.getPlayer(spell.getControllerId());
|
||||
Cost cost = new ManaCostsImpl(spell.getSpellAbility().getManaCosts().getText());
|
||||
if(spellController != null) {
|
||||
if (spellController != null) {
|
||||
for (UUID playerId : game.getState().getPlayersInRange(source.getControllerId(), game)) {
|
||||
Player player = game.getPlayer(playerId);
|
||||
if(player != null && player != spellController) {
|
||||
if (player != null && player != spellController) {
|
||||
cost.clearPaid();
|
||||
if(cost.canPay(source, source.getSourceId(), player.getId(), game)
|
||||
if (cost.canPay(source, source.getSourceId(), player.getId(), game)
|
||||
&& player.chooseUse(outcome, "Pay " + cost.getText() + " to counter " + spell.getIdName() + '?', source, game)) {
|
||||
if(cost.pay(source, game, source.getSourceId(), playerId, false, null)) {
|
||||
if (cost.pay(source, game, source.getSourceId(), playerId, false, null)) {
|
||||
game.informPlayers(player.getLogName() + " pays" + cost.getText() + " to counter " + spell.getIdName() + '.');
|
||||
game.getStack().counter(spell.getId(), source.getSourceId(), game);
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ import mage.target.common.TargetCreaturePermanent;
|
|||
public class Illuminate extends CardImpl {
|
||||
|
||||
public Illuminate(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{R}");
|
||||
|
||||
// Kicker {2}{R} and/or {3}{U}
|
||||
KickerAbility kickerAbility = new KickerAbility("{2}{R}");
|
||||
|
|
@ -57,13 +57,13 @@ public class Illuminate extends CardImpl {
|
|||
this.getSpellAbility().addEffect(new DamageTargetEffect(new ManacostVariableValue()));
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
|
||||
new DamageTargetControllerEffect(new ManacostVariableValue()),
|
||||
new KickedCostCondition("{2}{R}"),
|
||||
"If {this} was kicked with its {2}{R} kicker, it deals X damage to that creature's controller."));
|
||||
new DamageTargetControllerEffect(new ManacostVariableValue()),
|
||||
new KickedCostCondition("{2}{R}"),
|
||||
"If {this} was kicked with its {2}{R} kicker, it deals X damage to that creature's controller."));
|
||||
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
|
||||
new DrawCardSourceControllerEffect(new ManacostVariableValue()),
|
||||
new KickedCostCondition("{3}{U}"),
|
||||
"If {this} was kicked with its {3}{U} kicker, you draw X cards."));
|
||||
new DrawCardSourceControllerEffect(new ManacostVariableValue()),
|
||||
new KickedCostCondition("{3}{U}"),
|
||||
" If {this} was kicked with its {3}{U} kicker, you draw X cards."));
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -53,11 +53,11 @@ import mage.target.targetpointer.SecondTargetPointer;
|
|||
public class Jilt extends CardImpl {
|
||||
|
||||
public Jilt(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{U}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{U}");
|
||||
|
||||
// Kicker {1}{R}
|
||||
this.addAbility(new KickerAbility("{1}{R}"));
|
||||
|
||||
|
||||
// Return target creature to its owner's hand. If Jilt was kicked, it deals 2 damage to another target creature.
|
||||
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());
|
||||
Effect effect = new ConditionalOneShotEffect(
|
||||
|
|
@ -66,11 +66,11 @@ public class Jilt extends CardImpl {
|
|||
"If {this} was kicked, it deals 2 damage to another target creature");
|
||||
effect.setTargetPointer(new SecondTargetPointer());
|
||||
this.getSpellAbility().addEffect(effect);
|
||||
Target target = new TargetCreaturePermanent(new FilterCreaturePermanent("Target Creature: returned to Hand"));
|
||||
Target target = new TargetCreaturePermanent();
|
||||
target.setTargetTag(1);
|
||||
this.getSpellAbility().addTarget(target);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void adjustTargets(Ability ability, Game game) {
|
||||
if (ability instanceof SpellAbility && KickedCondition.instance.apply(game, ability)) {
|
||||
|
|
|
|||
|
|
@ -59,26 +59,26 @@ import java.util.UUID;
|
|||
public class Jokulmorder extends CardImpl {
|
||||
|
||||
public Jokulmorder(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{U}{U}{U}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{U}{U}{U}");
|
||||
this.subtype.add(SubType.LEVIATHAN);
|
||||
this.power = new MageInt(12);
|
||||
this.toughness = new MageInt(12);
|
||||
|
||||
// Trample
|
||||
this.addAbility(TrampleAbility.getInstance());
|
||||
|
||||
|
||||
// Jokulmorder enters the battlefield tapped.
|
||||
this.addAbility(new EntersBattlefieldTappedAbility());
|
||||
|
||||
|
||||
// When Jokulmorder enters the battlefield, sacrifice it unless you sacrifice five lands.
|
||||
Effect effect = new SacrificeSourceUnlessPaysEffect(
|
||||
new SacrificeTargetCost(new TargetControlledPermanent(5, 5, new FilterControlledLandPermanent("five lands"), true)));
|
||||
effect.setText("sacrifice it unless you sacrifice five lands");
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(effect, false));
|
||||
|
||||
|
||||
// Jokulmorder doesn't untap during your untap step.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DontUntapInControllersUntapStepSourceEffect()));
|
||||
|
||||
|
||||
// Whenever you play an Island, you may untap Jokulmorder.
|
||||
this.addAbility(new JokulmorderTriggeredAbility());
|
||||
}
|
||||
|
|
@ -122,6 +122,6 @@ class JokulmorderTriggeredAbility extends TriggeredAbilityImpl {
|
|||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "When you play an Island, you may untap {this}";
|
||||
return "Whenever you play an Island, you may untap {this}";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,20 +32,15 @@ import mage.MageInt;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.costs.Cost;
|
||||
import mage.abilities.costs.CostImpl;
|
||||
import mage.abilities.TriggeredAbility;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.abilities.keyword.CumulativeUpkeepAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.TargetController;
|
||||
import mage.constants.Zone;
|
||||
import mage.counters.CounterType;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.players.Player;
|
||||
|
|
@ -60,7 +55,7 @@ import mage.target.common.TargetOpponent;
|
|||
public class KarplusanMinotaur extends CardImpl {
|
||||
|
||||
public KarplusanMinotaur(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}{R}");
|
||||
this.subtype.add(SubType.MINOTAUR);
|
||||
this.subtype.add(SubType.WARRIOR);
|
||||
this.power = new MageInt(3);
|
||||
|
|
@ -68,7 +63,7 @@ public class KarplusanMinotaur extends CardImpl {
|
|||
|
||||
// Cumulative upkeep-Flip a coin.
|
||||
this.addAbility(new CumulativeUpkeepAbility(new KarplusanMinotaurCost()));
|
||||
|
||||
|
||||
// Whenever you win a coin flip, Karplusan Minotaur deals 1 damage to target creature or player.
|
||||
Ability abilityWin = new KarplusanMinotaurFlipWinTriggeredAbility();
|
||||
abilityWin.addTarget(new TargetCreatureOrPlayer());
|
||||
|
|
@ -80,23 +75,22 @@ public class KarplusanMinotaur extends CardImpl {
|
|||
abilityLose.addTarget(new TargetCreatureOrPlayer());
|
||||
this.addAbility(abilityLose);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void adjustTargets(Ability ability, Game game) {
|
||||
if (ability instanceof KarplusanMinotaurFlipLoseTriggeredAbility) {
|
||||
Player controller = game.getPlayer(ability.getControllerId());
|
||||
if(controller != null) {
|
||||
if (controller != null) {
|
||||
UUID opponentId = null;
|
||||
if(game.getOpponents(controller.getId()).size() > 1) {
|
||||
if (game.getOpponents(controller.getId()).size() > 1) {
|
||||
Target target = new TargetOpponent(true);
|
||||
if(controller.chooseTarget(Outcome.Neutral, target, ability, game)) {
|
||||
if (controller.chooseTarget(Outcome.Neutral, target, ability, game)) {
|
||||
opponentId = target.getFirstTarget();
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
opponentId = game.getOpponents(controller.getId()).iterator().next();
|
||||
}
|
||||
if(opponentId != null) {
|
||||
if (opponentId != null) {
|
||||
ability.getTargets().get(0).setTargetController(opponentId);
|
||||
}
|
||||
}
|
||||
|
|
@ -171,12 +165,12 @@ class KarplusanMinotaurFlipLoseTriggeredAbility extends TriggeredAbilityImpl {
|
|||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever you lose a coin flip, {this} deals 1 damage to target creature or player of an opponent's choice";
|
||||
return "Whenever you lose a coin flip, {this} deals 1 damage to target creature or player of an opponent's choice.";
|
||||
}
|
||||
}
|
||||
|
||||
class KarplusanMinotaurCost extends CostImpl {
|
||||
|
||||
|
||||
KarplusanMinotaurCost() {
|
||||
this.text = "Flip a coin";
|
||||
}
|
||||
|
|
@ -188,7 +182,7 @@ class KarplusanMinotaurCost extends CostImpl {
|
|||
controller.flipCoin(game);
|
||||
this.paid = true;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -202,7 +196,7 @@ class KarplusanMinotaurCost extends CostImpl {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public KarplusanMinotaurCost copy() {
|
||||
return new KarplusanMinotaurCost();
|
||||
|
|
|
|||
|
|
@ -43,12 +43,12 @@ import mage.target.TargetPlayer;
|
|||
public class LastCaress extends CardImpl {
|
||||
|
||||
public LastCaress(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{B}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{B}");
|
||||
|
||||
this.getSpellAbility().addEffect(new LoseLifeTargetEffect(1));
|
||||
this.getSpellAbility().addTarget(new TargetPlayer());
|
||||
this.getSpellAbility().addEffect(new GainLifeEffect(1));
|
||||
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
|
||||
this.getSpellAbility().addEffect(new GainLifeEffect(1).setText("and you gain 1 life"));
|
||||
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).setText("<br><br>Draw a card"));
|
||||
}
|
||||
|
||||
public LastCaress(final LastCaress card) {
|
||||
|
|
|
|||
|
|
@ -52,33 +52,33 @@ import java.util.UUID;
|
|||
* @author fireshoes
|
||||
*/
|
||||
public class MinotaurTactician extends CardImpl {
|
||||
|
||||
|
||||
private static final FilterControlledCreaturePermanent filterWhite = new FilterControlledCreaturePermanent();
|
||||
private static final FilterControlledCreaturePermanent filterBlue = new FilterControlledCreaturePermanent();
|
||||
|
||||
|
||||
static {
|
||||
filterWhite.add(new ColorPredicate(ObjectColor.WHITE));
|
||||
filterBlue.add(new ColorPredicate(ObjectColor.BLUE));
|
||||
}
|
||||
|
||||
|
||||
static final private String ruleWhite = "{this} gets +1/+1 as long as you control another white creature";
|
||||
|
||||
static final private String ruleBlue = "{this} gets +1/+1 as long as you control another white creature";
|
||||
|
||||
static final private String ruleBlue = "{this} gets +1/+1 as long as you control another blue creature";
|
||||
|
||||
public MinotaurTactician(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");
|
||||
this.subtype.add(SubType.MINOTAUR);
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// Haste
|
||||
this.addAbility(HasteAbility.getInstance());
|
||||
|
||||
|
||||
// Minotaur Tactician gets +1/+1 as long as you control a white creature.
|
||||
Condition conditionWhite = new PermanentsOnTheBattlefieldCondition(filterWhite);
|
||||
Effect effectWhite = new ConditionalContinuousEffect(new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), conditionWhite, ruleWhite);
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effectWhite));
|
||||
|
||||
|
||||
// Minotaur Tactician gets +1/+1 as long as you control a blue creature.
|
||||
Condition conditionBlue = new PermanentsOnTheBattlefieldCondition(filterBlue);
|
||||
Effect effectBlue = new ConditionalContinuousEffect(new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), conditionBlue, ruleBlue);
|
||||
|
|
|
|||
|
|
@ -28,11 +28,9 @@
|
|||
package mage.cards.p;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.BeginningOfYourEndStepTriggeredAbility;
|
||||
import mage.abilities.common.PutIntoGraveFromBattlefieldSourceTriggeredAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.MultipliedValue;
|
||||
import mage.abilities.dynamicvalue.common.CountersSourceCount;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
|
|
@ -59,7 +57,9 @@ public class PhyrexianEtchings extends CardImpl {
|
|||
this.addAbility(new BeginningOfYourEndStepTriggeredAbility(new DrawCardSourceControllerEffect(new CountersSourceCount(CounterType.AGE)), false));
|
||||
|
||||
// When Phyrexian Etchings is put into a graveyard from the battlefield, you lose 2 life for each age counter on it.
|
||||
this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new LoseLifeSourceControllerEffect(new MultipliedValue(new CountersSourceCount(CounterType.AGE), 2))));
|
||||
this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new LoseLifeSourceControllerEffect(new MultipliedValue(new CountersSourceCount(CounterType.AGE), 2))
|
||||
.setText("When {this} is put into a graveyard from the battlefield, you lose 2 life for each age counter on it")
|
||||
));
|
||||
}
|
||||
|
||||
public PhyrexianEtchings(final PhyrexianEtchings card) {
|
||||
|
|
|
|||
|
|
@ -135,6 +135,6 @@ class RimefeatherOwlEffect extends ContinuousEffectImpl {
|
|||
|
||||
@Override
|
||||
public String getText(Mode mode) {
|
||||
return "All nonland permanents are legendary";
|
||||
return "Permanents with ice counters on them are snow.";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,10 +37,9 @@ import mage.cards.CardSetInfo;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.target.TargetPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.target.common.TargetEnchantmentPermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -49,14 +48,14 @@ import java.util.UUID;
|
|||
public class RonomUnicorn extends CardImpl {
|
||||
|
||||
public RonomUnicorn(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.UNICORN);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// Sacrifice Ronom Unicorn: Destroy target enchantment.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(), new SacrificeSourceCost());
|
||||
ability.addTarget(new TargetPermanent(StaticFilters.ARTIFACT_OR_ENCHANTMENT_PERMANENT));
|
||||
ability.addTarget(new TargetEnchantmentPermanent());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ import mage.target.common.TargetActivatedOrTriggeredAbility;
|
|||
*/
|
||||
public class Rust extends CardImpl {
|
||||
|
||||
private final static FilterStackObject filter = new FilterStackObject("ability from an artifact source");
|
||||
private final static FilterStackObject filter = new FilterStackObject("activated ability from an artifact source");
|
||||
|
||||
static {
|
||||
filter.add(new ArtifactSourcePredicate());
|
||||
|
|
|
|||
|
|
@ -43,13 +43,13 @@ import mage.target.common.TargetLandPermanent;
|
|||
public class ShimmeringMirage extends CardImpl {
|
||||
|
||||
public ShimmeringMirage(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{U}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{U}");
|
||||
|
||||
// Target land becomes the basic land type of your choice until end of turn.
|
||||
this.getSpellAbility().addEffect(new BecomesBasicLandTargetEffect(Duration.EndOfTurn));
|
||||
this.getSpellAbility().addTarget(new TargetLandPermanent());
|
||||
// Draw a card.
|
||||
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
|
||||
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).setText("<br><br>Draw a card"));
|
||||
}
|
||||
|
||||
public ShimmeringMirage(final ShimmeringMirage card) {
|
||||
|
|
|
|||
|
|
@ -42,13 +42,14 @@ import mage.target.TargetPermanent;
|
|||
public class SurgingAether extends CardImpl {
|
||||
|
||||
public SurgingAether(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{3}{U}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{U}");
|
||||
|
||||
// Ripple 4
|
||||
this.addAbility(new RippleAbility(4));
|
||||
// Return target permanent to its owner's hand.
|
||||
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());
|
||||
this.getSpellAbility().addTarget(new TargetPermanent());
|
||||
|
||||
// Ripple 4
|
||||
this.addAbility(new RippleAbility(4));
|
||||
}
|
||||
|
||||
public SurgingAether(final SurgingAether card) {
|
||||
|
|
|
|||
|
|
@ -42,13 +42,12 @@ import mage.filter.common.FilterEnchantmentPermanent;
|
|||
public class TranquilPath extends CardImpl {
|
||||
|
||||
public TranquilPath(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{4}{G}");
|
||||
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{G}");
|
||||
|
||||
// Destroy all enchantments.
|
||||
this.getSpellAbility().addEffect(new DestroyAllEffect(new FilterEnchantmentPermanent("enchantments")));
|
||||
// Draw a card.
|
||||
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
|
||||
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).setText("<br><br>Draw a card"));
|
||||
}
|
||||
|
||||
public TranquilPath(final TranquilPath card) {
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ import mage.target.common.TargetCreaturePermanent;
|
|||
public class UnnaturalSelection extends CardImpl {
|
||||
|
||||
public UnnaturalSelection(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{U}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}");
|
||||
|
||||
// {1}: Choose a creature type other than Wall. Target creature becomes that type until end of turn.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesChosenCreatureTypeTargetEffect(true), new GenericManaCost(1));
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ public class CantBeRegeneratedSourceEffect extends ContinuousRuleModifyingEffect
|
|||
return staticText;
|
||||
}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(" {this} can't be regenerated");
|
||||
sb.append("{this} can't be regenerated");
|
||||
if (!duration.toString().isEmpty()) {
|
||||
sb.append(' ');
|
||||
if (duration == Duration.EndOfTurn) {
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ public class ExileSourceEffect extends OneShotEffect {
|
|||
*/
|
||||
public ExileSourceEffect(boolean toUniqueExileZone) {
|
||||
super(Outcome.Exile);
|
||||
staticText = "Exile {this}";
|
||||
staticText = "exile {this}";
|
||||
this.toUniqueExileZone = toUniqueExileZone;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ public class RevealLibraryPutIntoHandEffect extends OneShotEffect {
|
|||
}
|
||||
|
||||
private String setText() {
|
||||
StringBuilder sb = new StringBuilder("Reveal the top ");
|
||||
StringBuilder sb = new StringBuilder("reveal the top ");
|
||||
sb.append(CardUtil.numberToText(amountCards.toString())).append(" cards of your library. Put all ");
|
||||
sb.append(filter.getMessage());
|
||||
sb.append(" revealed this way into your hand and the rest ");
|
||||
|
|
|
|||
|
|
@ -191,7 +191,7 @@ public class BecomesBasicLandTargetEffect extends ContinuousEffectImpl {
|
|||
private String setText() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (chooseLandType) {
|
||||
sb.append("Target land becomes the basic land type of your choice ");
|
||||
sb.append("Target land becomes the basic land type of your choice");
|
||||
} else {
|
||||
sb.append("Target land becomes a ");
|
||||
int i = 1;
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ public class BecomesChosenCreatureTypeTargetEffect extends OneShotEffect {
|
|||
super(Outcome.BoostCreature);
|
||||
this.nonWall = nonWall;
|
||||
if(nonWall) {
|
||||
staticText = "choose a creature type other than wall, target creature's type becomes that type until end of turn";
|
||||
staticText = "choose a creature type other than wall. Target creature becomes that type until end of turn";
|
||||
}
|
||||
else {
|
||||
staticText = "target creature becomes the creature type of your choice until end of turn";
|
||||
|
|
|
|||
|
|
@ -52,12 +52,13 @@ public class BecomesColorTargetEffect extends ContinuousEffectImpl {
|
|||
|
||||
/**
|
||||
* Set the color of a spell or permanent
|
||||
*
|
||||
* @param duration
|
||||
*
|
||||
* @param duration
|
||||
*/
|
||||
public BecomesColorTargetEffect(Duration duration) {
|
||||
this(null, duration, null);
|
||||
}
|
||||
|
||||
public BecomesColorTargetEffect(ObjectColor setColor, Duration duration) {
|
||||
this(setColor, duration, null);
|
||||
}
|
||||
|
|
@ -78,7 +79,7 @@ public class BecomesColorTargetEffect extends ContinuousEffectImpl {
|
|||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller == null) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (setColor == null) {
|
||||
ChoiceColor choice = new ChoiceColor();
|
||||
while (!choice.isChosen()) {
|
||||
|
|
@ -95,9 +96,8 @@ public class BecomesColorTargetEffect extends ContinuousEffectImpl {
|
|||
if (!game.isSimulation()) {
|
||||
game.informPlayers(controller.getLogName() + " has chosen the color: " + setColor.toString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
super.init(source, game); //To change body of generated methods, choose Tools | Templates.
|
||||
}
|
||||
|
||||
|
|
@ -109,11 +109,11 @@ public class BecomesColorTargetEffect extends ContinuousEffectImpl {
|
|||
}
|
||||
if (setColor != null) {
|
||||
boolean objectFound = false;
|
||||
for (UUID targetId :targetPointer.getTargets(game, source)) {
|
||||
for (UUID targetId : targetPointer.getTargets(game, source)) {
|
||||
MageObject targetObject = game.getObject(targetId);
|
||||
if (targetObject != null) {
|
||||
objectFound = true;
|
||||
targetObject.getColor(game).setColor(setColor);
|
||||
targetObject.getColor(game).setColor(setColor);
|
||||
}
|
||||
}
|
||||
if (!objectFound && this.getDuration() == Duration.Custom) {
|
||||
|
|
@ -143,7 +143,9 @@ public class BecomesColorTargetEffect extends ContinuousEffectImpl {
|
|||
} else {
|
||||
sb.append(setColor.getDescription());
|
||||
}
|
||||
sb.append(' ').append(duration.toString());
|
||||
if (!duration.toString().equals("")) {
|
||||
sb.append(' ').append(duration.toString());
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@ import mage.MageObject;
|
|||
import mage.ObjectColor;
|
||||
import mage.abilities.StaticAbility;
|
||||
import mage.cards.Card;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.Filter;
|
||||
import mage.filter.FilterCard;
|
||||
|
|
@ -90,7 +89,7 @@ public class ProtectionAbility extends StaticAbility {
|
|||
@Override
|
||||
public String getRule() {
|
||||
|
||||
return "Protection from " + filter.getMessage() + (removeAuras ? "" : ". This effect doesn't remove auras.");
|
||||
return "protection from " + filter.getMessage() + (removeAuras ? "" : ". This effect doesn't remove auras.");
|
||||
}
|
||||
|
||||
public boolean canTarget(MageObject source, Game game) {
|
||||
|
|
|
|||
|
|
@ -56,13 +56,11 @@ public class RippleAbility extends TriggeredAbilityImpl {
|
|||
return new RippleAbility(this);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Ripple " + rippleNumber + " <i>(When you cast this spell, you may reveal the top " + CardUtil.numberToText(rippleNumber) + " cards of your library. You may cast any revealed cards with the same name as this spell without paying their mana costs. Put the rest on the bottom of your library.)</i>";
|
||||
return "ripple " + rippleNumber + " <i>(When you cast this spell, you may reveal the top " + CardUtil.numberToText(rippleNumber) + " cards of your library. You may cast any revealed cards with the same name as this spell without paying their mana costs. Put the rest on the bottom of your library.)</i>";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
class RippleEffect extends OneShotEffect {
|
||||
|
|
@ -84,13 +82,12 @@ class RippleEffect extends OneShotEffect {
|
|||
return new RippleEffect(this);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player player = game.getPlayer(source.getControllerId());
|
||||
MageObject sourceObject = game.getObject(source.getSourceId());
|
||||
if (player != null) {
|
||||
if (!player.chooseUse(Outcome.Neutral, "Reveal " + rippleNumber + " cards from the top of your library?", source, game)){
|
||||
if (!player.chooseUse(Outcome.Neutral, "Reveal " + rippleNumber + " cards from the top of your library?", source, game)) {
|
||||
return true; //fizzle
|
||||
}
|
||||
// reveal to/**/p cards from library
|
||||
|
|
@ -123,4 +120,3 @@ class RippleEffect extends OneShotEffect {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@ public final class StaticFilters {
|
|||
= (FilterSpell) new FilterSpell("noncreature spell").add(Predicates.not(new CardTypePredicate(CardType.CREATURE)));
|
||||
|
||||
public static final FilterSpell FILTER_SPELL = new FilterSpell();
|
||||
public static final FilterSpell FILTER_A_SPELL = new FilterSpell("a spell");
|
||||
|
||||
public static final FilterSpell FILTER_INSTANT_OR_SORCERY_SPELL = new FilterSpell("instant or sorcery spell");
|
||||
public static final FilterSpell FILTER_INSTANT_OR_SORCERY_SPELLS = new FilterSpell("instant or sorcery spells");
|
||||
|
|
|
|||
|
|
@ -24,8 +24,7 @@
|
|||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
|
||||
*/
|
||||
package mage.filter.common;
|
||||
|
||||
import mage.filter.predicate.permanent.BlockingPredicate;
|
||||
|
|
@ -37,7 +36,7 @@ import mage.filter.predicate.permanent.BlockingPredicate;
|
|||
public class FilterBlockingCreature extends FilterCreaturePermanent {
|
||||
|
||||
public FilterBlockingCreature() {
|
||||
this("Blocking creature");
|
||||
this("blocking creature");
|
||||
}
|
||||
|
||||
public FilterBlockingCreature(String name) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue