diff --git a/Mage.Sets/src/mage/cards/a/AtarkasCommand.java b/Mage.Sets/src/mage/cards/a/AtarkasCommand.java
index ed705c93dc7..c9d8bc6deb5 100644
--- a/Mage.Sets/src/mage/cards/a/AtarkasCommand.java
+++ b/Mage.Sets/src/mage/cards/a/AtarkasCommand.java
@@ -45,7 +45,7 @@ public final class AtarkasCommand extends CardImpl {
Effect effect = new BoostControlledEffect(1, 1, Duration.EndOfTurn);
effect.setText("Creatures you control get +1/+1");
mode = new Mode(effect);
- effect = new GainAbilityControlledEffect(ReachAbility.getInstance(), Duration.EndOfTurn);
+ effect = new GainAbilityControlledEffect(ReachAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES);
effect.setText("and gain reach until end of turn");
mode.addEffect(effect);
this.getSpellAbility().addMode(mode);
diff --git a/Mage.Sets/src/mage/cards/b/BattleTactics.java b/Mage.Sets/src/mage/cards/b/BattleTactics.java
index 4640b6bf6b4..1fffbcb31be 100644
--- a/Mage.Sets/src/mage/cards/b/BattleTactics.java
+++ b/Mage.Sets/src/mage/cards/b/BattleTactics.java
@@ -10,6 +10,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
+import mage.filter.StaticFilters;
/**
*
@@ -24,7 +25,7 @@ public final class BattleTactics extends CardImpl {
Effect effect = new BoostControlledEffect(2, 1, Duration.EndOfTurn);
effect.setText("Creatures you control get +2/+1");
this.getSpellAbility().addEffect(effect);
- effect = new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn);
+ effect = new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES);
effect.setText("and gain lifelink until end of turn");
this.getSpellAbility().addEffect(effect);
}
diff --git a/Mage.Sets/src/mage/cards/b/BullRancor.java b/Mage.Sets/src/mage/cards/b/BullRancor.java
index fe61a7a7243..befdb4f69f9 100644
--- a/Mage.Sets/src/mage/cards/b/BullRancor.java
+++ b/Mage.Sets/src/mage/cards/b/BullRancor.java
@@ -1,4 +1,3 @@
-
package mage.cards.b;
import java.util.UUID;
@@ -15,7 +14,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
-import mage.constants.Zone;
+import mage.filter.StaticFilters;
/**
*
@@ -36,8 +35,8 @@ public final class BullRancor extends CardImpl {
this.addAbility(new MonstrosityAbility("{3}{R}{G}{G}{W}", 3));
// As long as Bull Rancor is monstrous, creatures you control have menace.
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(
- new GainAbilityControlledEffect(new MenaceAbility(), Duration.WhileOnBattlefield),
+ this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
+ new GainAbilityControlledEffect(new MenaceAbility(false), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES),
MonstrousCondition.instance,
"As long as Bull Rancor is monstrous, creatures you control have menace")
));
diff --git a/Mage.Sets/src/mage/cards/d/DomriCitySmasher.java b/Mage.Sets/src/mage/cards/d/DomriCitySmasher.java
index f90cc9cc545..982a8b4d48c 100644
--- a/Mage.Sets/src/mage/cards/d/DomriCitySmasher.java
+++ b/Mage.Sets/src/mage/cards/d/DomriCitySmasher.java
@@ -37,7 +37,7 @@ public final class DomriCitySmasher extends CardImpl {
1, 1, Duration.EndOfTurn
).setText("creatures you control get +1/+1"), 2);
ability.addEffect(new GainAbilityControlledEffect(
- HasteAbility.getInstance(), Duration.EndOfTurn
+ HasteAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES
).setText("and gain haste until end of turn"));
this.addAbility(ability);
@@ -52,7 +52,7 @@ public final class DomriCitySmasher extends CardImpl {
StaticFilters.FILTER_CONTROLLED_CREATURE
), -8);
ability.addEffect(new GainAbilityControlledEffect(
- TrampleAbility.getInstance(), Duration.EndOfTurn
+ TrampleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES
).setText("Those creatures gain trample until end of turn"));
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/f/FlameFusillade.java b/Mage.Sets/src/mage/cards/f/FlameFusillade.java
index 57eb95605e4..c5ceef06e4b 100644
--- a/Mage.Sets/src/mage/cards/f/FlameFusillade.java
+++ b/Mage.Sets/src/mage/cards/f/FlameFusillade.java
@@ -1,4 +1,3 @@
-
package mage.cards.f;
import java.util.UUID;
@@ -23,11 +22,10 @@ public final class FlameFusillade extends CardImpl {
public FlameFusillade(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{R}");
-
// Until end of turn, permanents you control gain "{tap}: This permanent deals 1 damage to any target."
- Ability gainedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new TapSourceCost());
+ Ability gainedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1, "this permanent"), new TapSourceCost());
gainedAbility.addTarget(new TargetAnyTarget());
- this.getSpellAbility().addEffect(new GainAbilityControlledEffect(gainedAbility, Duration.EndOfTurn));
+ this.getSpellAbility().addEffect(new GainAbilityControlledEffect(gainedAbility, Duration.EndOfTurn).withDurationRuleAtStart(true));
}
private FlameFusillade(final FlameFusillade card) {
diff --git a/Mage.Sets/src/mage/cards/f/FlameKinZealot.java b/Mage.Sets/src/mage/cards/f/FlameKinZealot.java
index 5fa11c24190..9edaeb2b350 100644
--- a/Mage.Sets/src/mage/cards/f/FlameKinZealot.java
+++ b/Mage.Sets/src/mage/cards/f/FlameKinZealot.java
@@ -1,4 +1,3 @@
-
package mage.cards.f;
import java.util.UUID;
@@ -13,7 +12,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
-import mage.filter.common.FilterCreaturePermanent;
+import mage.filter.StaticFilters;
/**
*
@@ -30,8 +29,10 @@ public final class FlameKinZealot extends CardImpl {
this.toughness = new MageInt(2);
// When Flame-Kin Zealot enters the battlefield, creatures you control get +1/+1 and gain haste until end of turn.
- Ability ability = new EntersBattlefieldTriggeredAbility(new BoostControlledEffect(1, 1, Duration.EndOfTurn));
- ability.addEffect(new GainAbilityControlledEffect(HasteAbility.getInstance(), Duration.EndOfTurn, new FilterCreaturePermanent()));
+ Ability ability = new EntersBattlefieldTriggeredAbility(new BoostControlledEffect(1, 1, Duration.EndOfTurn)
+ .setText("creatures you control get +1/+1"));
+ ability.addEffect(new GainAbilityControlledEffect(HasteAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES)
+ .setText("and gain haste until end of turn"));
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/g/GarrukSavageHerald.java b/Mage.Sets/src/mage/cards/g/GarrukSavageHerald.java
index 8b2c92908a3..74074c02bd1 100644
--- a/Mage.Sets/src/mage/cards/g/GarrukSavageHerald.java
+++ b/Mage.Sets/src/mage/cards/g/GarrukSavageHerald.java
@@ -18,6 +18,7 @@ import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.Zone;
+import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.other.AnotherTargetPredicate;
import mage.game.Game;
@@ -60,7 +61,7 @@ public final class GarrukSavageHerald extends CardImpl {
this.addAbility(minusAbility);
// −7: Until end of turn, creatures you control gain "You may have this creature assign its combat damage as though it weren't blocked."
- ContinuousEffect ultimateEffect = new GainAbilityControlledEffect(DamageAsThoughNotBlockedAbility.getInstance(), Duration.EndOfTurn);
+ ContinuousEffect ultimateEffect = new GainAbilityControlledEffect(DamageAsThoughNotBlockedAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES);
ultimateEffect.setText("Until end of turn, creatures you control gain \"You may have this creature assign its combat damage as though it weren't blocked.\"");
this.addAbility(new LoyaltyAbility(ultimateEffect, -7));
}
@@ -109,4 +110,4 @@ class GarrukSavageHeraldEffect extends OneShotEffect {
return player.putCardsOnBottomOfLibrary(card, game, source, false);
}
}
-}
\ No newline at end of file
+}
diff --git a/Mage.Sets/src/mage/cards/g/GoblinWarParty.java b/Mage.Sets/src/mage/cards/g/GoblinWarParty.java
index f2074efb8c7..b09c9f14e46 100644
--- a/Mage.Sets/src/mage/cards/g/GoblinWarParty.java
+++ b/Mage.Sets/src/mage/cards/g/GoblinWarParty.java
@@ -10,6 +10,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
+import mage.filter.StaticFilters;
import mage.game.permanent.token.GoblinToken;
import java.util.UUID;
@@ -31,7 +32,7 @@ public final class GoblinWarParty extends CardImpl {
1, 1, Duration.EndOfTurn
).setText("creatures you control get +1/+1"));
mode.addEffect(new GainAbilityControlledEffect(
- HasteAbility.getInstance(), Duration.EndOfTurn
+ HasteAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES
).setText("and gain haste until end of turn"));
this.getSpellAbility().addMode(mode);
diff --git a/Mage.Sets/src/mage/cards/i/InvertTheSkies.java b/Mage.Sets/src/mage/cards/i/InvertTheSkies.java
index 49010cec24b..a426abe0984 100644
--- a/Mage.Sets/src/mage/cards/i/InvertTheSkies.java
+++ b/Mage.Sets/src/mage/cards/i/InvertTheSkies.java
@@ -1,4 +1,3 @@
-
package mage.cards.i;
import java.util.UUID;
@@ -12,10 +11,10 @@ import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.ColoredManaSymbol;
import mage.constants.Duration;
import mage.constants.TargetController;
import mage.filter.FilterPermanent;
+import mage.filter.StaticFilters;
import mage.filter.predicate.mageobject.AbilityPredicate;
/**
@@ -43,7 +42,7 @@ public final class InvertTheSkies extends CardImpl {
"Creatures your opponents control lose flying until end of turn if {G} was spent to cast this spell,"));
this.getSpellAbility().addEffect(new ConditionalContinuousEffect(
- new GainAbilityControlledEffect(FlyingAbility.getInstance(), Duration.EndOfTurn),
+ new GainAbilityControlledEffect(FlyingAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES),
new LockedInCondition(ManaWasSpentCondition.BLUE),
"and creatures you control gain flying until end of turn if {U} was spent to cast this spell"));
diff --git a/Mage.Sets/src/mage/cards/k/KyrenFlamewright.java b/Mage.Sets/src/mage/cards/k/KyrenFlamewright.java
index d7fd866fe90..a0e95b8626e 100644
--- a/Mage.Sets/src/mage/cards/k/KyrenFlamewright.java
+++ b/Mage.Sets/src/mage/cards/k/KyrenFlamewright.java
@@ -15,6 +15,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
+import mage.filter.StaticFilters;
import mage.game.permanent.token.Elemental11BlueRedToken;
import java.util.UUID;
@@ -43,7 +44,7 @@ public final class KyrenFlamewright extends CardImpl {
ability.addEffect(new BoostControlledEffect(1, 0, Duration.EndOfTurn)
.setText("creatures you control get +1/+0"));
ability.addEffect(new GainAbilityControlledEffect(
- HasteAbility.getInstance(), Duration.EndOfTurn
+ HasteAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES
).setText("and gain haste until end of turn"));
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/k/KytheonsTactics.java b/Mage.Sets/src/mage/cards/k/KytheonsTactics.java
index af9f6199e35..587ea58e907 100644
--- a/Mage.Sets/src/mage/cards/k/KytheonsTactics.java
+++ b/Mage.Sets/src/mage/cards/k/KytheonsTactics.java
@@ -12,6 +12,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
+import mage.filter.StaticFilters;
/**
*
@@ -26,7 +27,7 @@ public final class KytheonsTactics extends CardImpl {
this.getSpellAbility().addEffect(new BoostControlledEffect(2, 1, Duration.EndOfTurn));
// Spell mastery — If there are two or more instant and/or sorcery cards in your graveyard, those creatures also gain vigilance until end of turn.
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
- new AddContinuousEffectToGame(new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn)),
+ new AddContinuousEffectToGame(new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES)),
SpellMasteryCondition.instance,
"
Spell mastery — If there are two or more instant and/or sorcery cards in your graveyard, those creatures also gain vigilance until end of turn"));
}
diff --git a/Mage.Sets/src/mage/cards/m/MarshalingCry.java b/Mage.Sets/src/mage/cards/m/MarshalingCry.java
index c14830c7ee3..e905454a64d 100644
--- a/Mage.Sets/src/mage/cards/m/MarshalingCry.java
+++ b/Mage.Sets/src/mage/cards/m/MarshalingCry.java
@@ -1,4 +1,3 @@
-
package mage.cards.m;
import java.util.UUID;
@@ -13,7 +12,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
-import mage.constants.TimingRule;
+import mage.filter.StaticFilters;
/**
*
@@ -28,7 +27,7 @@ public final class MarshalingCry extends CardImpl {
Effect effect = new BoostControlledEffect(1, 1, Duration.EndOfTurn);
effect.setText("Creatures you control get +1/+1");
this.getSpellAbility().addEffect(effect);
- effect = new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn);
+ effect = new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES);
effect.setText("and gain vigilance until end of turn");
this.getSpellAbility().addEffect(effect);
diff --git a/Mage.Sets/src/mage/cards/n/NissaNaturesArtisan.java b/Mage.Sets/src/mage/cards/n/NissaNaturesArtisan.java
index 6ccd0a7cf33..377ee989903 100644
--- a/Mage.Sets/src/mage/cards/n/NissaNaturesArtisan.java
+++ b/Mage.Sets/src/mage/cards/n/NissaNaturesArtisan.java
@@ -10,6 +10,7 @@ import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.*;
import mage.constants.*;
+import mage.filter.StaticFilters;
import mage.filter.common.FilterLandCard;
import mage.game.Game;
import mage.players.Player;
@@ -42,7 +43,7 @@ public final class NissaNaturesArtisan extends CardImpl {
5, 5, Duration.EndOfTurn
).setText("creatures you control get +5/+5"), -12);
ability.addEffect(new GainAbilityControlledEffect(
- TrampleAbility.getInstance(), Duration.EndOfTurn
+ TrampleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES
).setText("and gain trample until end of turn"));
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/p/PippinWardenOfIsengard.java b/Mage.Sets/src/mage/cards/p/PippinWardenOfIsengard.java
index 372b6dc9f4a..53f6a676226 100644
--- a/Mage.Sets/src/mage/cards/p/PippinWardenOfIsengard.java
+++ b/Mage.Sets/src/mage/cards/p/PippinWardenOfIsengard.java
@@ -18,6 +18,7 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.SuperType;
+import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledPermanent;
import mage.game.permanent.token.FoodToken;
import mage.target.common.TargetControlledPermanent;
@@ -54,7 +55,7 @@ public final class PippinWardenOfIsengard extends CardImpl {
).setText("other creatures you control get +3/+3"), new TapSourceCost());
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(4, filter)));
ability.addEffect(new GainAbilityControlledEffect(
- HasteAbility.getInstance(), Duration.EndOfTurn
+ HasteAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES, true
).setText("and gain haste until end of turn"));
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/s/SoulOfTheros.java b/Mage.Sets/src/mage/cards/s/SoulOfTheros.java
index 48eab3ba1f8..333e70bb19e 100644
--- a/Mage.Sets/src/mage/cards/s/SoulOfTheros.java
+++ b/Mage.Sets/src/mage/cards/s/SoulOfTheros.java
@@ -19,6 +19,7 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.Zone;
+import mage.filter.StaticFilters;
/**
*
@@ -40,10 +41,10 @@ public final class SoulOfTheros extends CardImpl {
Effect effect1 = new BoostControlledEffect(2, 2, Duration.EndOfTurn);
effect1.setText("Creatures you control get +2/+2");
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect1, new ManaCostsImpl<>("{4}{W}{W}"));
- Effect effect2 = new GainAbilityControlledEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn);
+ Effect effect2 = new GainAbilityControlledEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES);
effect2.setText("and gain first strike");
ability.addEffect(effect2);
- Effect effect3 = new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn);
+ Effect effect3 = new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES);
effect3.setText("and lifelink until end of turn");
ability.addEffect(effect3);
this.addAbility(ability);
diff --git a/Mage.Sets/src/mage/cards/s/StirThePride.java b/Mage.Sets/src/mage/cards/s/StirThePride.java
index 949e0afb140..a3f2a99f594 100644
--- a/Mage.Sets/src/mage/cards/s/StirThePride.java
+++ b/Mage.Sets/src/mage/cards/s/StirThePride.java
@@ -12,6 +12,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
+import mage.filter.StaticFilters;
/**
*
@@ -29,7 +30,7 @@ public final class StirThePride extends CardImpl {
// Creatures you control get +2/+2 until end of turn;
this.getSpellAbility().addEffect(new BoostControlledEffect(2,2, Duration.EndOfTurn));
// or until end of turn, creatures you control gain "Whenever this creature deals damage, you gain that much life."
- Effect effect = new GainAbilityControlledEffect(new DealsDamageGainLifeSourceTriggeredAbility(), Duration.EndOfTurn);
+ Effect effect = new GainAbilityControlledEffect(new DealsDamageGainLifeSourceTriggeredAbility(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES);
effect.setText("until end of turn, creatures you control gain \"Whenever this creature deals damage, you gain that much life.\"");
Mode mode = new Mode(effect);
this.getSpellAbility().getModes().addMode(mode);
diff --git a/Mage.Sets/src/mage/cards/t/TowerDefense.java b/Mage.Sets/src/mage/cards/t/TowerDefense.java
index 9cf9e70bd7b..087aef6a76a 100644
--- a/Mage.Sets/src/mage/cards/t/TowerDefense.java
+++ b/Mage.Sets/src/mage/cards/t/TowerDefense.java
@@ -7,6 +7,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
+import mage.filter.StaticFilters;
import java.util.UUID;
@@ -23,7 +24,7 @@ public final class TowerDefense extends CardImpl {
0, 5, Duration.EndOfTurn
).setText("creatures you control get +0/+5"));
this.getSpellAbility().addEffect(new GainAbilityControlledEffect(
- ReachAbility.getInstance(), Duration.EndOfTurn
+ ReachAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES
).setText("and gain reach until end of turn"));
}
diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityControlledEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityControlledEffect.java
index e3f49dec782..bf19ddad74e 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityControlledEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityControlledEffect.java
@@ -25,15 +25,12 @@ public class GainAbilityControlledEffect extends ContinuousEffectImpl {
protected boolean excludeSource;
protected FilterPermanent filter;
protected boolean forceQuotes = false;
+ protected boolean durationRuleAtStart = false; // put duration rule to the start of the rules instead end
public GainAbilityControlledEffect(Ability ability, Duration duration) {
this(ability, duration, StaticFilters.FILTER_PERMANENTS);
}
- public GainAbilityControlledEffect(CompoundAbility ability, Duration duration) {
- this(ability, duration, StaticFilters.FILTER_PERMANENTS);
- }
-
public GainAbilityControlledEffect(Ability ability, Duration duration, FilterPermanent filter) {
this(ability, duration, filter, false);
}
@@ -62,6 +59,7 @@ public class GainAbilityControlledEffect extends ContinuousEffectImpl {
this.filter = effect.filter.copy();
this.excludeSource = effect.excludeSource;
this.forceQuotes = effect.forceQuotes;
+ this.durationRuleAtStart = effect.durationRuleAtStart;
}
@Override
@@ -121,6 +119,9 @@ public class GainAbilityControlledEffect extends ContinuousEffectImpl {
private void setText() {
StringBuilder sb = new StringBuilder();
+ if (durationRuleAtStart && !duration.toString().isEmpty() && duration != Duration.EndOfGame) {
+ sb.append(duration.toString()).append(", ");
+ }
if (excludeSource) {
sb.append("other ");
}
@@ -128,14 +129,14 @@ public class GainAbilityControlledEffect extends ContinuousEffectImpl {
sb.append(filter.getMessage()).append(" you control ");
if (duration == Duration.WhileOnBattlefield || duration == Duration.EndOfGame) {
sb.append("have ");
- if (forceQuotes || gainedAbility.startsWith("When") || gainedAbility.startsWith("{T}")) {
- gainedAbility = '"' + gainedAbility + '"';
- }
} else {
sb.append("gain ");
}
+ if (forceQuotes || gainedAbility.startsWith("When") || gainedAbility.startsWith("{T}")) {
+ gainedAbility = '"' + gainedAbility + '"';
+ }
sb.append(gainedAbility);
- if (!duration.toString().isEmpty() && duration != Duration.EndOfGame) {
+ if (!durationRuleAtStart && !duration.toString().isEmpty() && duration != Duration.EndOfGame) {
sb.append(' ').append(duration.toString());
}
staticText = sb.toString();
@@ -143,12 +144,16 @@ public class GainAbilityControlledEffect extends ContinuousEffectImpl {
/**
* Add quotes to gains abilities (by default static abilities don't have it)
- *
- * @return
*/
public GainAbilityControlledEffect withForceQuotes() {
this.forceQuotes = true;
setText();
return this;
}
+
+ public GainAbilityControlledEffect withDurationRuleAtStart(boolean durationRuleAtStart) {
+ this.durationRuleAtStart = durationRuleAtStart;
+ setText();
+ return this;
+ }
}
diff --git a/Mage/src/main/java/mage/game/command/emblems/ObiWanKenobiEmblem.java b/Mage/src/main/java/mage/game/command/emblems/ObiWanKenobiEmblem.java
index 4f0a4fc50a4..33a885909ff 100644
--- a/Mage/src/main/java/mage/game/command/emblems/ObiWanKenobiEmblem.java
+++ b/Mage/src/main/java/mage/game/command/emblems/ObiWanKenobiEmblem.java
@@ -10,6 +10,7 @@ import mage.abilities.keyword.LifelinkAbility;
import mage.abilities.keyword.VigilanceAbility;
import mage.constants.Duration;
import mage.constants.Zone;
+import mage.filter.StaticFilters;
import mage.game.command.Emblem;
/**
@@ -21,13 +22,13 @@ public final class ObiWanKenobiEmblem extends Emblem {
public ObiWanKenobiEmblem() {
super("Emblem Obi-Wan Kenobi");
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new BoostControlledEffect(1, 1, Duration.EndOfGame));
- Effect effect = new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.EndOfGame);
+ Effect effect = new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.EndOfGame, StaticFilters.FILTER_PERMANENT_CREATURES);
effect.setText("and have vigilance");
ability.addEffect(effect);
- effect = new GainAbilityControlledEffect(FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield);
+ effect = new GainAbilityControlledEffect(FirstStrikeAbility.getInstance(), Duration.EndOfGame, StaticFilters.FILTER_PERMANENT_CREATURES);
effect.setText(", first strike");
ability.addEffect(effect);
- effect = new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.WhileOnBattlefield);
+ effect = new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.EndOfGame, StaticFilters.FILTER_PERMANENT_CREATURES);
effect.setText("and lifelink.");
ability.addEffect(effect);
getAbilities().add(ability);
diff --git a/Mage/src/main/java/mage/game/command/planes/TheGreatForestPlane.java b/Mage/src/main/java/mage/game/command/planes/TheGreatForestPlane.java
index 00da06b23b4..c77cc92762e 100644
--- a/Mage/src/main/java/mage/game/command/planes/TheGreatForestPlane.java
+++ b/Mage/src/main/java/mage/game/command/planes/TheGreatForestPlane.java
@@ -27,8 +27,6 @@ import java.util.List;
*/
public class TheGreatForestPlane extends Plane {
- private static final String rule = "Each creature assigns combat damage equal to its toughness rather than its power";
-
public TheGreatForestPlane() {
this.setPlaneType(Planes.PLANE_THE_GREAT_FOREST);
@@ -39,13 +37,13 @@ public class TheGreatForestPlane extends Plane {
// Active player can roll the planar die: Whenever you roll {CHAOS}, creatures you control get +0/+2 and gain trample until end of turn
Effect chaosEffect = new BoostControlledEffect(0, 2, Duration.EndOfTurn);
Target chaosTarget = null;
- Effect chaosEffect2 = new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn);
+ Effect chaosEffect2 = new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES);
Target chaosTarget2 = null;
- List chaosEffects = new ArrayList();
+ List chaosEffects = new ArrayList<>();
chaosEffects.add(chaosEffect);
chaosEffects.add(chaosEffect2);
- List chaosTargets = new ArrayList();
+ List chaosTargets = new ArrayList<>();
chaosTargets.add(chaosTarget);
chaosTargets.add(chaosTarget2);