From 78f3547644f5bc9ad6db468ae77b244d2cf8cd83 Mon Sep 17 00:00:00 2001 From: Alex Vasile <48962821+Alex-Vasile@users.noreply.github.com> Date: Mon, 4 Jul 2022 20:28:54 -0400 Subject: [PATCH] Added common interface to conditional effects (#9208) --- .../decorator/ConditionalAsThoughEffect.java | 5 +++++ .../decorator/ConditionalContinuousEffect.java | 5 +++++ .../ConditionalContinuousRuleModifyingEffect.java | 4 ++++ .../ConditionalCostModificationEffect.java | 5 +++++ .../decorator/ConditionalManaEffect.java | 5 +++++ .../decorator/ConditionalOneShotEffect.java | 5 +++++ .../decorator/ConditionalPreventionEffect.java | 4 ++++ .../decorator/ConditionalReplacementEffect.java | 7 ++++++- .../decorator/ConditionalRequirementEffect.java | 4 ++++ .../decorator/ConditionalRestrictionEffect.java | 4 ++++ .../main/java/mage/abilities/effects/Effect.java | 15 +++++++++++++++ 11 files changed, 62 insertions(+), 1 deletion(-) diff --git a/Mage/src/main/java/mage/abilities/decorator/ConditionalAsThoughEffect.java b/Mage/src/main/java/mage/abilities/decorator/ConditionalAsThoughEffect.java index fdaee170b57..b14de28c140 100644 --- a/Mage/src/main/java/mage/abilities/decorator/ConditionalAsThoughEffect.java +++ b/Mage/src/main/java/mage/abilities/decorator/ConditionalAsThoughEffect.java @@ -95,4 +95,9 @@ public class ConditionalAsThoughEffect extends AsThoughEffectImpl { public ConditionalAsThoughEffect copy() { return new ConditionalAsThoughEffect(this); } + + @Override + public Condition getCondition() { + return condition; + } } diff --git a/Mage/src/main/java/mage/abilities/decorator/ConditionalContinuousEffect.java b/Mage/src/main/java/mage/abilities/decorator/ConditionalContinuousEffect.java index d3600a01f88..bf6f98ae752 100644 --- a/Mage/src/main/java/mage/abilities/decorator/ConditionalContinuousEffect.java +++ b/Mage/src/main/java/mage/abilities/decorator/ConditionalContinuousEffect.java @@ -192,4 +192,9 @@ public class ConditionalContinuousEffect extends ContinuousEffectImpl { if (this.otherwiseEffect != null) res.add(this.otherwiseEffect); return res; } + + @Override + public Condition getCondition() { + return condition; + } } diff --git a/Mage/src/main/java/mage/abilities/decorator/ConditionalContinuousRuleModifyingEffect.java b/Mage/src/main/java/mage/abilities/decorator/ConditionalContinuousRuleModifyingEffect.java index e6b1e6134d4..544baee2d80 100644 --- a/Mage/src/main/java/mage/abilities/decorator/ConditionalContinuousRuleModifyingEffect.java +++ b/Mage/src/main/java/mage/abilities/decorator/ConditionalContinuousRuleModifyingEffect.java @@ -125,4 +125,8 @@ public class ConditionalContinuousRuleModifyingEffect extends ContinuousRuleModi return effect.getInfoMessage(source, event, game); //To change body of generated methods, choose Tools | Templates. } + @Override + public Condition getCondition() { + return condition; + } } diff --git a/Mage/src/main/java/mage/abilities/decorator/ConditionalCostModificationEffect.java b/Mage/src/main/java/mage/abilities/decorator/ConditionalCostModificationEffect.java index cecf01c6245..f11f49c280d 100644 --- a/Mage/src/main/java/mage/abilities/decorator/ConditionalCostModificationEffect.java +++ b/Mage/src/main/java/mage/abilities/decorator/ConditionalCostModificationEffect.java @@ -83,4 +83,9 @@ public class ConditionalCostModificationEffect extends CostModificationEffectImp public ConditionalCostModificationEffect copy() { return new ConditionalCostModificationEffect(this); } + + @Override + public Condition getCondition() { + return condition; + } } diff --git a/Mage/src/main/java/mage/abilities/decorator/ConditionalManaEffect.java b/Mage/src/main/java/mage/abilities/decorator/ConditionalManaEffect.java index a316f088445..db084c3d4a2 100644 --- a/Mage/src/main/java/mage/abilities/decorator/ConditionalManaEffect.java +++ b/Mage/src/main/java/mage/abilities/decorator/ConditionalManaEffect.java @@ -85,4 +85,9 @@ public class ConditionalManaEffect extends ManaEffect { } return mana; } + + @Override + public Condition getCondition() { + return condition; + } } diff --git a/Mage/src/main/java/mage/abilities/decorator/ConditionalOneShotEffect.java b/Mage/src/main/java/mage/abilities/decorator/ConditionalOneShotEffect.java index d6ea8e16aff..d753ecc6652 100644 --- a/Mage/src/main/java/mage/abilities/decorator/ConditionalOneShotEffect.java +++ b/Mage/src/main/java/mage/abilities/decorator/ConditionalOneShotEffect.java @@ -82,4 +82,9 @@ public class ConditionalOneShotEffect extends OneShotEffect { } return effects.getText(mode) + ". If " + condition.toString() + ", " + otherwiseEffects.getText(mode); } + + @Override + public Condition getCondition() { + return condition; + } } diff --git a/Mage/src/main/java/mage/abilities/decorator/ConditionalPreventionEffect.java b/Mage/src/main/java/mage/abilities/decorator/ConditionalPreventionEffect.java index ec256f06dc0..8ce12380a6e 100644 --- a/Mage/src/main/java/mage/abilities/decorator/ConditionalPreventionEffect.java +++ b/Mage/src/main/java/mage/abilities/decorator/ConditionalPreventionEffect.java @@ -137,4 +137,8 @@ public class ConditionalPreventionEffect extends PreventionEffectImpl { return new ConditionalPreventionEffect(this); } + @Override + public Condition getCondition() { + return condition; + } } diff --git a/Mage/src/main/java/mage/abilities/decorator/ConditionalReplacementEffect.java b/Mage/src/main/java/mage/abilities/decorator/ConditionalReplacementEffect.java index 39e89d7d640..eaf41183873 100644 --- a/Mage/src/main/java/mage/abilities/decorator/ConditionalReplacementEffect.java +++ b/Mage/src/main/java/mage/abilities/decorator/ConditionalReplacementEffect.java @@ -16,7 +16,7 @@ import mage.game.events.GameEvent; * * @author LevelX2 */ -public class ConditionalReplacementEffect extends ReplacementEffectImpl { +public class ConditionalReplacementEffect extends ReplacementEffectImpl { protected ReplacementEffect effect; protected ReplacementEffect otherwiseEffect; @@ -127,4 +127,9 @@ public class ConditionalReplacementEffect extends ReplacementEffectImpl { public ConditionalReplacementEffect copy() { return new ConditionalReplacementEffect(this); } + + @Override + public Condition getCondition() { + return condition; + } } diff --git a/Mage/src/main/java/mage/abilities/decorator/ConditionalRequirementEffect.java b/Mage/src/main/java/mage/abilities/decorator/ConditionalRequirementEffect.java index 148be62172d..dc459582448 100644 --- a/Mage/src/main/java/mage/abilities/decorator/ConditionalRequirementEffect.java +++ b/Mage/src/main/java/mage/abilities/decorator/ConditionalRequirementEffect.java @@ -150,4 +150,8 @@ public class ConditionalRequirementEffect extends RequirementEffect { return new ConditionalRequirementEffect(this); } + @Override + public Condition getCondition() { + return condition; + } } diff --git a/Mage/src/main/java/mage/abilities/decorator/ConditionalRestrictionEffect.java b/Mage/src/main/java/mage/abilities/decorator/ConditionalRestrictionEffect.java index f9dec0248a3..ae3f65c15d3 100644 --- a/Mage/src/main/java/mage/abilities/decorator/ConditionalRestrictionEffect.java +++ b/Mage/src/main/java/mage/abilities/decorator/ConditionalRestrictionEffect.java @@ -149,4 +149,8 @@ public class ConditionalRestrictionEffect extends RestrictionEffect { return new ConditionalRestrictionEffect(this); } + @Override + public Condition getCondition() { + return condition; + } } diff --git a/Mage/src/main/java/mage/abilities/effects/Effect.java b/Mage/src/main/java/mage/abilities/effects/Effect.java index f2ca86097c3..60e57c9f887 100644 --- a/Mage/src/main/java/mage/abilities/effects/Effect.java +++ b/Mage/src/main/java/mage/abilities/effects/Effect.java @@ -2,6 +2,7 @@ package mage.abilities.effects; import mage.abilities.Ability; import mage.abilities.Mode; +import mage.abilities.condition.Condition; import mage.constants.EffectType; import mage.constants.Outcome; import mage.game.Game; @@ -67,4 +68,18 @@ public interface Effect extends Serializable, Copyable { Effect concatBy(String concatPrefix); String getConcatPrefix(); + + /** + * Used to check if this is a conditional version without needed any Java reflection hacks or chained instanceof checks. + * Only conditions on the activation of the ability are checked, and not on how the effects can be used. + * E.g. For a conditional mana ability this will only return the condition under which it can be activated, + * and NOT the conditions on the mane produced. + * + * Assumed that if the returned condition is null then this is not a conditional version, or that it does not matter. + * + * @return + */ + public default Condition getCondition() { + return null; + } }