diff --git a/Mage.Sets/src/mage/cards/f/Frightcrawler.java b/Mage.Sets/src/mage/cards/f/Frightcrawler.java index d1123538e1e..dcca2568ac3 100644 --- a/Mage.Sets/src/mage/cards/f/Frightcrawler.java +++ b/Mage.Sets/src/mage/cards/f/Frightcrawler.java @@ -1,31 +1,27 @@ - package mage.cards.f; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.common.CardsInControllerGraveCondition; import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.decorator.ConditionalRestrictionEffect; import mage.abilities.effects.common.combat.CantBlockSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.keyword.FearAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.AbilityWord; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.*; + +import java.util.UUID; /** - * * @author cbt33 */ public final class Frightcrawler extends CardImpl { public Frightcrawler(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}"); this.subtype.add(SubType.HORROR); this.power = new MageInt(1); @@ -37,14 +33,14 @@ public final class Frightcrawler extends CardImpl { Ability thresholdAbility = new SimpleStaticAbility( Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), - new CardsInControllerGraveCondition(7), - "If seven or more cards are in your graveyard, {this} gets +2/+2 " + new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), + new CardsInControllerGraveCondition(7), + "If seven or more cards are in your graveyard, {this} gets +2/+2 " )); - thresholdAbility.addEffect(new ConditionalContinuousEffect( - new CantBlockSourceEffect(Duration.WhileOnBattlefield), - new CardsInControllerGraveCondition(7), - "and can't block.")); + thresholdAbility.addEffect(new ConditionalRestrictionEffect( + new CantBlockSourceEffect(Duration.WhileOnBattlefield), + new CardsInControllerGraveCondition(7), + "and can't block.")); thresholdAbility.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(thresholdAbility); } diff --git a/Mage.Sets/src/mage/cards/k/KirtarsDesire.java b/Mage.Sets/src/mage/cards/k/KirtarsDesire.java index f42a3e25b13..9f987a41c7d 100644 --- a/Mage.Sets/src/mage/cards/k/KirtarsDesire.java +++ b/Mage.Sets/src/mage/cards/k/KirtarsDesire.java @@ -1,28 +1,22 @@ - package mage.cards.k; -import java.util.UUID; -import mage.target.common.TargetCreaturePermanent; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.common.CardsInControllerGraveCondition; -import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.decorator.ConditionalRestrictionEffect; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.combat.CantAttackAttachedEffect; import mage.abilities.effects.common.combat.CantAttackBlockAttachedEffect; -import mage.constants.Outcome; -import mage.target.TargetPermanent; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.AbilityWord; -import mage.constants.AttachmentType; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Zone; +import mage.constants.*; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author TheElk801 */ public final class KirtarsDesire extends CardImpl { @@ -43,8 +37,9 @@ public final class KirtarsDesire extends CardImpl { this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantAttackAttachedEffect(AttachmentType.AURA))); // Threshold - Enchanted creature can't block as long as seven or more cards are in your graveyard. - ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new CantAttackBlockAttachedEffect(AttachmentType.AURA), new CardsInControllerGraveCondition(7), + ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalRestrictionEffect( + new CantAttackBlockAttachedEffect(AttachmentType.AURA), + new CardsInControllerGraveCondition(7), "Enchanted creature can't block as long as seven or more cards are in your graveyard")); ability.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/o/OtarianJuggernaut.java b/Mage.Sets/src/mage/cards/o/OtarianJuggernaut.java index 3a5f723f346..39369dff34d 100644 --- a/Mage.Sets/src/mage/cards/o/OtarianJuggernaut.java +++ b/Mage.Sets/src/mage/cards/o/OtarianJuggernaut.java @@ -1,29 +1,24 @@ - package mage.cards.o; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleEvasionAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.common.CardsInControllerGraveCondition; import mage.abilities.decorator.ConditionalContinuousEffect; -import mage.abilities.effects.Effect; +import mage.abilities.decorator.ConditionalRequirementEffect; import mage.abilities.effects.common.combat.AttacksIfAbleSourceEffect; import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; -import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.AbilityWord; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.*; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.SubtypePredicate; +import java.util.UUID; + /** - * * @author TheElk801 */ public final class OtarianJuggernaut extends CardImpl { @@ -49,12 +44,11 @@ public final class OtarianJuggernaut extends CardImpl { new BoostSourceEffect(3, 0, Duration.WhileOnBattlefield), new CardsInControllerGraveCondition(7), "As long as seven or more cards are in your graveyard, {this} gets +3/+0")); - Effect effect = new ConditionalContinuousEffect( + ability.addEffect(new ConditionalRequirementEffect( new AttacksIfAbleSourceEffect(Duration.WhileOnBattlefield, true), new CardsInControllerGraveCondition(7), "and attacks each combat if able" - ); - ability.addEffect(effect); + )); ability.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/StoneTongueBasilisk.java b/Mage.Sets/src/mage/cards/s/StoneTongueBasilisk.java index d26774fce18..a64a30f7459 100644 --- a/Mage.Sets/src/mage/cards/s/StoneTongueBasilisk.java +++ b/Mage.Sets/src/mage/cards/s/StoneTongueBasilisk.java @@ -1,14 +1,12 @@ - package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.DealsCombatDamageToACreatureTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; import mage.abilities.condition.common.CardsInControllerGraveCondition; -import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.decorator.ConditionalRequirementEffect; import mage.abilities.effects.Effect; import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; import mage.abilities.effects.common.DestroyTargetEffect; @@ -20,14 +18,15 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; +import java.util.UUID; + /** - * * @author fireshoes */ public final class StoneTongueBasilisk extends CardImpl { public StoneTongueBasilisk(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{G}{G}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}{G}{G}"); this.subtype.add(SubType.BASILISK); this.power = new MageInt(4); this.toughness = new MageInt(5); @@ -39,9 +38,11 @@ public final class StoneTongueBasilisk extends CardImpl { this.addAbility(new DealsCombatDamageToACreatureTriggeredAbility(effect, false, true)); // Threshold - As long as seven or more cards are in your graveyard, all creatures able to block Stone-Tongue Basilisk do so. - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new MustBeBlockedByAllSourceEffect(), new CardsInControllerGraveCondition(7), - "As long as seven or more cards are in your graveyard, all creatures able to block {this} do so")); + Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalRequirementEffect( + new MustBeBlockedByAllSourceEffect(), + new CardsInControllerGraveCondition(7), + "As long as seven or more cards are in your graveyard, all creatures able to block {this} do so" + )); ability.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(ability); } diff --git a/Mage/src/main/java/mage/abilities/decorator/ConditionalContinuousEffect.java b/Mage/src/main/java/mage/abilities/decorator/ConditionalContinuousEffect.java index 254f20dd03e..df8c2f51e57 100644 --- a/Mage/src/main/java/mage/abilities/decorator/ConditionalContinuousEffect.java +++ b/Mage/src/main/java/mage/abilities/decorator/ConditionalContinuousEffect.java @@ -49,11 +49,12 @@ public class ConditionalContinuousEffect extends ContinuousEffectImpl { this.staticText = text; // checks for compatibility - if (effect != null && !effect.getEffectType().equals(EffectType.CONTINUOUS)) { - Assert.fail("ConditionalContinuousEffect supports only " + EffectType.CONTINUOUS.toString() + " but found " + effect.getEffectType().toString()); + EffectType needType = EffectType.CONTINUOUS; + if (effect != null && !effect.getEffectType().equals(needType)) { + Assert.fail("ConditionalContinuousEffect supports only " + needType.toString() + " but found " + effect.getEffectType().toString()); } - if (otherwiseEffect != null && !otherwiseEffect.getEffectType().equals(EffectType.CONTINUOUS)) { - Assert.fail("ConditionalContinuousEffect supports only " + EffectType.CONTINUOUS.toString() + " but found " + effect.getEffectType().toString()); + if (otherwiseEffect != null && !otherwiseEffect.getEffectType().equals(needType)) { + Assert.fail("ConditionalContinuousEffect supports only " + needType.toString() + " but found " + effect.getEffectType().toString()); } if (effect != null && otherwiseEffect != null && !effect.getEffectType().equals(otherwiseEffect.getEffectType())) { Assert.fail("ConditionalContinuousEffect must be same but found " + effect.getEffectType().toString() + " and " + otherwiseEffect.getEffectType().toString()); diff --git a/Mage/src/main/java/mage/abilities/decorator/ConditionalRequirementEffect.java b/Mage/src/main/java/mage/abilities/decorator/ConditionalRequirementEffect.java index 5ebe3b61720..148be62172d 100644 --- a/Mage/src/main/java/mage/abilities/decorator/ConditionalRequirementEffect.java +++ b/Mage/src/main/java/mage/abilities/decorator/ConditionalRequirementEffect.java @@ -1,7 +1,5 @@ - package mage.abilities.decorator; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.condition.Condition; import mage.abilities.condition.FixedCondition; @@ -12,12 +10,13 @@ import mage.constants.EffectType; import mage.game.Game; import mage.game.permanent.Permanent; +import java.util.UUID; + /** - * * @author LevelX2 */ -public class ConditionalRequirementEffect extends RequirementEffect { +public class ConditionalRequirementEffect extends RequirementEffect { protected RequirementEffect effect; protected RequirementEffect otherwiseEffect; @@ -27,7 +26,14 @@ public class ConditionalRequirementEffect extends RequirementEffect { protected boolean initDone = false; public ConditionalRequirementEffect(RequirementEffect effect, Condition condition) { - this(Duration.WhileOnBattlefield, effect, condition, null, false); + this(effect, condition, null); + } + + public ConditionalRequirementEffect(RequirementEffect effect, Condition condition, String text) { + this(effect.getDuration(), effect, condition, null, false); + if (text != null) { + setText(text); + } } public ConditionalRequirementEffect(Duration duration, RequirementEffect effect, Condition condition, RequirementEffect otherwiseEffect, boolean lockedInCondition) { @@ -75,7 +81,7 @@ public class ConditionalRequirementEffect extends RequirementEffect { conditionState = condition.apply(game, source); if (conditionState) { effect.setTargetPointer(this.targetPointer); - return effect.applies(permanent, source,game); + return effect.applies(permanent, source, game); } else if (otherwiseEffect != null) { otherwiseEffect.setTargetPointer(this.targetPointer); return otherwiseEffect.applies(permanent, source, game); @@ -138,7 +144,7 @@ public class ConditionalRequirementEffect extends RequirementEffect { } return null; } - + @Override public ConditionalRequirementEffect copy() { return new ConditionalRequirementEffect(this); diff --git a/Mage/src/main/java/mage/abilities/decorator/ConditionalRestrictionEffect.java b/Mage/src/main/java/mage/abilities/decorator/ConditionalRestrictionEffect.java index 5f1e6318d58..f9dec0248a3 100644 --- a/Mage/src/main/java/mage/abilities/decorator/ConditionalRestrictionEffect.java +++ b/Mage/src/main/java/mage/abilities/decorator/ConditionalRestrictionEffect.java @@ -22,14 +22,25 @@ public class ConditionalRestrictionEffect extends RestrictionEffect { protected boolean initDone = false; public ConditionalRestrictionEffect(RestrictionEffect effect, Condition condition) { - this(Duration.WhileOnBattlefield, effect, condition, null); + this(effect, condition, null); + } + + public ConditionalRestrictionEffect(RestrictionEffect effect, Condition condition, String text) { + this(effect.getDuration(), effect, condition, null, text); } public ConditionalRestrictionEffect(Duration duration, RestrictionEffect effect, Condition condition, RestrictionEffect otherwiseEffect) { + this(duration, effect, condition, otherwiseEffect, null); + } + + public ConditionalRestrictionEffect(Duration duration, RestrictionEffect effect, Condition condition, RestrictionEffect otherwiseEffect, String text) { super(duration); this.effect = effect; this.baseCondition = condition; this.otherwiseEffect = otherwiseEffect; + if (text != null) { + this.setText(text); + } } public ConditionalRestrictionEffect(final ConditionalRestrictionEffect effect) {