diff --git a/Mage.Sets/src/mage/cards/a/AvenRiftwatcher.java b/Mage.Sets/src/mage/cards/a/AvenRiftwatcher.java
index 2b767ca4461..ff99f4c4958 100644
--- a/Mage.Sets/src/mage/cards/a/AvenRiftwatcher.java
+++ b/Mage.Sets/src/mage/cards/a/AvenRiftwatcher.java
@@ -1,24 +1,30 @@
+
package mage.cards.a;
+import java.util.UUID;
import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.EntersBattlefieldOrLeavesSourceTriggeredAbility;
import mage.abilities.effects.common.GainLifeEffect;
+import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.FlyingAbility;
-import mage.abilities.keyword.VanishingAbility;
+import mage.abilities.keyword.VanishingSacrificeAbility;
+import mage.abilities.keyword.VanishingUpkeepAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
-
-import java.util.UUID;
+import mage.counters.CounterType;
/**
+ *
* @author dustinconrad
*/
public final class AvenRiftwatcher extends CardImpl {
public AvenRiftwatcher(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
+ super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}");
this.subtype.add(SubType.BIRD);
this.subtype.add(SubType.REBEL);
this.subtype.add(SubType.SOLDIER);
@@ -28,9 +34,12 @@ public final class AvenRiftwatcher extends CardImpl {
// Flying
this.addAbility(FlyingAbility.getInstance());
-
// Vanishing 3
- this.addAbility(new VanishingAbility(3));
+ Ability ability = new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance(3)));
+ ability.setRuleVisible(false);
+ this.addAbility(ability);
+ this.addAbility(new VanishingUpkeepAbility(3));
+ this.addAbility(new VanishingSacrificeAbility());
// When Aven Riftwatcher enters the battlefield or leaves the battlefield, you gain 2 life.
this.addAbility(new EntersBattlefieldOrLeavesSourceTriggeredAbility(new GainLifeEffect(2), false));
diff --git a/Mage.Sets/src/mage/cards/c/Calciderm.java b/Mage.Sets/src/mage/cards/c/Calciderm.java
index 5d76f2deaa7..3c685af2308 100644
--- a/Mage.Sets/src/mage/cards/c/Calciderm.java
+++ b/Mage.Sets/src/mage/cards/c/Calciderm.java
@@ -1,22 +1,28 @@
+
package mage.cards.c;
+import java.util.UUID;
import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.EntersBattlefieldAbility;
+import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.ShroudAbility;
-import mage.abilities.keyword.VanishingAbility;
+import mage.abilities.keyword.VanishingSacrificeAbility;
+import mage.abilities.keyword.VanishingUpkeepAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
-
-import java.util.UUID;
+import mage.counters.CounterType;
/**
+ *
* @author Loki
*/
public final class Calciderm extends CardImpl {
public Calciderm(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}{W}");
+ super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}{W}");
this.subtype.add(SubType.BEAST);
this.power = new MageInt(5);
@@ -24,9 +30,12 @@ public final class Calciderm extends CardImpl {
// Shroud
this.addAbility(ShroudAbility.getInstance());
-
// Vanishing 4
- this.addAbility(new VanishingAbility(4));
+ Ability ability = new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance(4)));
+ ability.setRuleVisible(false);
+ this.addAbility(ability);
+ this.addAbility(new VanishingUpkeepAbility(4));
+ this.addAbility(new VanishingSacrificeAbility());
}
private Calciderm(final Calciderm card) {
diff --git a/Mage.Sets/src/mage/cards/c/Chronozoa.java b/Mage.Sets/src/mage/cards/c/Chronozoa.java
index 39edd855a93..cdc74e8481e 100644
--- a/Mage.Sets/src/mage/cards/c/Chronozoa.java
+++ b/Mage.Sets/src/mage/cards/c/Chronozoa.java
@@ -1,23 +1,29 @@
package mage.cards.c;
+import java.util.UUID;
import mage.MageInt;
+import mage.abilities.Ability;
import mage.abilities.common.DiesSourceTriggeredAbility;
+import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.condition.common.LastTimeCounterRemovedCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
-import mage.abilities.effects.CreateTokenCopySourceEffect;
import mage.abilities.effects.Effect;
+import mage.abilities.effects.CreateTokenCopySourceEffect;
+import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.FlyingAbility;
-import mage.abilities.keyword.VanishingAbility;
+import mage.abilities.keyword.VanishingSacrificeAbility;
+import mage.abilities.keyword.VanishingUpkeepAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
-
-import java.util.UUID;
+import mage.counters.CounterType;
/**
+ *
* @author Gal Lerman
+ *
*/
public final class Chronozoa extends CardImpl {
@@ -31,7 +37,11 @@ public final class Chronozoa extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// Vanishing 3 (This permanent enters the battlefield with three time counters on it. At the beginning of your upkeep, remove a time counter from it. When the last is removed, sacrifice it.)
- this.addAbility(new VanishingAbility(3));
+ Ability ability = new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance(3)));
+ ability.setRuleVisible(false);
+ this.addAbility(ability);
+ this.addAbility(new VanishingUpkeepAbility(3));
+ this.addAbility(new VanishingSacrificeAbility());
// When Chronozoa is put into a graveyard from play, if it had no time counters on it, create two tokens that are copies of it.
Effect effect = new CreateTokenCopySourceEffect(2);
diff --git a/Mage.Sets/src/mage/cards/d/DeadlyGrub.java b/Mage.Sets/src/mage/cards/d/DeadlyGrub.java
index 80e03776e96..f4b53025735 100644
--- a/Mage.Sets/src/mage/cards/d/DeadlyGrub.java
+++ b/Mage.Sets/src/mage/cards/d/DeadlyGrub.java
@@ -1,20 +1,26 @@
+
package mage.cards.d;
+import java.util.UUID;
import mage.MageInt;
+import mage.abilities.Ability;
import mage.abilities.common.DiesSourceTriggeredAbility;
+import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.condition.common.LastTimeCounterRemovedCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.VanishingAbility;
+import mage.abilities.effects.common.counter.AddCountersSourceEffect;
+import mage.abilities.keyword.VanishingSacrificeAbility;
+import mage.abilities.keyword.VanishingUpkeepAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
+import mage.counters.CounterType;
import mage.game.permanent.token.DeadlyGrubInsectToken;
-import java.util.UUID;
-
/**
+ *
* @author LoneFox
*/
public final class DeadlyGrub extends CardImpl {
@@ -26,7 +32,11 @@ public final class DeadlyGrub extends CardImpl {
this.toughness = new MageInt(1);
// Vanishing 3
- this.addAbility(new VanishingAbility(3));
+ Ability ability = new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance(3)));
+ ability.setRuleVisible(false);
+ this.addAbility(ability);
+ this.addAbility(new VanishingUpkeepAbility(3));
+ this.addAbility(new VanishingSacrificeAbility());
// When Deadly Grub dies, if it had no time counters on it, create a 6/1 green Insect creature token with shroud.
this.addAbility(new ConditionalInterveningIfTriggeredAbility(new DiesSourceTriggeredAbility(new CreateTokenEffect(new DeadlyGrubInsectToken(), 1)),
diff --git a/Mage.Sets/src/mage/cards/d/DeadwoodTreefolk.java b/Mage.Sets/src/mage/cards/d/DeadwoodTreefolk.java
index 7246a3bea09..6f643a69575 100644
--- a/Mage.Sets/src/mage/cards/d/DeadwoodTreefolk.java
+++ b/Mage.Sets/src/mage/cards/d/DeadwoodTreefolk.java
@@ -1,44 +1,51 @@
+
package mage.cards.d;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
+import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.EntersBattlefieldOrLeavesSourceTriggeredAbility;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
-import mage.abilities.keyword.VanishingAbility;
+import mage.abilities.effects.common.counter.AddCountersSourceEffect;
+import mage.abilities.keyword.VanishingSacrificeAbility;
+import mage.abilities.keyword.VanishingUpkeepAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
+import mage.counters.CounterType;
import mage.filter.common.FilterCreatureCard;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.Target;
import mage.target.common.TargetCardInYourGraveyard;
-import java.util.UUID;
-
/**
+ *
* @author LevelX2
*/
public final class DeadwoodTreefolk extends CardImpl {
private static final FilterCreatureCard filter = new FilterCreatureCard("another target creature card from your graveyard");
-
static {
filter.add(AnotherPredicate.instance);
}
public DeadwoodTreefolk(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{G}");
+ super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{G}");
this.subtype.add(SubType.TREEFOLK);
this.power = new MageInt(3);
this.toughness = new MageInt(6);
// Vanishing 3
- this.addAbility(new VanishingAbility(3));
-
+ Ability ability = new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance(3)));
+ ability.setRuleVisible(false);
+ this.addAbility(ability);
+ this.addAbility(new VanishingUpkeepAbility(3));
+ this.addAbility(new VanishingSacrificeAbility());
// When Deadwood Treefolk enters the battlefield or leaves the battlefield, return another target creature card from your graveyard to your hand.
- Ability ability = new EntersBattlefieldOrLeavesSourceTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), false);
+ ability = new EntersBattlefieldOrLeavesSourceTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), false);
Target target = new TargetCardInYourGraveyard(filter);
ability.addTarget(target);
this.addAbility(ability);
diff --git a/Mage.Sets/src/mage/cards/d/DeepForestHermit.java b/Mage.Sets/src/mage/cards/d/DeepForestHermit.java
index d1637eea695..135c23cfcd5 100644
--- a/Mage.Sets/src/mage/cards/d/DeepForestHermit.java
+++ b/Mage.Sets/src/mage/cards/d/DeepForestHermit.java
@@ -1,16 +1,21 @@
package mage.cards.d;
import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.continuous.BoostControlledEffect;
-import mage.abilities.keyword.VanishingAbility;
+import mage.abilities.effects.common.counter.AddCountersSourceEffect;
+import mage.abilities.keyword.VanishingSacrificeAbility;
+import mage.abilities.keyword.VanishingUpkeepAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
+import mage.counters.CounterType;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.permanent.token.SquirrelToken;
@@ -33,7 +38,11 @@ public final class DeepForestHermit extends CardImpl {
this.toughness = new MageInt(1);
// Vanishing 3
- this.addAbility(new VanishingAbility(3));
+ Ability ability = new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance(3)));
+ ability.setRuleVisible(false);
+ this.addAbility(ability);
+ this.addAbility(new VanishingUpkeepAbility(3));
+ this.addAbility(new VanishingSacrificeAbility());
// When Deep Forest Hermit enters the battlefield, create four 1/1 green Squirrel creature tokens.
this.addAbility(new EntersBattlefieldTriggeredAbility(
diff --git a/Mage.Sets/src/mage/cards/k/KeldonMarauders.java b/Mage.Sets/src/mage/cards/k/KeldonMarauders.java
index 085888e6561..fd445434cbf 100644
--- a/Mage.Sets/src/mage/cards/k/KeldonMarauders.java
+++ b/Mage.Sets/src/mage/cards/k/KeldonMarauders.java
@@ -1,19 +1,24 @@
+
package mage.cards.k;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
+import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.EntersBattlefieldOrLeavesSourceTriggeredAbility;
import mage.abilities.effects.common.DamageTargetEffect;
-import mage.abilities.keyword.VanishingAbility;
+import mage.abilities.effects.common.counter.AddCountersSourceEffect;
+import mage.abilities.keyword.VanishingSacrificeAbility;
+import mage.abilities.keyword.VanishingUpkeepAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
+import mage.counters.CounterType;
import mage.target.common.TargetPlayerOrPlaneswalker;
-import java.util.UUID;
-
/**
+ *
* @author jonubuu
*/
public final class KeldonMarauders extends CardImpl {
@@ -27,10 +32,14 @@ public final class KeldonMarauders extends CardImpl {
this.toughness = new MageInt(3);
// Vanishing 2
- this.addAbility(new VanishingAbility(2));
+ Ability ability = new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance(2)));
+ ability.setRuleVisible(false);
+ this.addAbility(ability);
+ this.addAbility(new VanishingUpkeepAbility(2));
+ this.addAbility(new VanishingSacrificeAbility());
// When Keldon Marauders enters the battlefield or leaves the battlefield, it deals 1 damage to target player.
- Ability ability = new EntersBattlefieldOrLeavesSourceTriggeredAbility(new DamageTargetEffect(1, "it"), false);
+ ability = new EntersBattlefieldOrLeavesSourceTriggeredAbility(new DamageTargetEffect(1, "it"), false);
ability.addTarget(new TargetPlayerOrPlaneswalker());
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/l/LavacoreElemental.java b/Mage.Sets/src/mage/cards/l/LavacoreElemental.java
index 484f4f152b1..7166ff87572 100644
--- a/Mage.Sets/src/mage/cards/l/LavacoreElemental.java
+++ b/Mage.Sets/src/mage/cards/l/LavacoreElemental.java
@@ -1,33 +1,41 @@
+
package mage.cards.l;
+import java.util.UUID;
import mage.MageInt;
+import mage.abilities.Ability;
import mage.abilities.common.DealsDamageToAPlayerAllTriggeredAbility;
+import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
-import mage.abilities.keyword.VanishingAbility;
+import mage.abilities.keyword.VanishingSacrificeAbility;
+import mage.abilities.keyword.VanishingUpkeepAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.SetTargetPointer;
import mage.constants.SubType;
+import mage.constants.SetTargetPointer;
import mage.counters.CounterType;
import mage.filter.StaticFilters;
-import java.util.UUID;
-
/**
+ *
* @author fireshoes
*/
public final class LavacoreElemental extends CardImpl {
public LavacoreElemental(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}");
+ super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}");
this.subtype.add(SubType.ELEMENTAL);
this.power = new MageInt(5);
this.toughness = new MageInt(3);
// Vanishing 1
- this.addAbility(new VanishingAbility(1));
+ Ability ability = new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance(1)));
+ ability.setRuleVisible(false);
+ this.addAbility(ability);
+ this.addAbility(new VanishingUpkeepAbility(1));
+ this.addAbility(new VanishingSacrificeAbility());
// Whenever a creature you control deals combat damage to a player, put a time counter on Lavacore Elemental.
Effect effect = new AddCountersSourceEffect(CounterType.TIME.createInstance(1));
diff --git a/Mage.Sets/src/mage/cards/l/LostAuramancers.java b/Mage.Sets/src/mage/cards/l/LostAuramancers.java
index c6bac572133..68b695b7a64 100644
--- a/Mage.Sets/src/mage/cards/l/LostAuramancers.java
+++ b/Mage.Sets/src/mage/cards/l/LostAuramancers.java
@@ -1,9 +1,15 @@
+
package mage.cards.l;
+import java.util.UUID;
import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.PutIntoGraveFromBattlefieldSourceTriggeredAbility;
+import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
-import mage.abilities.keyword.VanishingAbility;
+import mage.abilities.keyword.VanishingSacrificeAbility;
+import mage.abilities.keyword.VanishingUpkeepAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -16,22 +22,25 @@ import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
import mage.target.common.TargetCardInLibrary;
-import java.util.UUID;
-
/**
+ *
* @author Quercitron
*/
public final class LostAuramancers extends CardImpl {
public LostAuramancers(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}{W}");
+ super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}{W}");
this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.WIZARD);
this.power = new MageInt(3);
this.toughness = new MageInt(3);
// Vanishing 3
- this.addAbility(new VanishingAbility(3));
+ Ability ability = new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance(3)));
+ ability.setRuleVisible(false);
+ this.addAbility(ability);
+ this.addAbility(new VanishingUpkeepAbility(3));
+ this.addAbility(new VanishingSacrificeAbility());
// When Lost Auramancers dies, if it had no time counters on it, you may search your library
// for an enchantment card and put it onto the battlefield. If you do, shuffle your library.
diff --git a/Mage.Sets/src/mage/cards/m/MaelstromDjinn.java b/Mage.Sets/src/mage/cards/m/MaelstromDjinn.java
index 2902459ec8e..764d3f7406e 100644
--- a/Mage.Sets/src/mage/cards/m/MaelstromDjinn.java
+++ b/Mage.Sets/src/mage/cards/m/MaelstromDjinn.java
@@ -1,47 +1,49 @@
+
package mage.cards.m;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.TurnedFaceUpSourceTriggeredAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.Effect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.MorphAbility;
-import mage.abilities.keyword.VanishingAbility;
+import mage.abilities.keyword.VanishingSacrificeAbility;
+import mage.abilities.keyword.VanishingUpkeepAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.Duration;
import mage.constants.SubType;
+import mage.constants.Duration;
import mage.counters.CounterType;
-import java.util.UUID;
-
/**
+ *
* @author LoneFox
*/
public final class MaelstromDjinn extends CardImpl {
public MaelstromDjinn(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{7}{U}");
+ super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{7}{U}");
this.subtype.add(SubType.DJINN);
this.power = new MageInt(5);
this.toughness = new MageInt(6);
// Flying
this.addAbility(FlyingAbility.getInstance());
-
// Morph {2}{U}
this.addAbility(new MorphAbility(new ManaCostsImpl<>("{2}{U}")));
-
// When Maelstrom Djinn is turned face up, put two time counters on it and it gains vanishing.
- Ability ability = new TurnedFaceUpSourceTriggeredAbility(
- new AddCountersSourceEffect(CounterType.TIME.createInstance(2))
- );
- ability.addEffect(new GainAbilitySourceEffect(
- new VanishingAbility(0), Duration.WhileOnBattlefield
- ).setText("and it gains vanishing"));
+ Ability ability = new TurnedFaceUpSourceTriggeredAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance(2)));
+ Effect effect = new GainAbilitySourceEffect(new VanishingUpkeepAbility(0), Duration.WhileOnBattlefield);
+ effect.setText("and it gains vanishing");
+ ability.addEffect(effect);
+ effect = new GainAbilitySourceEffect(new VanishingSacrificeAbility(), Duration.WhileOnBattlefield);
+ effect.setText("");
+ ability.addEffect(effect);
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/o/OutOfTime.java b/Mage.Sets/src/mage/cards/o/OutOfTime.java
index a696ca65063..34dc4540538 100644
--- a/Mage.Sets/src/mage/cards/o/OutOfTime.java
+++ b/Mage.Sets/src/mage/cards/o/OutOfTime.java
@@ -1,5 +1,7 @@
package mage.cards.o;
+import java.util.*;
+
import mage.abilities.Ability;
import mage.abilities.DelayedTriggeredAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@@ -7,7 +9,8 @@ import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.PhaseOutAllEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
-import mage.abilities.keyword.VanishingAbility;
+import mage.abilities.keyword.VanishingSacrificeAbility;
+import mage.abilities.keyword.VanishingUpkeepAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -21,9 +24,8 @@ import mage.game.events.GameEvent;
import mage.game.events.ZoneChangeEvent;
import mage.game.permanent.Permanent;
-import java.util.*;
-
/**
+ *
* @author weirddan455
*/
public final class OutOfTime extends CardImpl {
@@ -36,7 +38,8 @@ public final class OutOfTime extends CardImpl {
this.addAbility(new EntersBattlefieldTriggeredAbility(new OutOfTimePhaseOutEffect()));
// Vanishing
- this.addAbility(new VanishingAbility(0));
+ this.addAbility(new VanishingUpkeepAbility(0, "enchantment"));
+ this.addAbility(new VanishingSacrificeAbility());
}
private OutOfTime(final OutOfTime card) {
diff --git a/Mage.Sets/src/mage/cards/r/RavagingRiftwurm.java b/Mage.Sets/src/mage/cards/r/RavagingRiftwurm.java
index 28b89acb8a1..d2033c8de59 100644
--- a/Mage.Sets/src/mage/cards/r/RavagingRiftwurm.java
+++ b/Mage.Sets/src/mage/cards/r/RavagingRiftwurm.java
@@ -1,40 +1,44 @@
package mage.cards.r;
+import java.util.UUID;
import mage.MageInt;
+import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.condition.common.KickedCondition;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.KickerAbility;
-import mage.abilities.keyword.VanishingAbility;
+import mage.abilities.keyword.VanishingSacrificeAbility;
+import mage.abilities.keyword.VanishingUpkeepAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.counters.CounterType;
-import java.util.UUID;
-
/**
+ *
* @author LoneFox
*/
public final class RavagingRiftwurm extends CardImpl {
public RavagingRiftwurm(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}{G}");
+ super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}{G}");
this.subtype.add(SubType.WURM);
this.power = new MageInt(6);
this.toughness = new MageInt(6);
// Kicker {4}
this.addAbility(new KickerAbility("{4}"));
-
// Vanishing 2
- this.addAbility(new VanishingAbility(2));
-
+ Ability ability = new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance(2)));
+ ability.setRuleVisible(false);
+ this.addAbility(ability);
+ this.addAbility(new VanishingUpkeepAbility(2));
+ this.addAbility(new VanishingSacrificeAbility());
// If Ravaging Riftwurm was kicked, it enters the battlefield with three additional time counters on it.
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance(3)),
- KickedCondition.ONCE, "If {this} was kicked, it enters the battlefield with three additional time counters on it.", ""));
+ KickedCondition.ONCE, "If {this} was kicked, it enters the battlefield with three additional time counters on it.", ""));
}
private RavagingRiftwurm(final RavagingRiftwurm card) {
diff --git a/Mage.Sets/src/mage/cards/r/RealityAcid.java b/Mage.Sets/src/mage/cards/r/RealityAcid.java
index 46b38a1f437..e1e38c3dc82 100644
--- a/Mage.Sets/src/mage/cards/r/RealityAcid.java
+++ b/Mage.Sets/src/mage/cards/r/RealityAcid.java
@@ -1,33 +1,38 @@
+
package mage.cards.r;
+import java.util.UUID;
import mage.abilities.Ability;
+import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.ZoneChangeTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.SacrificeTargetEffect;
+import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.EnchantAbility;
-import mage.abilities.keyword.VanishingAbility;
+import mage.abilities.keyword.VanishingSacrificeAbility;
+import mage.abilities.keyword.VanishingUpkeepAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.Outcome;
import mage.constants.SubType;
+import mage.constants.Outcome;
import mage.constants.Zone;
+import mage.counters.CounterType;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
import mage.target.TargetPermanent;
import mage.target.targetpointer.FixedTarget;
-import java.util.UUID;
-
/**
+ *
* @author fireshoes
*/
public final class RealityAcid extends CardImpl {
public RealityAcid(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{U}");
+ super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{U}");
this.subtype.add(SubType.AURA);
// Enchant permanent
@@ -38,7 +43,11 @@ public final class RealityAcid extends CardImpl {
this.addAbility(ability);
// Vanishing 3
- this.addAbility(new VanishingAbility(3));
+ ability = new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance(3)));
+ ability.setRuleVisible(false);
+ this.addAbility(ability);
+ this.addAbility(new VanishingUpkeepAbility(3, "aura"));
+ this.addAbility(new VanishingSacrificeAbility());
// When Reality Acid leaves the battlefield, enchanted permanent's controller sacrifices it.
Effect effect = new SacrificeTargetEffect("enchanted permanent's controller sacrifices it");
diff --git a/Mage.Sets/src/mage/cards/s/SoultetherGolem.java b/Mage.Sets/src/mage/cards/s/SoultetherGolem.java
index 79380a675a4..22c9e0fb01d 100644
--- a/Mage.Sets/src/mage/cards/s/SoultetherGolem.java
+++ b/Mage.Sets/src/mage/cards/s/SoultetherGolem.java
@@ -1,9 +1,12 @@
package mage.cards.s;
import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
-import mage.abilities.keyword.VanishingAbility;
+import mage.abilities.keyword.VanishingSacrificeAbility;
+import mage.abilities.keyword.VanishingUpkeepAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -35,7 +38,11 @@ public final class SoultetherGolem extends CardImpl {
this.toughness = new MageInt(3);
// Vanishing 1
- this.addAbility(new VanishingAbility(1));
+ Ability ability = new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance(1)));
+ ability.setRuleVisible(false);
+ this.addAbility(ability);
+ this.addAbility(new VanishingUpkeepAbility(1));
+ this.addAbility(new VanishingSacrificeAbility());
// Whenever another creature enters the battlefield under your control, put a time counter on Soultether Golem.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
diff --git a/Mage.Sets/src/mage/cards/t/Tidewalker.java b/Mage.Sets/src/mage/cards/t/Tidewalker.java
index 355cb9e1a57..3264ee52c40 100644
--- a/Mage.Sets/src/mage/cards/t/Tidewalker.java
+++ b/Mage.Sets/src/mage/cards/t/Tidewalker.java
@@ -1,5 +1,7 @@
+
package mage.cards.t;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.SimpleStaticAbility;
@@ -7,7 +9,8 @@ import mage.abilities.dynamicvalue.common.CountersSourceCount;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.continuous.SetBasePowerToughnessSourceEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
-import mage.abilities.keyword.VanishingAbility;
+import mage.abilities.keyword.VanishingSacrificeAbility;
+import mage.abilities.keyword.VanishingUpkeepAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -16,9 +19,8 @@ import mage.constants.Zone;
import mage.counters.CounterType;
import mage.filter.common.FilterControlledPermanent;
-import java.util.UUID;
-
/**
+ *
* @author LoneFox
*/
public final class Tidewalker extends CardImpl {
@@ -30,17 +32,16 @@ public final class Tidewalker extends CardImpl {
}
public Tidewalker(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}");
+ super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}");
this.subtype.add(SubType.ELEMENTAL);
this.power = new MageInt(0);
this.toughness = new MageInt(0);
// Tidewalker enters the battlefield with a time counter on it for each Island you control.
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance(0), new PermanentsOnBattlefieldCount(filter), true), "with a time counter on it for each Island you control"));
-
// Vanishing
- this.addAbility(new VanishingAbility(0));
-
+ this.addAbility(new VanishingUpkeepAbility(0));
+ this.addAbility(new VanishingSacrificeAbility());
// Tidewalker's power and toughness are each equal to the number of time counters on it.
this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetBasePowerToughnessSourceEffect(new CountersSourceCount(CounterType.TIME))));
}
diff --git a/Mage.Sets/src/mage/cards/w/WaningWurm.java b/Mage.Sets/src/mage/cards/w/WaningWurm.java
index 0d9c89bf8fd..61550f32675 100644
--- a/Mage.Sets/src/mage/cards/w/WaningWurm.java
+++ b/Mage.Sets/src/mage/cards/w/WaningWurm.java
@@ -1,28 +1,38 @@
+
package mage.cards.w;
+import java.util.UUID;
import mage.MageInt;
-import mage.abilities.keyword.VanishingAbility;
+import mage.abilities.Ability;
+import mage.abilities.common.EntersBattlefieldAbility;
+import mage.abilities.effects.common.counter.AddCountersSourceEffect;
+import mage.abilities.keyword.VanishingSacrificeAbility;
+import mage.abilities.keyword.VanishingUpkeepAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
-
-import java.util.UUID;
+import mage.counters.CounterType;
/**
+ *
* @author LoneFox
*/
public final class WaningWurm extends CardImpl {
public WaningWurm(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}");
+ super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}");
this.subtype.add(SubType.ZOMBIE);
this.subtype.add(SubType.WURM);
this.power = new MageInt(7);
this.toughness = new MageInt(6);
// Vanishing 2
- this.addAbility(new VanishingAbility(2));
+ Ability ability = new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance(2)));
+ ability.setRuleVisible(false);
+ this.addAbility(ability);
+ this.addAbility(new VanishingUpkeepAbility(2));
+ this.addAbility(new VanishingSacrificeAbility());
}
private WaningWurm(final WaningWurm card) {
diff --git a/Mage/src/main/java/mage/abilities/Ability.java b/Mage/src/main/java/mage/abilities/Ability.java
index b89e12a5f6d..a2753500be9 100644
--- a/Mage/src/main/java/mage/abilities/Ability.java
+++ b/Mage/src/main/java/mage/abilities/Ability.java
@@ -428,7 +428,7 @@ public interface Ability extends Controllable, Serializable {
*
* @param ruleVisible
*/
- Ability setRuleVisible(boolean ruleVisible);
+ void setRuleVisible(boolean ruleVisible);
/**
* Returns true if the additional costs of the abilitiy should be visible on
diff --git a/Mage/src/main/java/mage/abilities/AbilityImpl.java b/Mage/src/main/java/mage/abilities/AbilityImpl.java
index b503a054116..2f62c532bf6 100644
--- a/Mage/src/main/java/mage/abilities/AbilityImpl.java
+++ b/Mage/src/main/java/mage/abilities/AbilityImpl.java
@@ -1076,11 +1076,10 @@ public abstract class AbilityImpl implements Ability {
}
@Override
- public AbilityImpl setRuleVisible(boolean ruleVisible) {
+ public void setRuleVisible(boolean ruleVisible) {
if (!(this instanceof MageSingleton)) { // prevent to change singletons
this.ruleVisible = ruleVisible;
}
- return this;
}
@Override
diff --git a/Mage/src/main/java/mage/abilities/keyword/VanishingAbility.java b/Mage/src/main/java/mage/abilities/keyword/VanishingAbility.java
deleted file mode 100644
index 6a94262e3a0..00000000000
--- a/Mage/src/main/java/mage/abilities/keyword/VanishingAbility.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package mage.abilities.keyword;
-
-import mage.abilities.TriggeredAbilityImpl;
-import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
-import mage.abilities.common.EntersBattlefieldAbility;
-import mage.abilities.condition.Condition;
-import mage.abilities.condition.common.SourceHasCounterCondition;
-import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
-import mage.abilities.effects.common.SacrificeSourceEffect;
-import mage.abilities.effects.common.counter.AddCountersSourceEffect;
-import mage.abilities.effects.common.counter.RemoveCounterSourceEffect;
-import mage.constants.TargetController;
-import mage.constants.Zone;
-import mage.counters.CounterType;
-import mage.game.Game;
-import mage.game.events.GameEvent;
-import mage.game.permanent.Permanent;
-import mage.util.CardUtil;
-
-/**
- * @author TheElk801
- */
-public class VanishingAbility extends EntersBattlefieldAbility {
-
- private static final Condition condition = new SourceHasCounterCondition(CounterType.TIME);
- private final int amount;
-
- public VanishingAbility(int amount) {
- super(new AddCountersSourceEffect(CounterType.TIME.createInstance(amount)));
- this.amount = amount;
- this.addSubAbility(new ConditionalInterveningIfTriggeredAbility(
- new BeginningOfUpkeepTriggeredAbility(
- new RemoveCounterSourceEffect(CounterType.TIME.createInstance()),
- TargetController.YOU, false
- ), condition, "At the beginning of your upkeep, if this permanent " +
- "has a time counter on it, remove a time counter from it."
- ).setRuleVisible(false));
- this.addSubAbility(new VanishingTriggeredAbility());
- }
-
- private VanishingAbility(final VanishingAbility ability) {
- super(ability);
- this.amount = ability.amount;
- }
-
- @Override
- public VanishingAbility copy() {
- return new VanishingAbility(this);
- }
-
- @Override
- public String getRule() {
- if (amount > 0) {
- return "Vanishing " + amount + " (This permanent enters the battlefield with " +
- CardUtil.numberToText(amount) + " time counters on it. At the beginning of your upkeep, " +
- "remove a time counter from it. When the last is removed, sacrifice it.)";
- }
- return "Vanishing (At the beginning of your upkeep, remove a time counter " +
- "from this permanent. When the last is removed, sacrifice it.)";
- }
-}
-
-class VanishingTriggeredAbility extends TriggeredAbilityImpl {
-
- VanishingTriggeredAbility() {
- super(Zone.BATTLEFIELD, new SacrificeSourceEffect());
- this.setRuleVisible(false);
- }
-
- private VanishingTriggeredAbility(final VanishingTriggeredAbility ability) {
- super(ability);
- }
-
- @Override
- public VanishingTriggeredAbility copy() {
- return new VanishingTriggeredAbility(this);
- }
-
- @Override
- public boolean checkEventType(GameEvent event, Game game) {
- return event.getType() == GameEvent.EventType.COUNTERS_REMOVED;
- }
-
- @Override
- public boolean checkTrigger(GameEvent event, Game game) {
- if (!CounterType.TIME.getName().equals(event.getData())) {
- return false;
- }
- Permanent permanent = getSourcePermanentIfItStillExists(game);
- return permanent != null && permanent.getCounters(game).getCount(CounterType.TIME) < 1;
- }
-
- @Override
- public String getRule() {
- return "When the last time counter is removed from {this}, sacrifice it.";
- }
-}
diff --git a/Mage/src/main/java/mage/abilities/keyword/VanishingSacrificeAbility.java b/Mage/src/main/java/mage/abilities/keyword/VanishingSacrificeAbility.java
new file mode 100644
index 00000000000..8239a890cbd
--- /dev/null
+++ b/Mage/src/main/java/mage/abilities/keyword/VanishingSacrificeAbility.java
@@ -0,0 +1,42 @@
+package mage.abilities.keyword;
+
+import mage.abilities.TriggeredAbilityImpl;
+import mage.abilities.effects.common.SacrificeSourceEffect;
+import mage.constants.Zone;
+import mage.counters.CounterType;
+import mage.game.Game;
+import mage.game.events.GameEvent;
+import mage.game.permanent.Permanent;
+
+public class VanishingSacrificeAbility extends TriggeredAbilityImpl {
+ public VanishingSacrificeAbility() {
+ super(Zone.BATTLEFIELD, new SacrificeSourceEffect());
+ this.setRuleVisible(false);
+ }
+
+ protected VanishingSacrificeAbility(final VanishingSacrificeAbility ability) {
+ super(ability);
+ }
+
+ @Override
+ public boolean checkEventType(GameEvent event, Game game) {
+ return event.getType() == GameEvent.EventType.COUNTER_REMOVED;
+ }
+
+ @Override
+ public boolean checkTrigger(GameEvent event, Game game) {
+ if (event.getData().equals(CounterType.TIME.getName()) && event.getTargetId().equals(this.getSourceId())) {
+ Permanent p = game.getPermanent(this.getSourceId());
+ if (p != null) {
+ return p.getCounters(game).getCount(CounterType.TIME) == 0;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public VanishingSacrificeAbility copy() {
+ return new VanishingSacrificeAbility(this);
+ }
+
+}
diff --git a/Mage/src/main/java/mage/abilities/keyword/VanishingUpkeepAbility.java b/Mage/src/main/java/mage/abilities/keyword/VanishingUpkeepAbility.java
new file mode 100644
index 00000000000..e6097184fb3
--- /dev/null
+++ b/Mage/src/main/java/mage/abilities/keyword/VanishingUpkeepAbility.java
@@ -0,0 +1,81 @@
+package mage.abilities.keyword;
+
+import mage.abilities.Ability;
+import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
+import mage.abilities.effects.OneShotEffect;
+import mage.constants.Outcome;
+import mage.constants.TargetController;
+import mage.counters.CounterType;
+import mage.game.Game;
+import mage.game.permanent.Permanent;
+import mage.util.CardUtil;
+
+public class VanishingUpkeepAbility extends BeginningOfUpkeepTriggeredAbility {
+
+ private int vanishingAmount;
+ private String permanentType;
+
+ public VanishingUpkeepAbility(int vanishingEffect) {
+ super(new VanishingEffect(), TargetController.YOU, false);
+ this.vanishingAmount = vanishingEffect;
+ this.permanentType = "creature";
+ }
+
+ public VanishingUpkeepAbility(int vanishingEffect, String permanentType) {
+ super(new VanishingEffect(), TargetController.YOU, false);
+ this.vanishingAmount = vanishingEffect;
+ this.permanentType = permanentType;
+ }
+
+ protected VanishingUpkeepAbility(final VanishingUpkeepAbility ability) {
+ super(ability);
+ this.vanishingAmount = ability.vanishingAmount;
+ this.permanentType = ability.permanentType;
+ }
+
+ @Override
+ public BeginningOfUpkeepTriggeredAbility copy() {
+ return new VanishingUpkeepAbility(this);
+ }
+
+ @Override
+ public String getRule() {
+ if (vanishingAmount > 0) {
+ return "Vanishing " + vanishingAmount
+ + " (This " + permanentType + " enters the battlefield with " + CardUtil.numberToText(vanishingAmount)
+ + " time counters on it. At the beginning of your upkeep, remove a time counter from it. When the last is removed, sacrifice it.)";
+ } else {
+ return "Vanishing (At the beginning of your upkeep, remove a time counter from this " + permanentType + ". When the last is removed, sacrifice it.)";
+ }
+ }
+}
+
+class VanishingEffect extends OneShotEffect {
+
+ VanishingEffect() {
+ super(Outcome.Sacrifice);
+ }
+
+ VanishingEffect(final VanishingEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Permanent p = game.getPermanent(source.getSourceId());
+ if (p != null) {
+ int amount = p.getCounters(game).getCount(CounterType.TIME);
+ if (amount > 0) {
+ p.removeCounters(CounterType.TIME.createInstance(), source, game);
+ game.informPlayers("Removed a time counter from " + p.getLogName() + " (" + amount + " left)");
+ }
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public VanishingEffect copy() {
+ return new VanishingEffect(this);
+ }
+}
diff --git a/Utils/keywords.txt b/Utils/keywords.txt
index 478144d8ebb..ba113c5ea2d 100644
--- a/Utils/keywords.txt
+++ b/Utils/keywords.txt
@@ -127,7 +127,6 @@ Undaunted|new|
Undying|new|
Unearth|cost|
Unleash|new|
-Vanishing|number|
Vigilance|instance|
Ward|cost|
Wither|instance|