mirror of
https://github.com/correl/mage.git
synced 2024-11-14 19:19:32 +00:00
* Changed all occurances of unblockable to can't be blocked.
This commit is contained in:
parent
3c0a3c41b0
commit
6b8493d9f8
93 changed files with 315 additions and 408 deletions
|
@ -32,7 +32,7 @@ public class MagicAbility {
|
|||
put(ShroudAbility.getInstance().getRule(), 60);
|
||||
put(new SwampwalkAbility().getRule(), 10);
|
||||
put(TrampleAbility.getInstance().getRule(), 30);
|
||||
put(new UnblockableAbility().getRule(), 100);
|
||||
put(new CantBeBlockedSourceAbility().getRule(), 100);
|
||||
put(VigilanceAbility.getInstance().getRule(), 20);
|
||||
put(WitherAbility.getInstance().getRule(), 30);
|
||||
// gatecrash
|
||||
|
|
|
@ -36,7 +36,7 @@ import mage.MageInt;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.combat.UnblockableSourceEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.abilities.keyword.CyclingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
@ -68,10 +68,10 @@ public class GlassdustHulk extends CardImpl {
|
|||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(4);
|
||||
|
||||
// Whenever another artifact enters the battlefield under your control, Glassdust Hulk gets +1/+1 until end of turn and is unblockable this turn.
|
||||
// Whenever another artifact enters the battlefield under your control, Glassdust Hulk gets +1/+1 until end of turn and can't be blocked this turn.
|
||||
Ability ability = new EntersBattlefieldControlledTriggeredAbility(new BoostSourceEffect(1, 1, Duration.EndOfTurn), filter,
|
||||
"Whenever another artifact enters the battlefield under your control, Glassdust Hulk gets +1/+1 until end of turn and is unblockable this turn.");
|
||||
ability.addEffect(new UnblockableSourceEffect(Duration.EndOfTurn));
|
||||
"Whenever another artifact enters the battlefield under your control, Glassdust Hulk gets +1/+1 until end of turn and can't be blocked this turn.");
|
||||
ability.addEffect(new CantBeBlockedSourceEffect(Duration.EndOfTurn));
|
||||
this.addAbility(ability);
|
||||
|
||||
this.addAbility(new CyclingAbility(new ManaCostsImpl("{W/U}")));
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
package mage.sets.avacynrestored;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.effects.common.combat.UnblockableTargetEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Rarity;
|
||||
|
@ -46,8 +46,8 @@ public class Ghostform extends CardImpl {
|
|||
|
||||
this.color.setBlue(true);
|
||||
|
||||
// Up to two target creatures are unblockable this turn.
|
||||
this.getSpellAbility().addEffect(new UnblockableTargetEffect());
|
||||
// Up to two target creatures can't be blocked this turn..
|
||||
this.getSpellAbility().addEffect(new CantBeBlockedTargetEffect());
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 2));
|
||||
}
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ import java.util.UUID;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.Rarity;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
||||
/**
|
||||
|
@ -49,8 +49,8 @@ public class LatchSeeker extends CardImpl {
|
|||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// Latch Seeker is unblockable.
|
||||
this.addAbility(new UnblockableAbility());
|
||||
// Latch Seeker can't be blocked.
|
||||
this.addAbility(new CantBeBlockedSourceAbility());
|
||||
}
|
||||
|
||||
public LatchSeeker(final LatchSeeker card) {
|
||||
|
|
|
@ -37,7 +37,7 @@ import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
|
|||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.combat.UnblockableTargetEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
|
||||
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
|
||||
import mage.abilities.keyword.NinjutsuAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
@ -77,8 +77,8 @@ public class HigureTheStillWind extends CardImpl {
|
|||
// Whenever Higure, the Still Wind deals combat damage to a player, you may search your library for a Ninja card, reveal it, and put it into your hand. If you do, shuffle your library.
|
||||
this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter)), true));
|
||||
|
||||
// {2}: Target Ninja creature is unblockable this turn.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new UnblockableTargetEffect(), new GenericManaCost(2));
|
||||
// {2}: Target Ninja creature can't be blocked this turn.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CantBeBlockedTargetEffect(), new GenericManaCost(2));
|
||||
ability.addTarget(new TargetCreaturePermanent(filterCreature));
|
||||
this.addAbility(ability);
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ import mage.abilities.common.SimpleActivatedAbility;
|
|||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.combat.UnblockableTargetEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.Filter;
|
||||
|
@ -64,8 +64,8 @@ public class MinamoSightbender extends CardImpl {
|
|||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// {X}, {T}: Target creature with power X or less is unblockable this turn.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new UnblockableTargetEffect(), new ManaCostsImpl("{X}"));
|
||||
// {X}, {T}: Target creature with power X or less can't be blocked this turn.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CantBeBlockedTargetEffect(), new ManaCostsImpl("{X}"));
|
||||
Target target = new TargetCreaturePermanent(filter);
|
||||
ability.addTarget(target);
|
||||
ability.addCost(new TapSourceCost());
|
||||
|
@ -77,7 +77,7 @@ public class MinamoSightbender extends CardImpl {
|
|||
public void adjustTargets(Ability ability, Game game) {
|
||||
if (ability instanceof SimpleActivatedAbility) {
|
||||
for (Effect effect :ability.getEffects()) {
|
||||
if (effect instanceof UnblockableTargetEffect) {
|
||||
if (effect instanceof CantBeBlockedTargetEffect) {
|
||||
int manaX = ability.getManaCostsToPay().getX();
|
||||
ability.getTargets().clear();
|
||||
FilterCreaturePermanent newFilter = new FilterCreaturePermanent(new StringBuilder("creature with power ").append(manaX).append(" or less").toString());
|
||||
|
|
|
@ -36,7 +36,7 @@ import mage.abilities.costs.Cost;
|
|||
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||
import mage.abilities.effects.ContinuousEffect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.combat.UnblockableSourceEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
|
@ -62,7 +62,7 @@ public class OgreMarauder extends CardImpl {
|
|||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// Whenever Ogre Marauder attacks, it gains "Ogre Marauder is unblockable" until end of turn unless defending player sacrifices a creature.
|
||||
// Whenever Ogre Marauder attacks, it gains "Ogre Marauder can't be blocked" until end of turn unless defending player sacrifices a creature.
|
||||
this.addAbility(new AttacksTriggeredAbility(new OgreMarauderEffect(), false));
|
||||
}
|
||||
|
||||
|
@ -80,7 +80,7 @@ class OgreMarauderEffect extends OneShotEffect {
|
|||
|
||||
public OgreMarauderEffect() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "it gains \"{this} is unblockable\" until end of turn unless defending player sacrifices a creature";
|
||||
this.staticText = "it gains \"{this} can't be blocked\" until end of turn unless defending player sacrifices a creature";
|
||||
}
|
||||
|
||||
public OgreMarauderEffect(final OgreMarauderEffect effect) {
|
||||
|
@ -100,10 +100,10 @@ class OgreMarauderEffect extends OneShotEffect {
|
|||
if (defender != null && sourceObject != null) {
|
||||
Cost cost = new SacrificeTargetCost(new TargetControlledCreaturePermanent());
|
||||
if (cost.canPay(source, source.getSourceId(), defendingPlayerId, game) &&
|
||||
defender.chooseUse(Outcome.LoseAbility, "Sacrifice a creature to prevent " + sourceObject.getLogName() + " from getting unblockable?", game)) {
|
||||
defender.chooseUse(Outcome.LoseAbility, "Sacrifice a creature to prevent that " + sourceObject.getLogName() + " can't be blocked?", game)) {
|
||||
if (!cost.pay(source, game, source.getSourceId(), defendingPlayerId, false)) {
|
||||
// cost was not payed - so source gets unblockable
|
||||
ContinuousEffect effect = new UnblockableSourceEffect(Duration.EndOfTurn);
|
||||
// cost was not payed - so source can't be blocked
|
||||
ContinuousEffect effect = new CantBeBlockedSourceEffect(Duration.EndOfTurn);
|
||||
game.addEffect(effect, source);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ import java.util.UUID;
|
|||
import mage.ObjectColor;
|
||||
import mage.abilities.costs.common.ReturnToHandTargetCost;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.combat.UnblockableTargetEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
|
||||
import mage.abilities.keyword.ShroudAbility;
|
||||
import mage.abilities.keyword.SpliceOntoArcaneAbility;
|
||||
|
@ -61,13 +61,13 @@ public class VeilOfSecrecy extends CardImpl {
|
|||
this.expansionSetCode = "BOK";
|
||||
this.subtype.add("Arcane");
|
||||
|
||||
// Target creature gains shroud until end of turn and is unblockable this turn.
|
||||
// Target creature gains shroud until end of turn and is can't be blocked this turn.
|
||||
Effect effect = new GainAbilityTargetEffect(ShroudAbility.getInstance(), Duration.EndOfTurn);
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||
effect.setText("Target creature gains shroud until end of turn");
|
||||
this.getSpellAbility().addEffect(effect);
|
||||
effect = new UnblockableTargetEffect();
|
||||
effect.setText("and is unblockable this turn");
|
||||
effect = new CantBeBlockedTargetEffect();
|
||||
effect.setText("and can't be blocked this turn");
|
||||
this.getSpellAbility().addEffect(effect);
|
||||
|
||||
// Splice onto Arcane-Return a blue creature you control to its owner's hand.
|
||||
|
|
|
@ -35,7 +35,6 @@ import mage.abilities.costs.mana.ManaCostsImpl;
|
|||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.AttachEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedByTargetSourceEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostEnchantedEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
|
||||
import mage.abilities.keyword.EnchantAbility;
|
||||
|
|
|
@ -31,10 +31,10 @@ import java.util.UUID;
|
|||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.combat.UnblockableAttachedEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedAttachedEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostEnchantedEffect;
|
||||
import mage.abilities.keyword.BestowAbility;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.AttachmentType;
|
||||
import mage.constants.CardType;
|
||||
|
@ -60,10 +60,10 @@ public class FlitterstepEidolon extends CardImpl {
|
|||
// Bestow {5}{U}
|
||||
this.addAbility(new BestowAbility(this, "{5}{U}"));
|
||||
// Flitterstep Eidolon can't be blocked.
|
||||
this.addAbility(new UnblockableAbility());
|
||||
this.addAbility(new CantBeBlockedSourceAbility());
|
||||
// Enchanted creature gets +1/+1 and can't be blocked.
|
||||
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(1,1, Duration.WhileOnBattlefield));
|
||||
ability.addEffect(new UnblockableAttachedEffect(AttachmentType.AURA));
|
||||
ability.addEffect(new CantBeBlockedAttachedEffect(AttachmentType.AURA));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.ReturnToHandTargetCost;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.effects.common.combat.UnblockableTargetEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.filter.Filter;
|
||||
|
@ -72,8 +72,8 @@ public class SoratamiMirrorGuard extends CardImpl {
|
|||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// {2}, Return a land you control to its owner's hand: Target creature with power 2 or less is unblockable this turn.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new UnblockableTargetEffect(), new GenericManaCost(2));
|
||||
// {2}, Return a land you control to its owner's hand: Target creature with power 2 or less can't be blocked this turn.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CantBeBlockedTargetEffect(), new GenericManaCost(2));
|
||||
ability.addCost(new ReturnToHandTargetCost(new TargetControlledPermanent(filter)));
|
||||
ability.addTarget(new TargetCreaturePermanent(filterCreature));
|
||||
this.addAbility(ability);
|
||||
|
|
|
@ -33,7 +33,7 @@ import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
|||
import mage.abilities.condition.common.ManaWasSpentCondition;
|
||||
import mage.abilities.effects.common.GainLifeEffect;
|
||||
import mage.abilities.effects.common.SacrificeSourceUnlessConditionEffect;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.ColoredManaSymbol;
|
||||
|
@ -56,7 +56,7 @@ public class AzoriusHerald extends CardImpl {
|
|||
this.toughness = new MageInt(1);
|
||||
|
||||
// Azorius Herald can't be blocked.
|
||||
this.addAbility(new UnblockableAbility());
|
||||
this.addAbility(new CantBeBlockedSourceAbility());
|
||||
// When Azorius Herald enters the battlefield, you gain 4 life.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(4)));
|
||||
// When Azorius Herald enters the battlefield, sacrifice it unless {U} was spent to cast it.
|
||||
|
|
|
@ -38,7 +38,7 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.effects.common.PreventDamageToTargetEffect;
|
||||
import mage.abilities.effects.common.combat.UnblockableTargetEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.target.common.TargetCreatureOrPlayer;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
@ -64,8 +64,8 @@ public class JhessianBalmgiver extends CardImpl {
|
|||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PreventDamageToTargetEffect(Duration.EndOfTurn, 1), new TapSourceCost());
|
||||
ability.addTarget(new TargetCreatureOrPlayer());
|
||||
this.addAbility(ability);
|
||||
// {tap}: Target creature is unblockable this turn.
|
||||
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new UnblockableTargetEffect(), new TapSourceCost());
|
||||
// {tap}: Target creature can't be blocked this turn.
|
||||
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CantBeBlockedTargetEffect(), new TapSourceCost());
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@ import mage.MageInt;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.combat.UnblockableSourceEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
|
||||
|
@ -57,11 +57,11 @@ public class VectisAgents extends CardImpl {
|
|||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// {U}{B}: Vectis Agents gets -2/-0 until end of turn and is unblockable this turn.
|
||||
// {U}{B}: Vectis Agents gets -2/-0 until end of turn and can't be blocked this turn.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
||||
new BoostSourceEffect(-2, -0, Duration.EndOfTurn),
|
||||
new ManaCostsImpl("{U}{B}"));
|
||||
ability.addEffect(new UnblockableSourceEffect(Duration.EndOfTurn));
|
||||
ability.addEffect(new CantBeBlockedSourceEffect(Duration.EndOfTurn));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
|
|
|
@ -56,8 +56,6 @@ public class MarchesasSmuggler extends CardImpl {
|
|||
this.subtype.add("Human");
|
||||
this.subtype.add("Rogue");
|
||||
|
||||
this.color.setRed(true);
|
||||
this.color.setBlue(true);
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ import mage.constants.CardType;
|
|||
import mage.constants.Rarity;
|
||||
import mage.constants.TimingRule;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.combat.UnblockableTargetEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
|
||||
import mage.abilities.keyword.FlashbackAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
@ -49,8 +49,8 @@ public class ArtfulDodge extends CardImpl {
|
|||
|
||||
this.color.setBlue(true);
|
||||
|
||||
// Target creature is unblockable this turn.
|
||||
this.getSpellAbility().addEffect(new UnblockableTargetEffect());
|
||||
// Target creature can't be blocked this turn.
|
||||
this.getSpellAbility().addEffect(new CantBeBlockedTargetEffect());
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||
// Flashback {U}
|
||||
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{U}"), TimingRule.SORCERY));
|
||||
|
|
|
@ -38,7 +38,7 @@ import mage.MageInt;
|
|||
import mage.abilities.common.BlocksTriggeredAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.RemoveCountersSourceCost;
|
||||
import mage.abilities.effects.common.combat.UnblockableSourceEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.counters.CounterType;
|
||||
|
@ -57,9 +57,9 @@ public class Spincrusher extends CardImpl {
|
|||
|
||||
// Whenever Spincrusher blocks, put a +1/+1 counter on it.
|
||||
this.addAbility(new BlocksTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false));
|
||||
// Remove a +1/+1 counter from Spincrusher: Spincrusher is unblockable this turn.
|
||||
// Remove a +1/+1 counter from Spincrusher: Spincrusher can't be blocked this turn.
|
||||
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
||||
new UnblockableSourceEffect(Duration.EndOfTurn),
|
||||
new CantBeBlockedSourceEffect(Duration.EndOfTurn),
|
||||
new RemoveCountersSourceCost(CounterType.P1P1.createInstance(1))));
|
||||
}
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ import mage.abilities.common.SimpleStaticAbility;
|
|||
import mage.abilities.condition.common.DefendingPlayerControlsCondition;
|
||||
import mage.abilities.decorator.ConditionalRestrictionEffect;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.combat.UnblockableAllEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedAllEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
|
@ -65,11 +65,11 @@ public class Tanglewalker extends CardImpl {
|
|||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// Each creature you control is unblockable as long as defending player controls an artifact land.
|
||||
// Each creature you control can't be blocked as long as defending player controls an artifact land.
|
||||
Effect effect = new ConditionalRestrictionEffect(
|
||||
new UnblockableAllEffect(new FilterControlledCreaturePermanent("Creatures you control"), Duration.WhileOnBattlefield),
|
||||
new CantBeBlockedAllEffect(new FilterControlledCreaturePermanent("Creatures you control"), Duration.WhileOnBattlefield),
|
||||
new DefendingPlayerControlsCondition(filter));
|
||||
effect.setText("Each creature you control is unblockable as long as defending player controls an artifact land");
|
||||
effect.setText("Each creature you control can't be blocked as long as defending player controls an artifact land");
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
|
||||
}
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbil
|
|||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.ReturnFromExileEffect;
|
||||
import mage.abilities.effects.common.combat.UnblockableSourceEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.game.Game;
|
||||
|
@ -66,8 +66,8 @@ public class AEtherling extends CardImpl {
|
|||
|
||||
// {U}: Exile AEtherling. Return it to the battlefield under its owner's control at the beginning of the next end step.
|
||||
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new AEherlingRemovingEffect(), new ManaCostsImpl("{U}")));
|
||||
// {U}: AEtherling is unblockable this turn
|
||||
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new UnblockableSourceEffect(), new ManaCostsImpl("{U}")));
|
||||
// {U}: AEtherling can't be blocked this turn
|
||||
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CantBeBlockedSourceEffect(), new ManaCostsImpl("{U}")));
|
||||
// {1}: AEtherling gets +1/-1 until end of turn.
|
||||
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, -1, Duration.EndOfTurn), new ManaCostsImpl("{1}")));
|
||||
// {1}: AEtherling gets -1/+1 until end of turn
|
||||
|
|
|
@ -31,7 +31,7 @@ import java.util.UUID;
|
|||
import mage.MageInt;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.keyword.MorphAbility;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Rarity;
|
||||
|
@ -50,7 +50,7 @@ public class GudulLurker extends CardImpl {
|
|||
this.toughness = new MageInt(1);
|
||||
|
||||
// Gudul Lurker can't be blocked.
|
||||
this.addAbility(new UnblockableAbility());
|
||||
this.addAbility(new CantBeBlockedSourceAbility());
|
||||
|
||||
// Megamorph {U}
|
||||
this.addAbility(new MorphAbility(this, new ManaCostsImpl("{U}"), true));
|
||||
|
|
|
@ -34,7 +34,7 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.common.SpellCastControllerTriggeredAbility;
|
||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||
import mage.abilities.effects.common.continuous.SetPowerToughnessSourceEffect;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
|
@ -70,7 +70,7 @@ public class RiverfallMimic extends CardImpl {
|
|||
|
||||
// Whenever you cast a spell that's both blue and red, Riverfall Mimic has base power and toughness 3/3 until end of turn and can't be blocked this turn.
|
||||
Ability ability = new SpellCastControllerTriggeredAbility(new SetPowerToughnessSourceEffect(3, 3, Duration.EndOfTurn), filter, false, rule);
|
||||
ability.addEffect(new GainAbilitySourceEffect(new UnblockableAbility(), Duration.EndOfTurn, false, true));
|
||||
ability.addEffect(new GainAbilitySourceEffect(new CantBeBlockedSourceAbility(), Duration.EndOfTurn, false, true));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ import mage.abilities.costs.mana.ManaCostsImpl;
|
|||
import mage.abilities.decorator.ConditionalRestrictionEffect;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.combat.UnblockableSourceEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect;
|
||||
import mage.abilities.effects.common.continuous.BecomesFaceDownCreatureEffect;
|
||||
import mage.abilities.effects.common.continuous.BecomesFaceDownCreatureEffect.FaceDownType;
|
||||
import mage.cards.Card;
|
||||
|
@ -71,7 +71,7 @@ public class JeskaiInfiltrator extends CardImpl {
|
|||
this.toughness = new MageInt(3);
|
||||
|
||||
// Jeskai Infiltrator can't be blocked as long as you control no other creatures.
|
||||
Effect effect = new ConditionalRestrictionEffect(new UnblockableSourceEffect(), new OneControlledCreatureCondition());
|
||||
Effect effect = new ConditionalRestrictionEffect(new CantBeBlockedSourceEffect(), new OneControlledCreatureCondition());
|
||||
effect.setText("{this} can't be blocked as long as you control no other creatures");
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ import mage.abilities.common.SimpleStaticAbility;
|
|||
import mage.abilities.effects.AsThoughEffectImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.combat.CantBlockSourceEffect;
|
||||
import mage.abilities.effects.common.combat.UnblockableSourceEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.AsThoughEffectType;
|
||||
|
@ -65,7 +65,7 @@ public class MarangRiverProwler extends CardImpl {
|
|||
|
||||
// Marang River Prowler can't block and can't be blocked.
|
||||
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBlockSourceEffect(Duration.WhileOnBattlefield));
|
||||
Effect effect = new UnblockableSourceEffect();
|
||||
Effect effect = new CantBeBlockedSourceEffect();
|
||||
effect.setText("and can't be blocked");
|
||||
ability.addEffect(effect);
|
||||
this.addAbility(ability);
|
||||
|
|
|
@ -30,7 +30,7 @@ package mage.sets.fifthdawn;
|
|||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.combat.UnblockableSourceEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Rarity;
|
||||
|
@ -51,8 +51,8 @@ public class PlasmaElemental extends CardImpl {
|
|||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// Plasma Elemental is unblockable.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new UnblockableSourceEffect()));
|
||||
// Plasma Elemental can't be blocked.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedSourceEffect()));
|
||||
}
|
||||
|
||||
public PlasmaElemental(final PlasmaElemental card) {
|
||||
|
|
|
@ -36,7 +36,7 @@ import mage.MageInt;
|
|||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.abilities.mana.BlackManaAbility;
|
||||
import mage.abilities.mana.BlueManaAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
@ -56,7 +56,7 @@ public class DimirKeyrune extends CardImpl {
|
|||
this.addAbility(new BlueManaAbility());
|
||||
this.addAbility(new BlackManaAbility());
|
||||
|
||||
// {U}{B}: Dimir Keyrune becomes a 2/2 blue and black Horror and is unblockable this turn
|
||||
// {U}{B}: Dimir Keyrune becomes a 2/2 blue and black Horror and can't be blocked this turn
|
||||
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesCreatureSourceEffect(new DimirKeyruneToken(), "", Duration.EndOfTurn), new ManaCostsImpl("{U}{B}")));
|
||||
}
|
||||
|
||||
|
@ -71,7 +71,7 @@ public class DimirKeyrune extends CardImpl {
|
|||
|
||||
private class DimirKeyruneToken extends Token {
|
||||
DimirKeyruneToken() {
|
||||
super("Horror", "2/2 blue and black Horror until end of turn and is unblockable this turn");
|
||||
super("Horror", "2/2 blue and black Horror until end of turn and can't be blocked this turn");
|
||||
cardType.add(CardType.ARTIFACT);
|
||||
cardType.add(CardType.CREATURE);
|
||||
color.setBlue(true);
|
||||
|
@ -79,7 +79,7 @@ public class DimirKeyrune extends CardImpl {
|
|||
subtype.add("Horror");
|
||||
power = new MageInt(2);
|
||||
toughness = new MageInt(2);
|
||||
this.addAbility(new UnblockableAbility());
|
||||
this.addAbility(new CantBeBlockedSourceAbility());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ import mage.constants.CardType;
|
|||
import mage.constants.Rarity;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.keyword.EvolveAbility;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
||||
/**
|
||||
|
@ -52,8 +52,8 @@ public class ElusiveKrasis extends CardImpl {
|
|||
this.power = new MageInt(0);
|
||||
this.toughness = new MageInt(4);
|
||||
|
||||
// Elusive Krasis is unblockable.
|
||||
this.addAbility(new UnblockableAbility());
|
||||
// Elusive Krasis can't be blocked.
|
||||
this.addAbility(new CantBeBlockedSourceAbility());
|
||||
// Evolve
|
||||
this.addAbility(new EvolveAbility());
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@ import mage.abilities.common.SimpleStaticAbility;
|
|||
import mage.abilities.costs.common.SacrificeSourceCost;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.effects.AsThoughEffectImpl;
|
||||
import mage.abilities.effects.common.combat.UnblockableAllEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedAllEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||
import mage.abilities.keyword.HexproofAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
@ -57,7 +57,7 @@ import mage.game.permanent.Permanent;
|
|||
* ignore hexproof for purposes of choosing targets of spells and abilities you control.
|
||||
*
|
||||
* Creatures that come under your control after Glaring Spotlight's last ability
|
||||
* resolves won't have hexproof but will be unblockable that turn.
|
||||
* resolves won't have hexproof but can't be blocked that turn.
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
|
@ -70,11 +70,11 @@ public class GlaringSpotlight extends CardImpl {
|
|||
// Creatures your opponents control with hexproof can be the targets of spells and abilities you control as though they didn't have hexproof.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GlaringSpotlightEffect()));
|
||||
|
||||
// {3}, Sacrifice Glaring Spotlight: Creatures you control gain hexproof until end of turn and are unblockable this turn.
|
||||
// {3}, Sacrifice Glaring Spotlight: Creatures you control gain hexproof until end of turn and can't be blocked this turn.
|
||||
Ability ability = new SimpleActivatedAbility(
|
||||
Zone.BATTLEFIELD, new GainAbilityControlledEffect(HexproofAbility.getInstance(), Duration.EndOfTurn, new FilterCreaturePermanent(),false),
|
||||
new GenericManaCost(3));
|
||||
ability.addEffect(new UnblockableAllEffect(new FilterControlledCreaturePermanent(), Duration.EndOfTurn));
|
||||
ability.addEffect(new CantBeBlockedAllEffect(new FilterControlledCreaturePermanent(), Duration.EndOfTurn));
|
||||
ability.addCost(new SacrificeSourceCost());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ import java.util.UUID;
|
|||
import mage.constants.*;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.effects.common.combat.UnblockableSourceEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.game.Game;
|
||||
|
@ -56,7 +56,7 @@ public class IncursionSpecialist extends CardImpl {
|
|||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// Whenever you cast your second spell each turn, Incursion Specialist gets +2/+0 until end of turn and is unblockable this turn.
|
||||
// Whenever you cast your second spell each turn, Incursion Specialist gets +2/+0 until end of turn and can't be blocked this turn.
|
||||
this.addAbility(new IncursionTriggeredAbility(), new IncursionWatcher());
|
||||
}
|
||||
|
||||
|
@ -74,7 +74,7 @@ class IncursionTriggeredAbility extends TriggeredAbilityImpl {
|
|||
|
||||
public IncursionTriggeredAbility() {
|
||||
super(Zone.BATTLEFIELD, new BoostSourceEffect(2, 0, Duration.EndOfTurn));
|
||||
this.addEffect(new UnblockableSourceEffect(Duration.EndOfTurn));
|
||||
this.addEffect(new CantBeBlockedSourceEffect(Duration.EndOfTurn));
|
||||
}
|
||||
|
||||
public IncursionTriggeredAbility(final IncursionTriggeredAbility ability) {
|
||||
|
@ -99,7 +99,7 @@ class IncursionTriggeredAbility extends TriggeredAbilityImpl {
|
|||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever you cast your second spell each turn, Incursion Specialist gets +2/+0 until end of turn and is unblockable this turn.";
|
||||
return "Whenever you cast your second spell each turn, Incursion Specialist gets +2/+0 until end of turn and can't be blocked this turn.";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ import java.util.UUID;
|
|||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.common.ReturnToHandChosenControlledPermanentEffect;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Rarity;
|
||||
|
@ -53,8 +53,8 @@ public class KeymasterRogue extends CardImpl {
|
|||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// Keymaster Rogue is unblockable.
|
||||
this.addAbility(new UnblockableAbility());
|
||||
// Keymaster Rogue can't be blocked.
|
||||
this.addAbility(new CantBeBlockedSourceAbility());
|
||||
// When Keymaster Rogue enters the battlefield, return a creature you control to its owner's hand.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new ReturnToHandChosenControlledPermanentEffect(new FilterControlledCreaturePermanent())));
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@ import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
|||
import mage.abilities.decorator.ConditionalRestrictionEffect;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.AttachEffect;
|
||||
import mage.abilities.effects.common.combat.UnblockableAttachedEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedAttachedEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostEnchantedEffect;
|
||||
import mage.abilities.keyword.EnchantAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
@ -61,7 +61,7 @@ public class WayOfTheThief extends CardImpl {
|
|||
static {
|
||||
filter.add(new SubtypePredicate("Gate"));
|
||||
}
|
||||
private final String rule = "Enchanted creature is unblockable as long as you control a Gate";
|
||||
private final String rule = "Enchanted creature can't be blocked as long as you control a Gate";
|
||||
|
||||
public WayOfTheThief(UUID ownerId) {
|
||||
super(ownerId, 56, "Way of the Thief", Rarity.COMMON, new CardType[]{CardType.ENCHANTMENT}, "{3}{U}");
|
||||
|
@ -80,8 +80,8 @@ public class WayOfTheThief extends CardImpl {
|
|||
// Enchanted creature gets +2/+2.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 2, Duration.WhileOnBattlefield)));
|
||||
|
||||
// Enchanted creature is unblockable as long as you control a Gate.
|
||||
Effect effect = new ConditionalRestrictionEffect(new UnblockableAttachedEffect(AttachmentType.AURA), new PermanentsOnTheBattlefieldCondition(filter));
|
||||
// Enchanted creature can't be blocked as long as you control a Gate.
|
||||
Effect effect = new ConditionalRestrictionEffect(new CantBeBlockedAttachedEffect(AttachmentType.AURA), new PermanentsOnTheBattlefieldCondition(filter));
|
||||
effect.setText(rule);
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
|
||||
}
|
||||
|
|
|
@ -79,7 +79,7 @@ public class InfiltratorsMagemark extends CardImpl {
|
|||
this.addAbility(ability);
|
||||
// Creatures you control that are enchanted get +1/+1 and can't be blocked except by creatures with defender.
|
||||
ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostAllEffect(1,1, Duration.WhileOnBattlefield, filter, false));
|
||||
Effect effect = new InfiltratorsMagemarkUnblockableAllEffect(filter, Duration.WhileOnBattlefield);
|
||||
Effect effect = new InfiltratorsMagemarkCantBeBlockedAllEffect(filter, Duration.WhileOnBattlefield);
|
||||
ability.addEffect(effect);
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
@ -94,24 +94,24 @@ public class InfiltratorsMagemark extends CardImpl {
|
|||
}
|
||||
}
|
||||
|
||||
class InfiltratorsMagemarkUnblockableAllEffect extends RestrictionEffect {
|
||||
class InfiltratorsMagemarkCantBeBlockedAllEffect extends RestrictionEffect {
|
||||
|
||||
private FilterPermanent filter;
|
||||
private final FilterPermanent filter;
|
||||
|
||||
public InfiltratorsMagemarkUnblockableAllEffect(FilterPermanent filter, Duration duration) {
|
||||
public InfiltratorsMagemarkCantBeBlockedAllEffect(FilterPermanent filter, Duration duration) {
|
||||
super(duration);
|
||||
this.filter = filter;
|
||||
this.staticText = "and can't be blocked except by creatures with defender";
|
||||
}
|
||||
|
||||
public InfiltratorsMagemarkUnblockableAllEffect(InfiltratorsMagemarkUnblockableAllEffect effect) {
|
||||
public InfiltratorsMagemarkCantBeBlockedAllEffect(InfiltratorsMagemarkCantBeBlockedAllEffect effect) {
|
||||
super(effect);
|
||||
this.filter = effect.filter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public InfiltratorsMagemarkUnblockableAllEffect copy() {
|
||||
return new InfiltratorsMagemarkUnblockableAllEffect(this);
|
||||
public InfiltratorsMagemarkCantBeBlockedAllEffect copy() {
|
||||
return new InfiltratorsMagemarkCantBeBlockedAllEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -32,7 +32,7 @@ import mage.constants.CardType;
|
|||
import mage.constants.Rarity;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.keyword.HexproofAbility;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
||||
/**
|
||||
|
@ -52,8 +52,8 @@ public class InvisibleStalker extends CardImpl {
|
|||
this.toughness = new MageInt(1);
|
||||
|
||||
this.addAbility(HexproofAbility.getInstance());
|
||||
// Invisible Stalker is unblockable.
|
||||
this.addAbility(new UnblockableAbility());
|
||||
// Invisible Stalker can't be blocked.
|
||||
this.addAbility(new CantBeBlockedSourceAbility());
|
||||
}
|
||||
|
||||
public InvisibleStalker(final InvisibleStalker card) {
|
||||
|
|
|
@ -29,7 +29,7 @@ package mage.sets.journeyintonyx;
|
|||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Rarity;
|
||||
|
@ -51,7 +51,7 @@ public class TritonShorestalker extends CardImpl {
|
|||
this.toughness = new MageInt(1);
|
||||
|
||||
// Triton Shorestalker can't be blocked.
|
||||
this.addAbility(new UnblockableAbility("{this} can't be blocked"));
|
||||
this.addAbility(new CantBeBlockedSourceAbility("{this} can't be blocked"));
|
||||
}
|
||||
|
||||
public TritonShorestalker(final TritonShorestalker card) {
|
||||
|
|
|
@ -49,7 +49,6 @@ public class WhitewaterNaiads extends CardImpl {
|
|||
this.expansionSetCode = "JOU";
|
||||
this.subtype.add("Nymph");
|
||||
|
||||
this.color.setBlue(true);
|
||||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(4);
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ import mage.MageInt;
|
|||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesSourceEffect;
|
||||
import mage.abilities.keyword.MorphAbility;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Rarity;
|
||||
|
@ -54,7 +54,7 @@ public class MysticOfTheHiddenWay extends CardImpl {
|
|||
this.toughness = new MageInt(2);
|
||||
|
||||
// Mystic of the Hidden Way can't be blocked.
|
||||
this.addAbility(new UnblockableAbility());
|
||||
this.addAbility(new CantBeBlockedSourceAbility());
|
||||
// Morph {2}{U}
|
||||
this.addAbility(new MorphAbility(this, new ManaCostsImpl("{2}{U}")));
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@ import mage.constants.Rarity;
|
|||
import mage.constants.Zone;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.AttachEffect;
|
||||
import mage.abilities.effects.common.combat.UnblockableAttachedEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedAttachedEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
|
||||
import mage.abilities.keyword.EnchantAbility;
|
||||
import mage.abilities.keyword.ShroudAbility;
|
||||
|
@ -60,8 +60,8 @@ public class ProtectiveBubble extends CardImpl {
|
|||
this.getSpellAbility().addTarget(auraTarget);
|
||||
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
|
||||
this.addAbility(new EnchantAbility(auraTarget.getTargetName()));
|
||||
// Enchanted creature is unblockable and has shroud.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new UnblockableAttachedEffect(AttachmentType.AURA)));
|
||||
// Enchanted creature can't be blocked and has shroud.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedAttachedEffect(AttachmentType.AURA)));
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(ShroudAbility.getInstance(), AttachmentType.AURA)));
|
||||
}
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.effects.common.combat.UnblockableTargetEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostControlledEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
|
@ -69,8 +69,8 @@ public class MerfolkSovereign extends CardImpl {
|
|||
|
||||
// Other Merfolk creatures you control get +1/+1.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, filter1, true)));
|
||||
// {tap}: Target Merfolk creature is unblockable this turn.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new UnblockableTargetEffect(), new TapSourceCost());
|
||||
// {tap}: Target Merfolk creature can't be blocked this turn.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CantBeBlockedTargetEffect(), new TapSourceCost());
|
||||
ability.addTarget(new TargetCreaturePermanent(filter2));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ import java.util.UUID;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.Rarity;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
||||
/**
|
||||
|
@ -48,7 +48,7 @@ public class PhantomWarrior extends CardImpl {
|
|||
this.color.setBlue(true);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
this.addAbility(new UnblockableAbility());
|
||||
this.addAbility(new CantBeBlockedSourceAbility());
|
||||
}
|
||||
|
||||
public PhantomWarrior(final PhantomWarrior card) {
|
||||
|
|
|
@ -75,7 +75,7 @@ public class StormtideLeviathan extends CardImpl {
|
|||
this.power = new MageInt(8);
|
||||
this.toughness = new MageInt(8);
|
||||
|
||||
// Islandwalk (This creature is unblockable as long as defending player controls an Island.)
|
||||
// Islandwalk (This creature can't be blocked as long as defending player controls an Island.)
|
||||
this.addAbility(new IslandwalkAbility());
|
||||
// All lands are Islands in addition to their other types.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new StormtideLeviathanEffect()));
|
||||
|
|
|
@ -34,7 +34,7 @@ import mage.constants.CardType;
|
|||
import mage.constants.Rarity;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.CantBlockAbility;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
||||
/**
|
||||
|
@ -50,7 +50,7 @@ public class TormentedSoul extends CardImpl {
|
|||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
this.addAbility(new CantBlockAbility());
|
||||
this.addAbility(new UnblockableAbility());
|
||||
this.addAbility(new CantBeBlockedSourceAbility());
|
||||
}
|
||||
|
||||
public TormentedSoul(final TormentedSoul card) {
|
||||
|
|
|
@ -38,7 +38,7 @@ import mage.abilities.common.SimpleStaticAbility;
|
|||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.decorator.ConditionalContinuousEffect;
|
||||
import mage.abilities.effects.common.combat.UnblockableSourceEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.filter.FilterPermanent;
|
||||
|
@ -71,9 +71,9 @@ public class HarborBandit extends CardImpl {
|
|||
ConditionalContinuousEffect effect = new ConditionalContinuousEffect(new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), new PermanentsOnTheBattlefieldCondition(filter), rule);
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
|
||||
|
||||
// {1}{U}: Harbor Bandit is unblockable this turn.
|
||||
// {1}{U}: Harbor Bandit can't be blocked this turn.
|
||||
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
||||
new UnblockableSourceEffect(Duration.EndOfTurn),
|
||||
new CantBeBlockedSourceEffect(Duration.EndOfTurn),
|
||||
new ManaCostsImpl("{1}{U}")));
|
||||
}
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ import mage.constants.Rarity;
|
|||
import mage.constants.Zone;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.AttachEffect;
|
||||
import mage.abilities.effects.common.combat.UnblockableAttachedEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedAttachedEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostEnchantedEffect;
|
||||
import mage.abilities.keyword.EnchantAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
@ -62,9 +62,9 @@ public class TricksOfTheTrade extends CardImpl {
|
|||
this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility));
|
||||
this.addAbility(new EnchantAbility(target.getTargetName()));
|
||||
|
||||
// Enchanted creature gets +2/+0 and is unblockable.
|
||||
// Enchanted creature gets +2/+0 and can't be blocked.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 0, Duration.WhileOnBattlefield)));
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new UnblockableAttachedEffect(AttachmentType.AURA)));
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedAttachedEffect(AttachmentType.AURA)));
|
||||
}
|
||||
|
||||
public TricksOfTheTrade(final TricksOfTheTrade card) {
|
||||
|
|
|
@ -52,7 +52,6 @@ public class AmphinPathmage extends CardImpl {
|
|||
this.subtype.add("Salamander");
|
||||
this.subtype.add("Wizard");
|
||||
|
||||
this.color.setBlue(true);
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ import mage.abilities.common.SimpleStaticAbility;
|
|||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.DestroyTargetEffect;
|
||||
import mage.abilities.effects.common.combat.UnblockableAttachedEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedAttachedEffect;
|
||||
import mage.abilities.keyword.EquipAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.AttachmentType;
|
||||
|
@ -58,7 +58,7 @@ public class HotSoup extends CardImpl {
|
|||
this.subtype.add("Equipment");
|
||||
|
||||
// Equipped creature can't be blocked.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new UnblockableAttachedEffect(AttachmentType.EQUIPMENT)));
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedAttachedEffect(AttachmentType.EQUIPMENT)));
|
||||
|
||||
// Whenever equipped creature is dealt damage, destroy it.
|
||||
this.addAbility(new HotSoupTriggeredAbility());
|
||||
|
|
|
@ -33,7 +33,7 @@ import mage.abilities.common.SimpleStaticAbility;
|
|||
import mage.abilities.condition.common.DefendingPlayerControlsCondition;
|
||||
import mage.abilities.decorator.ConditionalRestrictionEffect;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.combat.UnblockableSourceEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Rarity;
|
||||
|
@ -55,11 +55,11 @@ public class NeurokSpy extends CardImpl {
|
|||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
//Neurok Spy is unblockable as long as defending player controls an artifact.
|
||||
//Neurok Spy can't be blocked as long as defending player controls an artifact.
|
||||
Effect effect = new ConditionalRestrictionEffect(
|
||||
new UnblockableSourceEffect(),
|
||||
new CantBeBlockedSourceEffect(),
|
||||
new DefendingPlayerControlsCondition(new FilterArtifactPermanent()));
|
||||
effect.setText("{this} is unblockable as long as defending player controls an artifact");
|
||||
effect.setText("{this} can't be blocked as long as defending player controls an artifact");
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
|
||||
}
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ import mage.constants.CardType;
|
|||
import mage.constants.Rarity;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.keyword.InfectAbility;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
||||
/**
|
||||
|
@ -52,7 +52,7 @@ public class BlightedAgent extends CardImpl {
|
|||
this.toughness = new MageInt(1);
|
||||
|
||||
this.addAbility(InfectAbility.getInstance());
|
||||
this.addAbility(new UnblockableAbility());
|
||||
this.addAbility(new CantBeBlockedSourceAbility());
|
||||
}
|
||||
|
||||
public BlightedAgent(final BlightedAgent card) {
|
||||
|
|
|
@ -36,7 +36,7 @@ import mage.constants.Zone;
|
|||
import mage.MageInt;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.mana.PhyrexianManaCost;
|
||||
import mage.abilities.effects.common.combat.UnblockableSourceEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
|
||||
/**
|
||||
|
@ -53,9 +53,9 @@ public class TrespassingSouleater extends CardImpl {
|
|||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// {UP}: Trespassing Souleater is unblockable this turn.
|
||||
// {UP}: Trespassing Souleater can't be blocked this turn.
|
||||
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
||||
new UnblockableSourceEffect(Duration.EndOfTurn),
|
||||
new CantBeBlockedSourceEffect(Duration.EndOfTurn),
|
||||
new PhyrexianManaCost(ColoredManaSymbol.U)));
|
||||
}
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ import java.util.UUID;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.Rarity;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
||||
/**
|
||||
|
@ -49,8 +49,8 @@ public class TidalKraken extends CardImpl {
|
|||
this.power = new MageInt(6);
|
||||
this.toughness = new MageInt(6);
|
||||
|
||||
// Tidal Kraken is unblockable.
|
||||
this.addAbility(new UnblockableAbility());
|
||||
// Tidal Kraken can't be blocked.
|
||||
this.addAbility(new CantBeBlockedSourceAbility());
|
||||
}
|
||||
|
||||
public TidalKraken(final TidalKraken card) {
|
||||
|
|
|
@ -35,7 +35,7 @@ import mage.abilities.costs.common.DiscardCardCost;
|
|||
import mage.abilities.costs.common.DiscardTargetCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.ReturnToHandSourceEffect;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Rarity;
|
||||
|
@ -58,8 +58,8 @@ public class EscapeArtist extends CardImpl {
|
|||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// Escape Artist is unblockable.
|
||||
this.addAbility(new UnblockableAbility());
|
||||
// Escape Artist can't be blocked.
|
||||
this.addAbility(new CantBeBlockedSourceAbility());
|
||||
// {U}, Discard a card: Return Escape Artist to its owner's hand.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandSourceEffect(true), new ManaCostsImpl("{U}"));
|
||||
ability.addCost(new DiscardTargetCost(new TargetCardInHand()));
|
||||
|
|
|
@ -46,9 +46,7 @@ public class TouchOfInvisibility extends CardImpl {
|
|||
super(ownerId, 109, "Touch of Invisibility", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{3}{U}");
|
||||
this.expansionSetCode = "ODY";
|
||||
|
||||
this.color.setBlue(true);
|
||||
|
||||
// Target creature is unblockable this turn.
|
||||
// Target creature can't be blocked this turn.
|
||||
this.getSpellAbility().addEffect(new CantBeBlockedTargetEffect(Duration.EndOfTurn));
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||
|
||||
|
|
|
@ -53,6 +53,7 @@ public class ZhugeJinWuStrategist extends CardImpl {
|
|||
this.supertype.add("Legendary");
|
||||
this.subtype.add("Human");
|
||||
this.subtype.add("Advisor");
|
||||
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ import mage.abilities.common.SimpleStaticAbility;
|
|||
import mage.abilities.condition.common.DefendingPlayerControlsCondition;
|
||||
import mage.abilities.decorator.ConditionalRestrictionEffect;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.combat.UnblockableSourceEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterLandPermanent;
|
||||
|
@ -65,11 +65,11 @@ public class HazyHomunculus extends CardImpl {
|
|||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// Hazy Homunculus is unblockable as long as defending player controls an untapped land.
|
||||
// Hazy Homunculus can't be blocked as long as defending player controls an untapped land.
|
||||
Effect effect = new ConditionalRestrictionEffect(
|
||||
new UnblockableSourceEffect(),
|
||||
new CantBeBlockedSourceEffect(),
|
||||
new DefendingPlayerControlsCondition(filter));
|
||||
effect.setText("{this} is unblockable as long as defending player controls an untapped land");
|
||||
effect.setText("{this} can't be blocked as long as defending player controls an untapped land");
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
|
||||
}
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ import mage.constants.CardType;
|
|||
import mage.constants.Rarity;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.keyword.TransmuteAbility;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
||||
/**
|
||||
|
@ -51,8 +51,8 @@ public class DimirInfiltrator extends CardImpl {
|
|||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// Dimir Infiltrator is unblockable.
|
||||
this.addAbility(new UnblockableAbility());
|
||||
// Dimir Infiltrator can't be blocked.
|
||||
this.addAbility(new CantBeBlockedSourceAbility());
|
||||
// Transmute {1}{U}{B}
|
||||
this.addAbility(new TransmuteAbility("{1}{U}{B}"));
|
||||
}
|
||||
|
|
|
@ -36,7 +36,7 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.combat.UnblockableTargetEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
|
||||
import mage.abilities.keyword.TransmuteAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
@ -56,9 +56,9 @@ public class EtherealUsher extends CardImpl {
|
|||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// {U}, {tap}: Target creature is unblockable this turn.
|
||||
// {U}, {tap}: Target creature can't be blocked this turn.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
||||
new UnblockableTargetEffect(),
|
||||
new CantBeBlockedTargetEffect(),
|
||||
new ManaCostsImpl("{U}"));
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
|
|
|
@ -34,7 +34,7 @@ import mage.MageInt;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.common.CreateTokenTargetEffect;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.game.permanent.token.GoblinToken;
|
||||
import mage.target.Target;
|
||||
|
@ -55,8 +55,8 @@ public class HuntedPhantasm extends CardImpl {
|
|||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(6);
|
||||
|
||||
// Hunted Phantasm is unblockable.
|
||||
this.addAbility(new UnblockableAbility());
|
||||
// Hunted Phantasm can't be blocked.
|
||||
this.addAbility(new CantBeBlockedSourceAbility());
|
||||
// When Hunted Phantasm enters the battlefield, put five 1/1 red Goblin creature tokens onto the battlefield under target opponent's control.
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new CreateTokenTargetEffect(new GoblinToken(), 5), false);
|
||||
Target target = new TargetOpponent();
|
||||
|
|
|
@ -37,7 +37,7 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.combat.UnblockableTargetEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
|
||||
import mage.abilities.mana.SimpleManaAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
@ -54,8 +54,8 @@ public class RoguesPassage extends CardImpl {
|
|||
// {T}: Add {1} to your mana pool.
|
||||
this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, new Mana(0, 0, 0, 0, 0, 1, 0), new TapSourceCost()));
|
||||
|
||||
// {4}, {T}: Target creature is unblockable this turn.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new UnblockableTargetEffect(), new ManaCostsImpl("{4}"));
|
||||
// {4}, {T}: Target creature can't be blocked this turn.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CantBeBlockedTargetEffect(), new ManaCostsImpl("{4}"));
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
|
|
|
@ -51,7 +51,7 @@ public class SewerShambler extends CardImpl {
|
|||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// Swampwalk (This creature is unblockable as long as defending player controls a Swamp.)
|
||||
// Swampwalk (This creature can't be blocked as long as defending player controls a Swamp.)
|
||||
this.addAbility(new SwampwalkAbility());
|
||||
// Scavenge {2}{B} ({2}{B}, Exile this card from your graveyard: Put a number of +1/+1 counters equal to this card's power on target creature. Scavenge only as a sorcery.)
|
||||
this.addAbility(new ScavengeAbility(new ManaCostsImpl("{2}{B}")));
|
||||
|
|
|
@ -35,7 +35,7 @@ import mage.MageInt;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.common.DetainTargetEffect;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.TargetController;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
|
@ -63,8 +63,8 @@ public class SoulswornSpirit extends CardImpl {
|
|||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// Soulsworn Spirit is unblockable.
|
||||
this.addAbility(new UnblockableAbility());
|
||||
// Soulsworn Spirit can't be blocked.
|
||||
this.addAbility(new CantBeBlockedSourceAbility());
|
||||
|
||||
// When Soulsworn Spirit enters the battlefield, detain target creature an opponent controls.
|
||||
//(Until your next turn, that creature can't attack or block and its activated abilities can't be activated.)
|
||||
|
|
|
@ -37,7 +37,7 @@ import mage.constants.TargetController;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.combat.UnblockableTargetEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostAllEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
import mage.abilities.keyword.OverloadAbility;
|
||||
|
@ -70,10 +70,10 @@ public class Teleportal extends CardImpl {
|
|||
this.color.setBlue(true);
|
||||
this.color.setRed(true);
|
||||
|
||||
// Target creature you control gets +1/+0 until end of turn and is unblockable this turn.
|
||||
// Target creature you control gets +1/+0 until end of turn and can't be blocked this turn.
|
||||
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
|
||||
this.getSpellAbility().addEffect(new BoostTargetEffect(1,0, Duration.EndOfTurn));
|
||||
this.getSpellAbility().addEffect(new UnblockableTargetEffect());
|
||||
this.getSpellAbility().addEffect(new CantBeBlockedTargetEffect());
|
||||
|
||||
// Overload {3}{U}{R} (You may cast this spell for its overload cost. If you do, change its text by replacing all instances of "target" with "each.")
|
||||
OverloadAbility ability = new OverloadAbility(this, new BoostAllEffect(1,0, Duration.EndOfTurn, filter,false), new ManaCostsImpl("{3}{U}{R}"), TimingRule.SORCERY);
|
||||
|
@ -97,7 +97,7 @@ class TeleportalEffect extends OneShotEffect {
|
|||
|
||||
public TeleportalEffect(FilterCreaturePermanent filter) {
|
||||
super(Outcome.ReturnToHand);
|
||||
staticText = "each creature you control is unblockable this turn";
|
||||
staticText = "each creature you control can't be blocked this turn";
|
||||
this.filter = filter;
|
||||
}
|
||||
|
||||
|
@ -109,7 +109,7 @@ class TeleportalEffect extends OneShotEffect {
|
|||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
for (Permanent creature : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game)) {
|
||||
UnblockableTargetEffect effect = new UnblockableTargetEffect();
|
||||
CantBeBlockedTargetEffect effect = new CantBeBlockedTargetEffect();
|
||||
effect.setTargetPointer(new FixedTarget(creature.getId()));
|
||||
game.addEffect(effect, source);
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ import mage.abilities.effects.Effect;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Rarity;
|
||||
import mage.abilities.effects.common.combat.UnblockableTargetEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
import mage.abilities.keyword.ReboundAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
@ -50,11 +50,11 @@ public class DistortionStrike extends CardImpl {
|
|||
|
||||
this.color.setBlue(true);
|
||||
|
||||
// Target creature gets +1/+0 until end of turn and is unblockable this turn.
|
||||
// Target creature gets +1/+0 until end of turn and can't be blocked this turn.
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||
this.getSpellAbility().addEffect(new BoostTargetEffect(1, 0, Duration.EndOfTurn));
|
||||
Effect effect = new UnblockableTargetEffect();
|
||||
effect.setText("and is unblockable this turn");
|
||||
Effect effect = new CantBeBlockedTargetEffect();
|
||||
effect.setText("and can't be blocked this turn");
|
||||
this.getSpellAbility().addEffect(effect);
|
||||
// Rebound
|
||||
this.addAbility(new ReboundAbility());
|
||||
|
|
|
@ -36,7 +36,7 @@ import mage.MageInt;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.effects.common.combat.UnblockableTargetEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.filter.Filter.ComparisonType;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
|
@ -64,8 +64,8 @@ public class GoblinTunneler extends CardImpl {
|
|||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// {tap}: Target creature with power 2 or less is unblockable this turn.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new UnblockableTargetEffect(), new TapSourceCost());
|
||||
// {tap}: Target creature with power 2 or less can't be blocked this turn.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CantBeBlockedTargetEffect(), new TapSourceCost());
|
||||
ability.addTarget(new TargetCreaturePermanent(filter));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
@ -36,7 +36,7 @@ import mage.abilities.costs.mana.ManaCostsImpl;
|
|||
import mage.abilities.keyword.LevelUpAbility;
|
||||
import mage.abilities.keyword.LevelerCardBuilder;
|
||||
import mage.abilities.keyword.ShroudAbility;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.cards.LevelerCard;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Rarity;
|
||||
|
@ -64,7 +64,7 @@ public class HadaSpyPatrol extends LevelerCard {
|
|||
// 2/2
|
||||
// Hada Spy Patrol can't be blocked.
|
||||
Abilities<Ability> abilities1 = new AbilitiesImpl<>();
|
||||
abilities1.add(new UnblockableAbility());
|
||||
abilities1.add(new CantBeBlockedSourceAbility());
|
||||
|
||||
// LEVEL 3+
|
||||
// 3/3
|
||||
|
@ -72,7 +72,7 @@ public class HadaSpyPatrol extends LevelerCard {
|
|||
// Hada Spy Patrol can't be blocked.
|
||||
Abilities<Ability> abilities2 = new AbilitiesImpl<>();
|
||||
abilities2.add(ShroudAbility.getInstance());
|
||||
abilities2.add(new UnblockableAbility());
|
||||
abilities2.add(new CantBeBlockedSourceAbility());
|
||||
|
||||
LevelerCardBuilder.construct(this,
|
||||
new LevelerCardBuilder.LevelAbility(1, 2, abilities1, 2, 2),
|
||||
|
|
|
@ -34,8 +34,8 @@ import mage.constants.Rarity;
|
|||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.common.combat.UnblockableTargetEffect;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
|
@ -54,10 +54,10 @@ public class NeurokInvisimancer extends CardImpl {
|
|||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// Neurok Invisimancer is unblockable.
|
||||
this.addAbility(new UnblockableAbility());
|
||||
// When Neurok Invisimancer enters the battlefield, target creature is unblockable this turn.
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new UnblockableTargetEffect());
|
||||
// Neurok Invisimancer can't be blocked.
|
||||
this.addAbility(new CantBeBlockedSourceAbility());
|
||||
// When Neurok Invisimancer enters the battlefield, target creature can't be blocked this turn.
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new CantBeBlockedTargetEffect());
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
@ -38,7 +38,7 @@ import mage.abilities.common.SimpleStaticAbility;
|
|||
import mage.abilities.condition.common.DefendingPlayerControlsCondition;
|
||||
import mage.abilities.decorator.ConditionalRestrictionEffect;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.combat.UnblockableSourceEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.filter.common.FilterArtifactPermanent;
|
||||
|
||||
|
@ -56,11 +56,11 @@ public class ScrapdiverSerpent extends CardImpl {
|
|||
this.power = new MageInt(5);
|
||||
this.toughness = new MageInt(5);
|
||||
|
||||
// Scrapdiver Serpent is unblockable as long as defending player controls an artifact
|
||||
// Scrapdiver Serpent can't be blocked as long as defending player controls an artifact
|
||||
Effect effect = new ConditionalRestrictionEffect(
|
||||
new UnblockableSourceEffect(),
|
||||
new CantBeBlockedSourceEffect(),
|
||||
new DefendingPlayerControlsCondition(new FilterArtifactPermanent()));
|
||||
effect.setText("{this} is unblockable as long as defending player controls an artifact");
|
||||
effect.setText("{this} can't be blocked as long as defending player controls an artifact");
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
|
||||
}
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ import mage.abilities.effects.OneShotEffect;
|
|||
import mage.abilities.effects.common.ExileTargetEffect;
|
||||
import mage.abilities.effects.common.GetEmblemEffect;
|
||||
import mage.abilities.effects.common.ReturnFromExileEffect;
|
||||
import mage.abilities.effects.common.combat.UnblockableAllEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedAllEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.Outcome;
|
||||
|
@ -91,8 +91,8 @@ public class VenserTheSojourner extends CardImpl {
|
|||
ability1.addTarget(target);
|
||||
this.addAbility(ability1);
|
||||
|
||||
// -1: Creatures are unblockable this turn.
|
||||
this.addAbility(new LoyaltyAbility(new UnblockableAllEffect(new FilterCreaturePermanent("Creatures"), Duration.EndOfTurn), -1));
|
||||
// -1: Creatures can't be blocked this turn.
|
||||
this.addAbility(new LoyaltyAbility(new CantBeBlockedAllEffect(new FilterCreaturePermanent("Creatures"), Duration.EndOfTurn), -1));
|
||||
|
||||
// -8: You get an emblem with "Whenever you cast a spell, exile target permanent."
|
||||
LoyaltyAbility ability2 = new LoyaltyAbility(new GetEmblemEffect(new VenserTheSojournerEmblem()), -8);
|
||||
|
|
|
@ -35,7 +35,7 @@ import mage.constants.Zone;
|
|||
import mage.MageInt;
|
||||
import mage.ObjectColor;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.combat.UnblockableAllEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedAllEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.filter.predicate.mageobject.ColorPredicate;
|
||||
|
@ -62,8 +62,8 @@ public class DeepchannelMentor extends CardImpl {
|
|||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// Blue creatures you control are unblockable.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new UnblockableAllEffect(filter, Duration.WhileOnBattlefield)));
|
||||
// Blue creatures you control can't be blocked.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedAllEffect(filter, Duration.WhileOnBattlefield)));
|
||||
}
|
||||
|
||||
public DeepchannelMentor(final DeepchannelMentor card) {
|
||||
|
|
|
@ -34,7 +34,7 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.combat.UnblockableSourceEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
|
@ -64,8 +64,8 @@ public class GhastlordOfFugue extends CardImpl {
|
|||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(4);
|
||||
|
||||
// Ghastlord of Fugue is unblockable.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new UnblockableSourceEffect(Duration.WhileOnBattlefield)));
|
||||
// Ghastlord of Fugue can't be blocked.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedSourceEffect(Duration.WhileOnBattlefield)));
|
||||
|
||||
// Whenever Ghastlord of Fugue deals combat damage to a player, that player reveals his or her hand. You choose a card from it. That player exiles that card.
|
||||
this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new GhastlordOfFugueEffect(), false, true));
|
||||
|
|
|
@ -32,7 +32,7 @@ import mage.constants.CardType;
|
|||
import mage.constants.Rarity;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.CantBlockAbility;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
||||
/**
|
||||
|
@ -53,7 +53,7 @@ public class InkfathomInfiltrator extends CardImpl {
|
|||
this.toughness = new MageInt(1);
|
||||
|
||||
this.addAbility(new CantBlockAbility());
|
||||
this.addAbility(new UnblockableAbility());
|
||||
this.addAbility(new CantBeBlockedSourceAbility());
|
||||
}
|
||||
|
||||
public InkfathomInfiltrator(final InkfathomInfiltrator card) {
|
||||
|
|
|
@ -36,12 +36,12 @@ import mage.abilities.decorator.ConditionalContinuousEffect;
|
|||
import mage.abilities.decorator.ConditionalRestrictionEffect;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.AttachEffect;
|
||||
import mage.abilities.effects.common.combat.UnblockableAttachedEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedAttachedEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostEnchantedEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
|
||||
import mage.abilities.keyword.EnchantAbility;
|
||||
import mage.abilities.keyword.LifelinkAbility;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.AttachmentType;
|
||||
import mage.constants.CardType;
|
||||
|
@ -75,10 +75,10 @@ public class SteelOfTheGodhead extends CardImpl {
|
|||
SimpleStaticAbility whiteAbility = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new BoostEnchantedEffect(1, 1), new EnchantedCreatureColorCondition(ObjectColor.WHITE), "As long as enchanted creature is white, it gets +1/+1"));
|
||||
whiteAbility.addEffect(new ConditionalContinuousEffect(new GainAbilityAttachedEffect(LifelinkAbility.getInstance(), AttachmentType.AURA), new EnchantedCreatureColorCondition(ObjectColor.WHITE), "and has lifelink"));
|
||||
this.addAbility(whiteAbility);
|
||||
// As long as enchanted creature is blue, it gets +1/+1 and is unblockable.
|
||||
// As long as enchanted creature is blue, it gets +1/+1 and can't be blocked.
|
||||
SimpleStaticAbility blueAbility = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new BoostEnchantedEffect(1, 1), new EnchantedCreatureColorCondition(ObjectColor.BLUE), "As long as enchanted creature is blue, it gets +1/+1"));
|
||||
Effect effect = new ConditionalRestrictionEffect(new UnblockableAttachedEffect(AttachmentType.AURA), new EnchantedCreatureColorCondition(ObjectColor.BLUE));
|
||||
effect.setText("and is unblockable");
|
||||
Effect effect = new ConditionalRestrictionEffect(new CantBeBlockedAttachedEffect(AttachmentType.AURA), new EnchantedCreatureColorCondition(ObjectColor.BLUE));
|
||||
effect.setText("and can't be blocked");
|
||||
blueAbility.addEffect(effect);
|
||||
this.addAbility(blueAbility);
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ import java.util.UUID;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.Rarity;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
||||
/**
|
||||
|
@ -50,7 +50,7 @@ public class JhessianInfiltrator extends CardImpl {
|
|||
this.color.setBlue(true);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
this.addAbility(new UnblockableAbility());
|
||||
this.addAbility(new CantBeBlockedSourceAbility());
|
||||
}
|
||||
|
||||
public JhessianInfiltrator (final JhessianInfiltrator card) {
|
||||
|
|
|
@ -36,7 +36,7 @@ import mage.MageInt;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.effects.common.combat.UnblockableTargetEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.filter.Filter;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
|
@ -64,8 +64,8 @@ public class CraftyPathmage extends CardImpl {
|
|||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// {tap}: Target creature with power 2 or less is unblockable this turn.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new UnblockableTargetEffect(), new TapSourceCost());
|
||||
// {tap}: Target creature with power 2 or less can't be blocked this turn.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CantBeBlockedTargetEffect(), new TapSourceCost());
|
||||
ability.addTarget(new TargetCreaturePermanent(filter));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
@ -60,7 +60,7 @@ public class ElvishChampion extends CardImpl {
|
|||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// Other Elf creatures get +1/+1 and have forestwalk. (They're unblockable as long as defending player controls a Forest.)
|
||||
// Other Elf creatures get +1/+1 and have forestwalk. (They can't be blocked as long as defending player controls a Forest.)
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostAllEffect(1, 1, Duration.WhileOnBattlefield, filter, true)));
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(new ForestwalkAbility(), Duration.WhileOnBattlefield, filter, true)));
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@ import mage.constants.Rarity;
|
|||
import mage.constants.Zone;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.effects.common.combat.UnblockableAttachedEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedAttachedEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
|
||||
import mage.abilities.keyword.EquipAbility;
|
||||
import mage.abilities.keyword.ShroudAbility;
|
||||
|
@ -55,8 +55,8 @@ public class WhispersilkCloak extends CardImpl {
|
|||
this.expansionSetCode = "10E";
|
||||
this.subtype.add("Equipment");
|
||||
|
||||
// Equipped creature is unblockable and has shroud.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new UnblockableAttachedEffect(AttachmentType.EQUIPMENT)));
|
||||
// Equipped creature can't be blocked and has shroud.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedAttachedEffect(AttachmentType.EQUIPMENT)));
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(ShroudAbility.getInstance(), AttachmentType.EQUIPMENT)));
|
||||
// Equip {2}
|
||||
this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(2)));
|
||||
|
|
|
@ -31,7 +31,7 @@ import java.util.UUID;
|
|||
import mage.MageInt;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.combat.UnblockableSourceEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
|
@ -55,7 +55,7 @@ public class AgentOfHorizons extends CardImpl {
|
|||
this.toughness = new MageInt(2);
|
||||
|
||||
// {2}{U}: Agent of Horizons can't be blocked this turn.
|
||||
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new UnblockableSourceEffect(Duration.EndOfTurn), new ManaCostsImpl("{2}{U}")));
|
||||
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CantBeBlockedSourceEffect(Duration.EndOfTurn), new ManaCostsImpl("{2}{U}")));
|
||||
}
|
||||
|
||||
public AgentOfHorizons(final AgentOfHorizons card) {
|
||||
|
|
|
@ -33,7 +33,7 @@ import mage.abilities.common.AttacksAttachedTriggeredAbility;
|
|||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.AttachEffect;
|
||||
import mage.abilities.effects.keyword.ScryEffect;
|
||||
import mage.abilities.effects.common.combat.UnblockableAttachedEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedAttachedEffect;
|
||||
import mage.abilities.keyword.EnchantAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.AttachmentType;
|
||||
|
@ -64,7 +64,7 @@ public class AqueousForm extends CardImpl {
|
|||
Ability ability = new EnchantAbility(auraTarget.getTargetName());
|
||||
this.addAbility(ability);
|
||||
// Enchanted creature can't be blocked.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new UnblockableAttachedEffect(AttachmentType.AURA)));
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedAttachedEffect(AttachmentType.AURA)));
|
||||
|
||||
// Whenever enchanted creature attacks, scry 1.
|
||||
this.addAbility(new AttacksAttachedTriggeredAbility(new ScryEffect(1), AttachmentType.AURA,false));
|
||||
|
|
|
@ -37,8 +37,8 @@ import mage.abilities.common.SimpleStaticAbility;
|
|||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.dynamicvalue.common.DevotionCount;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.keyword.ScryEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
|
||||
import mage.abilities.effects.keyword.ScryEffect;
|
||||
import mage.abilities.effects.common.continuous.LoseCreatureTypeSourceEffect;
|
||||
import mage.abilities.keyword.IndestructibleAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
@ -63,7 +63,6 @@ public class ThassaGodOfTheSea extends CardImpl {
|
|||
this.supertype.add("Legendary");
|
||||
this.subtype.add("God");
|
||||
|
||||
this.color.setBlue(true);
|
||||
this.power = new MageInt(5);
|
||||
this.toughness = new MageInt(5);
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ import mage.abilities.costs.mana.ManaCostsImpl;
|
|||
import mage.abilities.decorator.ConditionalTriggeredAbility;
|
||||
import mage.abilities.effects.common.counter.RemoveCounterSourceEffect;
|
||||
import mage.abilities.keyword.SuspendAbility;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Rarity;
|
||||
|
@ -64,8 +64,8 @@ public class DeepSeaKraken extends CardImpl {
|
|||
this.power = new MageInt(6);
|
||||
this.toughness = new MageInt(6);
|
||||
|
||||
// Deep-Sea Kraken is unblockable.
|
||||
this.addAbility(new UnblockableAbility());
|
||||
// Deep-Sea Kraken can't be blocked.
|
||||
this.addAbility(new CantBeBlockedSourceAbility());
|
||||
// Suspend 9-{2}{U}
|
||||
this.addAbility(new SuspendAbility(9, new ManaCostsImpl("{2}{U}"), this));
|
||||
// Whenever an opponent casts a spell, if Deep-Sea Kraken is suspended, remove a time counter from it.
|
||||
|
|
|
@ -36,7 +36,7 @@ import mage.abilities.common.SimpleStaticAbility;
|
|||
import mage.abilities.condition.common.DefendingPlayerControlsCondition;
|
||||
import mage.abilities.decorator.ConditionalRestrictionEffect;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.combat.UnblockableSourceEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.predicate.mageobject.CardTypePredicate;
|
||||
|
@ -60,11 +60,11 @@ public class BubblingBeebles extends CardImpl {
|
|||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// Bubbling Beebles is unblockable as long as defending player controls an enchantment.
|
||||
// Bubbling Beebles can't be blocked as long as defending player controls an enchantment.
|
||||
Effect effect = new ConditionalRestrictionEffect(
|
||||
new UnblockableSourceEffect(),
|
||||
new CantBeBlockedSourceEffect(),
|
||||
new DefendingPlayerControlsCondition(filter));
|
||||
effect.setText("{this} is unblockable as long as defending player controls an enchantment");
|
||||
effect.setText("{this} can't be blocked as long as defending player controls an enchantment");
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
|
||||
}
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ import mage.abilities.common.SimpleStaticAbility;
|
|||
import mage.abilities.condition.common.DefendingPlayerControlsCondition;
|
||||
import mage.abilities.decorator.ConditionalRestrictionEffect;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.combat.UnblockableSourceEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.filter.common.FilterArtifactPermanent;
|
||||
|
||||
|
@ -55,11 +55,11 @@ public class BouncingBeebles extends CardImpl {
|
|||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
//Bouncing Beebles is unblockable as long as defending player controls an artifact.
|
||||
//Bouncing Beebles can't be blocked as long as defending player controls an artifact.
|
||||
Effect effect = new ConditionalRestrictionEffect(
|
||||
new UnblockableSourceEffect(),
|
||||
new CantBeBlockedSourceEffect(),
|
||||
new DefendingPlayerControlsCondition(new FilterArtifactPermanent()));
|
||||
effect.setText("{this} is unblockable as long as defending player controls an artifact");
|
||||
effect.setText("{this} can't be blocked as long as defending player controls an artifact");
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
|
||||
}
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ import mage.constants.Rarity;
|
|||
import mage.constants.Zone;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.AttachEffect;
|
||||
import mage.abilities.effects.common.combat.UnblockableAttachedEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedAttachedEffect;
|
||||
import mage.abilities.keyword.EnchantAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.target.TargetPermanent;
|
||||
|
@ -59,8 +59,8 @@ public class CloakOfMists extends CardImpl {
|
|||
this.getSpellAbility().addTarget(auraTarget);
|
||||
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
|
||||
this.addAbility(new EnchantAbility(auraTarget.getTargetName()));
|
||||
// Enchanted creature is unblockable.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new UnblockableAttachedEffect(AttachmentType.AURA)));
|
||||
// Enchanted creature can't be blocked.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedAttachedEffect(AttachmentType.AURA)));
|
||||
}
|
||||
|
||||
public CloakOfMists(final CloakOfMists card) {
|
||||
|
|
|
@ -38,7 +38,7 @@ import mage.abilities.common.EntersBattlefieldTappedAbility;
|
|||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.abilities.mana.BlackManaAbility;
|
||||
import mage.abilities.mana.BlueManaAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
@ -61,7 +61,7 @@ public class CreepingTarPit extends CardImpl {
|
|||
this.addAbility(new BlueManaAbility());
|
||||
this.addAbility(new BlackManaAbility());
|
||||
|
||||
// {1}{U}{B}: Until end of turn, Creeping Tar Pit becomes a 3/2 blue and black Elemental creature and is unblockable. It's still a land.
|
||||
// {1}{U}{B}: Until end of turn, Creeping Tar Pit becomes a 3/2 blue and black Elemental creature and can't be blocked. It's still a land.
|
||||
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesCreatureSourceEffect(new CreepingTarPitToken(), "land", Duration.EndOfTurn), new ManaCostsImpl("{1}{U}{B}")));
|
||||
}
|
||||
|
||||
|
@ -78,13 +78,13 @@ public class CreepingTarPit extends CardImpl {
|
|||
|
||||
class CreepingTarPitToken extends Token {
|
||||
public CreepingTarPitToken() {
|
||||
super("", "3/2 blue and black Elemental creature and is unblockable");
|
||||
super("", "3/2 blue and black Elemental creature and can't be blocked");
|
||||
cardType.add(CardType.CREATURE);
|
||||
subtype.add("Elemental");
|
||||
color.setBlue(true);
|
||||
color.setBlack(true);
|
||||
power = new MageInt(3);
|
||||
toughness = new MageInt(2);
|
||||
this.addAbility(new UnblockableAbility());
|
||||
this.addAbility(new CantBeBlockedSourceAbility());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,7 +38,7 @@ import mage.abilities.condition.common.KickedCondition;
|
|||
import mage.abilities.decorator.ConditionalOneShotEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.abilities.keyword.KickerAbility;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.counters.CounterType;
|
||||
|
||||
|
@ -58,8 +58,8 @@ public class AetherFigment extends CardImpl {
|
|||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// AEther Figment is unblockable.
|
||||
this.addAbility(new UnblockableAbility());
|
||||
// AEther Figment can't be blocked.
|
||||
this.addAbility(new CantBeBlockedSourceAbility());
|
||||
|
||||
// Kicker {3}
|
||||
this.addAbility(new KickerAbility("{3}"));
|
||||
|
|
|
@ -16,7 +16,7 @@ public class AEtherFigmentTest extends CardTestPlayerBase {
|
|||
Creature - Illusion
|
||||
1/1
|
||||
Kicker {3} (You may pay an additional as you cast this spell.)
|
||||
AEther Figment is unblockable.
|
||||
AEther Figment can't be blocked.
|
||||
If AEther Figment was kicked, it enters the battlefield with two +1/+1 counters on it.
|
||||
*/
|
||||
@Test
|
||||
|
|
|
@ -315,7 +315,7 @@ public class PhantasmalImageTest extends CardTestPlayerBase {
|
|||
// Whenever Frost Titan enters the battlefield or attacks, tap target permanent. It doesn't untap during its controller's next untap step.
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Frost Titan");
|
||||
addCard(Zone.HAND, playerA, "Terror");
|
||||
// {1}{U} - Target creature gains shroud until end of turn and is unblockable this turn.
|
||||
// {1}{U} - Target creature gains shroud until end of turn and can't be blocked this turn.
|
||||
addCard(Zone.HAND, playerA, "Veil of Secrecy");
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 3);
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Island", 2);
|
||||
|
|
|
@ -41,7 +41,7 @@ import org.mage.test.serverside.base.CardTestPlayerBase;
|
|||
/*
|
||||
* Elvish Champion
|
||||
* Creature — Elf 2/2, 1GG
|
||||
* Other Elf creatures get +1/+1 and have forestwalk. (They're unblockable as long as defending player controls a Forest.)
|
||||
* Other Elf creatures get +1/+1 and have forestwalk. (They can't be blocked as long as defending player controls a Forest.)
|
||||
*/
|
||||
|
||||
public class ElvishChampionForestwalkTest extends CardTestPlayerBase {
|
||||
|
|
|
@ -224,10 +224,10 @@ public class AttackBlockRestrictionsTest extends CardTestPlayerBase {
|
|||
}
|
||||
|
||||
/**
|
||||
* Tests Unblockable
|
||||
* Tests can't be blocked
|
||||
*/
|
||||
@Test
|
||||
public void testUnblockable() {
|
||||
public void testCantBeBlocked() {
|
||||
addCard(Zone.BATTLEFIELD, playerB, "Blighted Agent");
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Blighted Agent");
|
||||
|
@ -246,7 +246,7 @@ public class AttackBlockRestrictionsTest extends CardTestPlayerBase {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testUnblockableTormentedSoul() {
|
||||
public void testCantBeBlockedTormentedSoul() {
|
||||
addCard(Zone.BATTLEFIELD, playerB, "Tormented Soul");
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Memnite");
|
||||
|
|
|
@ -38,28 +38,28 @@ import mage.game.permanent.Permanent;
|
|||
*
|
||||
* @author North
|
||||
*/
|
||||
public class UnblockableAllEffect extends RestrictionEffect {
|
||||
public class CantBeBlockedAllEffect extends RestrictionEffect {
|
||||
|
||||
private FilterPermanent filter;
|
||||
private final FilterPermanent filter;
|
||||
|
||||
public UnblockableAllEffect(FilterPermanent filter, Duration duration) {
|
||||
public CantBeBlockedAllEffect(FilterPermanent filter, Duration duration) {
|
||||
super(duration);
|
||||
this.filter = filter;
|
||||
|
||||
this.staticText = filter.getMessage() + " are unblockable";
|
||||
this.staticText = filter.getMessage() + " can't be blocked";
|
||||
if (duration.equals(Duration.EndOfTurn)) {
|
||||
this.staticText += " this turn";
|
||||
}
|
||||
}
|
||||
|
||||
public UnblockableAllEffect(UnblockableAllEffect effect) {
|
||||
public CantBeBlockedAllEffect(CantBeBlockedAllEffect effect) {
|
||||
super(effect);
|
||||
this.filter = effect.filter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UnblockableAllEffect copy() {
|
||||
return new UnblockableAllEffect(this);
|
||||
public CantBeBlockedAllEffect copy() {
|
||||
return new CantBeBlockedAllEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
|
@ -27,10 +27,10 @@
|
|||
*/
|
||||
package mage.abilities.effects.common.combat;
|
||||
|
||||
import mage.constants.AttachmentType;
|
||||
import mage.constants.Duration;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.RestrictionEffect;
|
||||
import mage.constants.AttachmentType;
|
||||
import mage.constants.Duration;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
||||
|
@ -38,24 +38,24 @@ import mage.game.permanent.Permanent;
|
|||
*
|
||||
* @author North
|
||||
*/
|
||||
public class UnblockableAttachedEffect extends RestrictionEffect {
|
||||
public class CantBeBlockedAttachedEffect extends RestrictionEffect {
|
||||
|
||||
public UnblockableAttachedEffect(AttachmentType attachmentType) {
|
||||
public CantBeBlockedAttachedEffect(AttachmentType attachmentType) {
|
||||
super(Duration.WhileOnBattlefield);
|
||||
if (attachmentType.equals(AttachmentType.AURA)) {
|
||||
this.staticText = "Enchanted creature is unblockable";
|
||||
this.staticText = "Enchanted creature can't be blocked";
|
||||
} else {
|
||||
this.staticText = "Equiped creature is unblockable";
|
||||
this.staticText = "Equiped creature can't be blocked";
|
||||
}
|
||||
}
|
||||
|
||||
public UnblockableAttachedEffect(UnblockableAttachedEffect effect) {
|
||||
public CantBeBlockedAttachedEffect(CantBeBlockedAttachedEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public UnblockableAttachedEffect copy() {
|
||||
return new UnblockableAttachedEffect(this);
|
||||
public CantBeBlockedAttachedEffect copy() {
|
||||
return new CantBeBlockedAttachedEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
|
@ -27,9 +27,9 @@
|
|||
*/
|
||||
package mage.abilities.effects.common.combat;
|
||||
|
||||
import mage.constants.Duration;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.RestrictionEffect;
|
||||
import mage.constants.Duration;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
||||
|
@ -37,26 +37,26 @@ import mage.game.permanent.Permanent;
|
|||
*
|
||||
* @author North
|
||||
*/
|
||||
public class UnblockableSourceEffect extends RestrictionEffect {
|
||||
public class CantBeBlockedSourceEffect extends RestrictionEffect {
|
||||
|
||||
public UnblockableSourceEffect() {
|
||||
public CantBeBlockedSourceEffect() {
|
||||
this(Duration.WhileOnBattlefield);
|
||||
}
|
||||
public UnblockableSourceEffect(Duration duration) {
|
||||
public CantBeBlockedSourceEffect(Duration duration) {
|
||||
super(duration);
|
||||
this.staticText = "{this} is unblockable";
|
||||
this.staticText = "{this} can't be blocked";
|
||||
if (Duration.EndOfTurn.equals(this.duration)) {
|
||||
this.staticText += " this turn";
|
||||
}
|
||||
}
|
||||
|
||||
public UnblockableSourceEffect(UnblockableSourceEffect effect) {
|
||||
public CantBeBlockedSourceEffect(CantBeBlockedSourceEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public UnblockableSourceEffect copy() {
|
||||
return new UnblockableSourceEffect(this);
|
||||
public CantBeBlockedSourceEffect copy() {
|
||||
return new CantBeBlockedSourceEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
|
@ -35,56 +35,68 @@ import mage.constants.Outcome;
|
|||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.Target;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
* @author North
|
||||
*/
|
||||
|
||||
public class CantBeBlockedTargetEffect extends RestrictionEffect {
|
||||
|
||||
public CantBeBlockedTargetEffect() {
|
||||
this(Duration.EndOfTurn);
|
||||
}
|
||||
|
||||
public CantBeBlockedTargetEffect(Duration duration) {
|
||||
super(duration, Outcome.Benefit);
|
||||
}
|
||||
|
||||
public CantBeBlockedTargetEffect(final CantBeBlockedTargetEffect effect) {
|
||||
public CantBeBlockedTargetEffect(CantBeBlockedTargetEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applies(Permanent permanent, Ability source, Game game) {
|
||||
return this.getTargetPointer().getTargets(game, source).contains(permanent.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBeBlocked(Permanent attacker, Permanent blocker, Ability source, Game game) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CantBeBlockedTargetEffect copy() {
|
||||
return new CantBeBlockedTargetEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBeBlocked(Permanent attacker, Permanent blocker, Ability source, Game game) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applies(Permanent permanent, Ability source, Game game) {
|
||||
return getTargetPointer().getTargets(game, source).contains(permanent.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getText(Mode mode) {
|
||||
if (staticText != null && !staticText.isEmpty()) {
|
||||
return staticText;
|
||||
}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
Target target = mode.getTargets().get(0);
|
||||
if(target.getNumberOfTargets() > 1){
|
||||
if (target.getNumberOfTargets() < target.getMaxNumberOfTargets()) {
|
||||
sb.append("Up to");
|
||||
}
|
||||
sb.append(target.getMaxNumberOfTargets()).append(" target ").append(target.getTargetName()).append(" gain ");
|
||||
} else {
|
||||
sb.append("Target ").append(target.getTargetName()).append(" can't be blocked");
|
||||
}
|
||||
if (duration.equals(Duration.EndOfTurn)) {
|
||||
sb.append(" this turn");
|
||||
if (mode.getTargets().isEmpty()) {
|
||||
return "";
|
||||
}
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
Target target = mode.getTargets().get(0);
|
||||
if (target.getMaxNumberOfTargets() > 1) {
|
||||
if (target.getMaxNumberOfTargets() != target.getNumberOfTargets()) {
|
||||
sb.append("up to ");
|
||||
}
|
||||
sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets())).append(" ");
|
||||
}
|
||||
sb.append("target ").append(mode.getTargets().get(0).getTargetName());
|
||||
if (target.getMaxNumberOfTargets() > 1) {
|
||||
sb.append("s can't be blocked");
|
||||
} else {
|
||||
sb.append(" can't be blocked");
|
||||
}
|
||||
|
||||
if (Duration.EndOfTurn.equals(this.duration)) {
|
||||
sb.append(" this turn");
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,98 +0,0 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* 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.abilities.effects.common.combat;
|
||||
|
||||
import mage.constants.Duration;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.Mode;
|
||||
import mage.abilities.effects.RestrictionEffect;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.Target;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author North
|
||||
*/
|
||||
public class UnblockableTargetEffect extends RestrictionEffect {
|
||||
|
||||
public UnblockableTargetEffect() {
|
||||
super(Duration.EndOfTurn);
|
||||
}
|
||||
|
||||
public UnblockableTargetEffect(UnblockableTargetEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public UnblockableTargetEffect copy() {
|
||||
return new UnblockableTargetEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBeBlocked(Permanent attacker, Permanent blocker, Ability source, Game game) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applies(Permanent permanent, Ability source, Game game) {
|
||||
return this.targetPointer.getTargets(game, source).contains(permanent.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getText(Mode mode) {
|
||||
if (staticText != null && !staticText.isEmpty()) {
|
||||
return staticText;
|
||||
}
|
||||
if (mode.getTargets().isEmpty()) {
|
||||
return "";
|
||||
}
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
Target target = mode.getTargets().get(0);
|
||||
if (target.getMaxNumberOfTargets() > 1) {
|
||||
if (target.getMaxNumberOfTargets() != target.getNumberOfTargets()) {
|
||||
sb.append("up to ");
|
||||
}
|
||||
sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets())).append(" ");
|
||||
}
|
||||
sb.append("target ").append(mode.getTargets().get(0).getTargetName());
|
||||
if (target.getMaxNumberOfTargets() > 1) {
|
||||
sb.append("s are unblockable");
|
||||
} else {
|
||||
sb.append(" is unblockable");
|
||||
}
|
||||
|
||||
if (Duration.EndOfTurn.equals(this.duration)) {
|
||||
sb.append(" this turn");
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
|
@ -29,31 +29,31 @@ package mage.abilities.keyword;
|
|||
|
||||
import mage.abilities.EvasionAbility;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.combat.UnblockableSourceEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect;
|
||||
|
||||
/**
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class UnblockableAbility extends EvasionAbility {
|
||||
public class CantBeBlockedSourceAbility extends EvasionAbility {
|
||||
|
||||
public UnblockableAbility() {
|
||||
public CantBeBlockedSourceAbility() {
|
||||
this("");
|
||||
}
|
||||
|
||||
public UnblockableAbility(String ruleText) {
|
||||
Effect effect = new UnblockableSourceEffect();
|
||||
public CantBeBlockedSourceAbility(String ruleText) {
|
||||
Effect effect = new CantBeBlockedSourceEffect();
|
||||
if (ruleText != null && !ruleText.isEmpty()) {
|
||||
effect.setText(ruleText);
|
||||
}
|
||||
this.addEffect(effect);
|
||||
}
|
||||
|
||||
private UnblockableAbility(UnblockableAbility ability) {
|
||||
private CantBeBlockedSourceAbility(CantBeBlockedSourceAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public UnblockableAbility copy() {
|
||||
return new UnblockableAbility(this);
|
||||
public CantBeBlockedSourceAbility copy() {
|
||||
return new CantBeBlockedSourceAbility(this);
|
||||
}
|
||||
}
|
|
@ -10,7 +10,7 @@ import mage.abilities.effects.ContinuousEffectsList;
|
|||
import mage.abilities.effects.RestrictionEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.abilities.keyword.ReachAbility;
|
||||
import mage.abilities.keyword.UnblockableAbility;
|
||||
import mage.abilities.keyword.CantBeBlockedSourceAbility;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.combat.Combat;
|
||||
|
@ -65,11 +65,11 @@ public class TraceUtil {
|
|||
}
|
||||
}
|
||||
}
|
||||
if (hasUnblockable(attacker)) {
|
||||
if (cantBeBlocked(attacker)) {
|
||||
if (group.getBlockers().size() > 0) {
|
||||
Permanent blocker = game.getPermanent(group.getBlockers().get(0));
|
||||
if (blocker != null) {
|
||||
log.warn("Found unblockable creature blocked by some other creature");
|
||||
log.warn("Found creature that can't be blocked by some other creature");
|
||||
traceCombat(game, attacker, blocker);
|
||||
}
|
||||
}
|
||||
|
@ -110,9 +110,9 @@ public class TraceUtil {
|
|||
return false;
|
||||
}
|
||||
|
||||
private static boolean hasUnblockable(Permanent permanent) {
|
||||
private static boolean cantBeBlocked(Permanent permanent) {
|
||||
for (Ability ability : permanent.getAbilities()) {
|
||||
if (ability instanceof UnblockableAbility) {
|
||||
if (ability instanceof CantBeBlockedSourceAbility) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue