From 562bd9ffebf87079dc8a703eb4a2b9b8ff75846d Mon Sep 17 00:00:00 2001 From: theelk801 Date: Wed, 4 Jun 2025 08:35:08 -0400 Subject: [PATCH] rework some effects to use CardUtil::getEffectValueFromAbility --- .../src/mage/cards/b/BladeOfSharedSouls.java | 16 +++++++-------- Mage.Sets/src/mage/cards/b/BoxingRing.java | 19 +++++------------- .../src/mage/cards/d/DranaAndLinvala.java | 10 ++++------ Mage.Sets/src/mage/cards/d/DrizztDoUrden.java | 16 +++++++-------- .../src/mage/cards/e/EshkiTemursRoar.java | 12 ++++------- .../src/mage/cards/f/FaridehDevilsChosen.java | 13 +++++------- .../src/mage/cards/h/HammerheadTyrant.java | 17 ++++------------ .../cards/j/JensonCarthalionDruidExile.java | 17 +++++++--------- .../src/mage/cards/r/RiveteersAscendancy.java | 20 ++++++------------- Mage.Sets/src/mage/cards/s/SchemingFence.java | 10 +++------- .../src/mage/cards/s/SharpEyedRookie.java | 17 +++++++--------- .../src/mage/cards/w/WeatherseedTotem.java | 11 ++++------ .../abilities/keyword/ConspireAbility.java | 11 +++------- .../mage/abilities/keyword/EvolveAbility.java | 17 +++++++--------- 14 files changed, 74 insertions(+), 132 deletions(-) diff --git a/Mage.Sets/src/mage/cards/b/BladeOfSharedSouls.java b/Mage.Sets/src/mage/cards/b/BladeOfSharedSouls.java index 1331a8007bd..e4074b2f5a1 100644 --- a/Mage.Sets/src/mage/cards/b/BladeOfSharedSouls.java +++ b/Mage.Sets/src/mage/cards/b/BladeOfSharedSouls.java @@ -20,6 +20,7 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.TargetPermanent; +import mage.util.CardUtil; import java.util.UUID; @@ -67,14 +68,11 @@ enum BladeOfSharedSoulsPredicate implements ObjectSourcePlayerPredicate input, Game game) { - return input.getSource() - .getEffects() - .stream() - .map(effect -> effect.getValue("attachedPermanent")) - .filter(Permanent.class::isInstance) - .map(Permanent.class::cast) - .noneMatch(permanent -> input.getObject().getId().equals(permanent.getId()) - && input.getObject().getZoneChangeCounter(game) == permanent.getZoneChangeCounter(game)); + return !CardUtil + .getEffectValueFromAbility(input.getSource(), "attachedPermanent", Permanent.class) + .filter(permanent -> input.getObject().getId().equals(permanent.getId()) + && input.getObject().getZoneChangeCounter(game) == permanent.getZoneChangeCounter(game)) + .isPresent(); } } @@ -141,4 +139,4 @@ class BladeOfSharedSoulsCopyEffect extends CopyEffect { } return false; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/b/BoxingRing.java b/Mage.Sets/src/mage/cards/b/BoxingRing.java index 84ffb7d9453..9c9fbb84a4a 100644 --- a/Mage.Sets/src/mage/cards/b/BoxingRing.java +++ b/Mage.Sets/src/mage/cards/b/BoxingRing.java @@ -14,7 +14,6 @@ import mage.cards.CardSetInfo; import mage.constants.*; import mage.filter.FilterPermanent; import mage.filter.StaticFilters; -import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.ObjectSourcePlayer; import mage.filter.predicate.ObjectSourcePlayerPredicate; @@ -23,10 +22,10 @@ import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import mage.game.permanent.token.TreasureToken; import mage.target.TargetPermanent; +import mage.util.CardUtil; import mage.watchers.Watcher; import java.util.HashSet; -import java.util.Objects; import java.util.Set; import java.util.UUID; @@ -75,19 +74,11 @@ enum BoxingRingPredicate implements ObjectSourcePlayerPredicate { @Override public boolean apply(ObjectSourcePlayer input, Game game) { - return input - .getObject() - .getManaValue() - == input - .getSource() - .getEffects() - .stream() - .map(effect -> effect.getValue("permanentEnteringBattlefield")) - .map(Permanent.class::cast) - .filter(Objects::nonNull) + return CardUtil + .getEffectValueFromAbility(input.getSource(), "permanentEnteringBattlefield", Permanent.class) .map(MageObject::getManaValue) - .findFirst() - .orElse(-1); + .filter(x -> x == input.getObject().getManaValue()) + .isPresent(); } } diff --git a/Mage.Sets/src/mage/cards/d/DranaAndLinvala.java b/Mage.Sets/src/mage/cards/d/DranaAndLinvala.java index 021f6aca581..bf8c376bb13 100644 --- a/Mage.Sets/src/mage/cards/d/DranaAndLinvala.java +++ b/Mage.Sets/src/mage/cards/d/DranaAndLinvala.java @@ -162,12 +162,10 @@ class DranaAndLinvalaManaEffect extends AsThoughEffectImpl implements AsThoughMa return CardUtil .getMainCardId(game, objectId) .equals(source.getSourceId()) - && affectedAbility - .getEffects() - .stream() - .map(effect -> effect.getValue("dranaLinvalaFlag")) - .filter(Boolean.class::isInstance) - .anyMatch(Boolean.class::cast) + && CardUtil + .getEffectValueFromAbility( + affectedAbility, "dranaLinvalaFlag", Boolean.class + ).orElse(false) && source.isControlledBy(playerId); } diff --git a/Mage.Sets/src/mage/cards/d/DrizztDoUrden.java b/Mage.Sets/src/mage/cards/d/DrizztDoUrden.java index 4904c140f5f..ec84d0ca805 100644 --- a/Mage.Sets/src/mage/cards/d/DrizztDoUrden.java +++ b/Mage.Sets/src/mage/cards/d/DrizztDoUrden.java @@ -1,6 +1,7 @@ package mage.cards.d; import mage.MageInt; +import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.DiesCreatureTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -19,6 +20,7 @@ import mage.counters.CounterType; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.permanent.token.GuenhwyvarToken; +import mage.util.CardUtil; import java.util.UUID; @@ -66,15 +68,13 @@ enum DrizztDoUrdenCondition implements Condition { @Override public boolean apply(Game game, Ability source) { Permanent sourcePermanent = source.getSourcePermanentOrLKI(game); - Permanent creatureDied = (Permanent) source - .getEffects() - .stream() - .map(effect -> effect.getValue("creatureDied")) - .findFirst() - .orElse(null); return sourcePermanent != null - && creatureDied != null - && creatureDied.getPower().getValue() > sourcePermanent.getPower().getValue(); + && CardUtil + .getEffectValueFromAbility(source, "creatureDied", Permanent.class) + .map(MageObject::getPower) + .map(MageInt::getValue) + .filter(x -> sourcePermanent.getPower().getValue() < x) + .isPresent(); } } diff --git a/Mage.Sets/src/mage/cards/e/EshkiTemursRoar.java b/Mage.Sets/src/mage/cards/e/EshkiTemursRoar.java index 2e8c907d1ef..ca711ba0931 100644 --- a/Mage.Sets/src/mage/cards/e/EshkiTemursRoar.java +++ b/Mage.Sets/src/mage/cards/e/EshkiTemursRoar.java @@ -75,15 +75,11 @@ enum EshkiTemursRoarCondition implements Condition { @Override public boolean apply(Game game, Ability source) { - return CardUtil.castStream( - source.getEffects() - .stream() - .map(effect -> effect.getValue("spellCast")), - Spell.class - ) - .findFirst() + return CardUtil + .getEffectValueFromAbility(source, "spellCast", Spell.class) .map(Spell::getPower) .map(MageInt::getValue) - .orElse(0) >= amount; + .filter(x -> x >= amount) + .isPresent(); } } diff --git a/Mage.Sets/src/mage/cards/f/FaridehDevilsChosen.java b/Mage.Sets/src/mage/cards/f/FaridehDevilsChosen.java index f9ff066ec65..73642c06f44 100644 --- a/Mage.Sets/src/mage/cards/f/FaridehDevilsChosen.java +++ b/Mage.Sets/src/mage/cards/f/FaridehDevilsChosen.java @@ -16,8 +16,8 @@ import mage.constants.Duration; import mage.constants.SubType; import mage.constants.SuperType; import mage.game.Game; +import mage.util.CardUtil; -import java.util.Objects; import java.util.UUID; /** @@ -65,12 +65,9 @@ enum FaridehDevilsChosenCondition implements Condition { @Override public boolean apply(Game game, Ability source) { - return source - .getEffects() - .stream() - .map(effect -> effect.getValue("maxDieRoll")) - .filter(Objects::nonNull) - .mapToInt(Integer.class::cast) - .anyMatch(x -> x >= 10); + return CardUtil + .getEffectValueFromAbility(source, "maxDieRoll", Integer.class) + .filter(x -> x >= 10) + .isPresent(); } } diff --git a/Mage.Sets/src/mage/cards/h/HammerheadTyrant.java b/Mage.Sets/src/mage/cards/h/HammerheadTyrant.java index 0e10903c3a9..eab93495e3e 100644 --- a/Mage.Sets/src/mage/cards/h/HammerheadTyrant.java +++ b/Mage.Sets/src/mage/cards/h/HammerheadTyrant.java @@ -70,19 +70,10 @@ enum HammerheadTyrantPredicate implements ObjectSourcePlayerPredicate @Override public boolean apply(ObjectSourcePlayer input, Game game) { - return input - .getObject() - .getManaValue() - <= CardUtil - .castStream( - input.getSource() - .getEffects() - .stream() - .map(effect -> effect.getValue("spellCast")), - Spell.class - ) - .findFirst() + return CardUtil + .getEffectValueFromAbility(input.getSource(), "spellCast", Spell.class) .map(Spell::getManaValue) - .orElse(-1); + .filter(x -> x >= input.getObject().getManaValue()) + .isPresent(); } } diff --git a/Mage.Sets/src/mage/cards/j/JensonCarthalionDruidExile.java b/Mage.Sets/src/mage/cards/j/JensonCarthalionDruidExile.java index f5da11bd7c5..c78364cd08b 100644 --- a/Mage.Sets/src/mage/cards/j/JensonCarthalionDruidExile.java +++ b/Mage.Sets/src/mage/cards/j/JensonCarthalionDruidExile.java @@ -2,6 +2,7 @@ package mage.cards.j; import mage.MageInt; import mage.Mana; +import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.condition.Condition; @@ -23,7 +24,6 @@ import mage.game.permanent.token.AngelVigilanceToken; import mage.game.stack.Spell; import mage.util.CardUtil; -import java.util.Objects; import java.util.UUID; /** @@ -72,15 +72,12 @@ enum JensonCarthalionDruidExileCondition implements Condition { @Override public boolean apply(Game game, Ability source) { - return CardUtil.castStream( - source.getEffects() - .stream() - .map(effect -> effect.getValue("spellCast")), - Spell.class - ).findAny() - .filter(Objects::nonNull) - .map(spell -> spell.getColor(game).getColorCount()) - .orElse(0) >= 5; + return CardUtil + .getEffectValueFromAbility(source, "spellCast", Spell.class) + .map(spell -> spell.getColor(game)) + .map(ObjectColor::getColorCount) + .filter(x -> x >= 5) + .isPresent(); } @Override diff --git a/Mage.Sets/src/mage/cards/r/RiveteersAscendancy.java b/Mage.Sets/src/mage/cards/r/RiveteersAscendancy.java index 3876d87703f..0961a791324 100644 --- a/Mage.Sets/src/mage/cards/r/RiveteersAscendancy.java +++ b/Mage.Sets/src/mage/cards/r/RiveteersAscendancy.java @@ -16,8 +16,8 @@ import mage.filter.predicate.ObjectSourcePlayerPredicate; import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.common.TargetCardInYourGraveyard; +import mage.util.CardUtil; -import java.util.Objects; import java.util.UUID; /** @@ -59,18 +59,10 @@ enum RiveteersAscendancyPredicate implements ObjectSourcePlayerPredicate { @Override public boolean apply(ObjectSourcePlayer input, Game game) { - return input - .getObject() - .getManaValue() - < input - .getSource() - .getEffects() - .stream() - .map(effect -> effect.getValue("sacrificedPermanent")) - .filter(Objects::nonNull) - .map(Permanent.class::cast) - .mapToInt(MageObject::getManaValue) - .max() - .orElse(0); + return CardUtil + .getEffectValueFromAbility(input.getSource(), "sacrificedPermanent", Permanent.class) + .map(MageObject::getManaValue) + .filter(x -> input.getObject().getManaValue() < x) + .isPresent(); } } diff --git a/Mage.Sets/src/mage/cards/s/SchemingFence.java b/Mage.Sets/src/mage/cards/s/SchemingFence.java index ae9cff75262..a71d64c5199 100644 --- a/Mage.Sets/src/mage/cards/s/SchemingFence.java +++ b/Mage.Sets/src/mage/cards/s/SchemingFence.java @@ -19,7 +19,6 @@ import mage.target.TargetPermanent; import mage.target.common.TargetNonlandPermanent; import mage.util.CardUtil; -import java.util.Objects; import java.util.Optional; import java.util.UUID; @@ -215,12 +214,9 @@ class SchemingFenceManaEffect extends AsThoughEffectImpl implements AsThoughMana @Override public boolean applies(UUID objectId, Ability affectedAbility, Ability source, Game game, UUID playerId) { return source.isControlledBy(playerId) - && affectedAbility - .getEffects() - .stream() - .map(effect -> effect.getValue("schemingFence")) - .filter(Objects::nonNull) - .anyMatch(source.getSourceId()::equals); + && CardUtil.getEffectValueFromAbility(affectedAbility, "schemingFence", UUID.class) + .filter(source.getSourceId()::equals) + .isPresent(); } @Override diff --git a/Mage.Sets/src/mage/cards/s/SharpEyedRookie.java b/Mage.Sets/src/mage/cards/s/SharpEyedRookie.java index c164cb2ccb1..ac0ed0df52a 100644 --- a/Mage.Sets/src/mage/cards/s/SharpEyedRookie.java +++ b/Mage.Sets/src/mage/cards/s/SharpEyedRookie.java @@ -14,6 +14,7 @@ import mage.counters.CounterType; import mage.filter.StaticFilters; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.util.CardUtil; import java.util.UUID; @@ -68,17 +69,13 @@ class SharpEyedRookieTriggeredAbility extends EntersBattlefieldAllTriggeredAbili @Override public boolean checkInterveningIfClause(Game game) { Permanent sourcePermanent = getSourcePermanentOrLKI(game); - Permanent permanentEntering = (Permanent) this - .getEffects() - .stream() - .map(effect -> effect.getValue("permanentEnteringBattlefield")) - .findFirst() - .orElse(null); return sourcePermanent != null - && permanentEntering != null && sourcePermanent.isCreature(game) - && permanentEntering.isCreature(game) - && (permanentEntering.getPower().getValue() > sourcePermanent.getPower().getValue() - || permanentEntering.getToughness().getValue() > sourcePermanent.getToughness().getValue()); + && CardUtil + .getEffectValueFromAbility(this, "permanentEnteringBattlefield", Permanent.class) + .filter(permanent -> permanent.isCreature(game)) + .filter(permanent -> sourcePermanent.getPower().getValue() < permanent.getPower().getValue() + || sourcePermanent.getToughness().getValue() < permanent.getToughness().getValue()) + .isPresent(); } } diff --git a/Mage.Sets/src/mage/cards/w/WeatherseedTotem.java b/Mage.Sets/src/mage/cards/w/WeatherseedTotem.java index ff2009b7210..7a7a03a5c22 100644 --- a/Mage.Sets/src/mage/cards/w/WeatherseedTotem.java +++ b/Mage.Sets/src/mage/cards/w/WeatherseedTotem.java @@ -17,8 +17,8 @@ import mage.constants.Duration; import mage.constants.SubType; import mage.game.Game; import mage.game.permanent.token.custom.CreatureToken; +import mage.util.CardUtil; -import java.util.Objects; import java.util.UUID; /** @@ -65,11 +65,8 @@ enum WeatherseedTotemCondition implements Condition { @Override public boolean apply(Game game, Ability source) { - return source - .getEffects() - .stream() - .map(effect -> effect.getValue("permanentWasCreature")) - .filter(Objects::nonNull) - .anyMatch(Boolean.class::cast); + return CardUtil + .getEffectValueFromAbility(source, "permanentWasCreature", Boolean.class) + .orElse(false); } } diff --git a/Mage/src/main/java/mage/abilities/keyword/ConspireAbility.java b/Mage/src/main/java/mage/abilities/keyword/ConspireAbility.java index 1fd68ab47dc..6349655d944 100644 --- a/Mage/src/main/java/mage/abilities/keyword/ConspireAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/ConspireAbility.java @@ -21,7 +21,6 @@ import mage.players.Player; import mage.target.common.TargetControlledPermanent; import mage.util.CardUtil; -import java.util.Objects; import java.util.UUID; /* @@ -188,13 +187,9 @@ class ConspireTriggeredAbility extends CastSourceTriggeredAbility { return false; } Spell spell = game.getStack().getSpell(event.getSourceId()); - return spell != null - && spell - .getSpellAbility() - .getAllEffects() - .stream() - .map(effect -> effect.getValue("ConspireActivation" + conspireId + addedById)) - .anyMatch(Objects::nonNull); + return spell != null && CardUtil.getEffectValueFromAbility( + spell.getSpellAbility(), "ConspireActivation" + conspireId + addedById, Boolean.class + ).orElse(false); } @Override diff --git a/Mage/src/main/java/mage/abilities/keyword/EvolveAbility.java b/Mage/src/main/java/mage/abilities/keyword/EvolveAbility.java index 09fb8dee62a..a80bb2c43ce 100644 --- a/Mage/src/main/java/mage/abilities/keyword/EvolveAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/EvolveAbility.java @@ -10,6 +10,7 @@ import mage.filter.StaticFilters; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; +import mage.util.CardUtil; /** * FAQ 2013/01/11 @@ -75,18 +76,14 @@ public class EvolveAbility extends EntersBattlefieldAllTriggeredAbility { @Override public boolean checkInterveningIfClause(Game game) { Permanent sourcePermanent = getSourcePermanentOrLKI(game); - Permanent permanentEntering = (Permanent) this - .getEffects() - .stream() - .map(effect -> effect.getValue("permanentEnteringBattlefield")) - .findFirst() - .orElse(null); return sourcePermanent != null - && permanentEntering != null && sourcePermanent.isCreature(game) - && permanentEntering.isCreature(game) - && (permanentEntering.getPower().getValue() > sourcePermanent.getPower().getValue() - || permanentEntering.getToughness().getValue() > sourcePermanent.getToughness().getValue()); + && CardUtil + .getEffectValueFromAbility(this, "permanentEnteringBattlefield", Permanent.class) + .filter(permanent -> permanent.isCreature(game)) + .filter(permanent -> sourcePermanent.getPower().getValue() < permanent.getPower().getValue() + || sourcePermanent.getToughness().getValue() < permanent.getToughness().getValue()) + .isPresent(); } @Override