* Changed all occurances of unblockable to can't be blocked.

This commit is contained in:
LevelX2 2015-03-08 21:54:36 +01:00
parent 3c0a3c41b0
commit 6b8493d9f8
93 changed files with 315 additions and 408 deletions

View file

@ -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

View file

@ -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}")));

View file

@ -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));
}

View file

@ -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) {

View file

@ -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);

View file

@ -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());

View file

@ -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);
}
}

View file

@ -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.

View file

@ -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;

View file

@ -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);
}

View file

@ -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);

View file

@ -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.

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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);

View file

@ -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));

View file

@ -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))));
}

View file

@ -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));
}

View file

@ -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

View file

@ -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));

View file

@ -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);
}

View file

@ -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));

View file

@ -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);

View file

@ -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) {

View file

@ -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());
}
}
}

View file

@ -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());
}

View file

@ -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);
}

View file

@ -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.";
}
}

View file

@ -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())));
}

View file

@ -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));
}

View file

@ -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

View file

@ -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) {

View file

@ -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) {

View file

@ -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);

View file

@ -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}")));
}

View file

@ -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)));
}

View file

@ -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);
}

View file

@ -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) {

View file

@ -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()));

View file

@ -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) {

View file

@ -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}")));
}

View file

@ -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) {

View file

@ -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);

View file

@ -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());

View file

@ -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));
}

View file

@ -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) {

View file

@ -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)));
}

View file

@ -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) {

View file

@ -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()));

View file

@ -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());

View file

@ -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);

View file

@ -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));
}

View file

@ -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}"));
}

View file

@ -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());

View file

@ -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();

View file

@ -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);

View file

@ -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}")));

View file

@ -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.)

View file

@ -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);
}

View file

@ -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());

View file

@ -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);
}

View file

@ -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),

View file

@ -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);
}

View file

@ -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));
}

View file

@ -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);

View file

@ -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) {

View file

@ -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));

View file

@ -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) {

View file

@ -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);
}

View file

@ -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) {

View file

@ -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);
}

View file

@ -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)));
}

View file

@ -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)));

View file

@ -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) {

View file

@ -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));

View file

@ -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);

View file

@ -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.

View file

@ -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));
}

View file

@ -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));
}

View file

@ -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) {

View file

@ -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());
}
}

View file

@ -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}"));

View file

@ -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

View file

@ -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);

View file

@ -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 {

View file

@ -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");

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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();
}
}

View file

@ -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();
}
}

View file

@ -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);
}
}

View file

@ -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;
}
}