diff --git a/Mage.Sets/src/mage/cards/b/BronzeCudgels.java b/Mage.Sets/src/mage/cards/b/BronzeCudgels.java new file mode 100644 index 00000000000..38271c07071 --- /dev/null +++ b/Mage.Sets/src/mage/cards/b/BronzeCudgels.java @@ -0,0 +1,82 @@ +package mage.cards.b; + +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.hint.common.AbilityResolutionCountHint; +import mage.abilities.keyword.EquipAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.targetpointer.FixedTarget; +import mage.watchers.common.AbilityResolvedWatcher; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class BronzeCudgels extends CardImpl { + + public BronzeCudgels(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}"); + + this.subtype.add(SubType.EQUIPMENT); + + // {2}: Equipped creature gets +X/+0 until end of turn, where X is the number of times this ability has resolved this turn. + this.addAbility(new SimpleActivatedAbility( + new BronzeCudgelsEffect(), new GenericManaCost(2) + ).addHint(AbilityResolutionCountHint.instance), new AbilityResolvedWatcher()); + + // Equip {1} + this.addAbility(new EquipAbility(1)); + } + + private BronzeCudgels(final BronzeCudgels card) { + super(card); + } + + @Override + public BronzeCudgels copy() { + return new BronzeCudgels(this); + } +} + +class BronzeCudgelsEffect extends OneShotEffect { + + BronzeCudgelsEffect() { + super(Outcome.Benefit); + staticText = "equipped creature gets +X/+0 until end of turn, " + + "where X is the number of times this ability has resolved this turn"; + } + + private BronzeCudgelsEffect(final BronzeCudgelsEffect effect) { + super(effect); + } + + @Override + public BronzeCudgelsEffect copy() { + return new BronzeCudgelsEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = source.getSourcePermanentOrLKI(game); + if (permanent == null || game.getPermanent(permanent.getAttachedTo()) == null) { + return false; + } + int resolvedCount = AbilityResolvedWatcher.getResolutionCount(game, source); + if (resolvedCount < 1) { + return false; + } + game.addEffect(new BoostTargetEffect(resolvedCount, 0) + .setTargetPointer(new FixedTarget(permanent.getOwnerId(), game)), source); + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/KamigawaNeonDynasty.java b/Mage.Sets/src/mage/sets/KamigawaNeonDynasty.java index 0276fbb0559..4ecae786535 100644 --- a/Mage.Sets/src/mage/sets/KamigawaNeonDynasty.java +++ b/Mage.Sets/src/mage/sets/KamigawaNeonDynasty.java @@ -56,6 +56,7 @@ public final class KamigawaNeonDynasty extends ExpansionSet { cards.add(new SetCardInfo("Boseiju Reaches Skyward", 177, Rarity.UNCOMMON, mage.cards.b.BoseijuReachesSkyward.class)); cards.add(new SetCardInfo("Branch of Boseiju", 177, Rarity.UNCOMMON, mage.cards.b.BranchOfBoseiju.class)); cards.add(new SetCardInfo("Brilliant Restoration", 7, Rarity.RARE, mage.cards.b.BrilliantRestoration.class)); + cards.add(new SetCardInfo("Bronze Cudgels", 240, Rarity.UNCOMMON, mage.cards.b.BronzeCudgels.class)); cards.add(new SetCardInfo("Bronzeplate Boar", 135, Rarity.UNCOMMON, mage.cards.b.BronzeplateBoar.class)); cards.add(new SetCardInfo("Brute Suit", 241, Rarity.COMMON, mage.cards.b.BruteSuit.class)); cards.add(new SetCardInfo("Careful Cultivation", 178, Rarity.COMMON, mage.cards.c.CarefulCultivation.class)); diff --git a/Mage/src/main/java/mage/abilities/dynamicvalue/common/AbilityResolutionCount.java b/Mage/src/main/java/mage/abilities/dynamicvalue/common/AbilityResolutionCount.java index b2fcb80e221..97a607f09b8 100644 --- a/Mage/src/main/java/mage/abilities/dynamicvalue/common/AbilityResolutionCount.java +++ b/Mage/src/main/java/mage/abilities/dynamicvalue/common/AbilityResolutionCount.java @@ -15,11 +15,7 @@ public enum AbilityResolutionCount implements DynamicValue { @Override public int calculate(Game game, Ability sourceAbility, Effect effect) { - AbilityResolvedWatcher watcher = game.getState().getWatcher(AbilityResolvedWatcher.class); - if (watcher != null) { - return watcher.getResolutionCount(game, sourceAbility); - } - return 0; + return AbilityResolvedWatcher.getResolutionCount(game, sourceAbility); } @Override diff --git a/Mage/src/main/java/mage/abilities/effects/common/IfAbilityHasResolvedXTimesEffect.java b/Mage/src/main/java/mage/abilities/effects/common/IfAbilityHasResolvedXTimesEffect.java index 21814f17ec3..b4dca380e03 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/IfAbilityHasResolvedXTimesEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/IfAbilityHasResolvedXTimesEffect.java @@ -38,15 +38,13 @@ public class IfAbilityHasResolvedXTimesEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - AbilityResolvedWatcher watcher = game.getState().getWatcher(AbilityResolvedWatcher.class); - if (watcher != null && watcher.getResolutionCount(game, source) == resolutionNumber) { - if (effect instanceof OneShotEffect) { - return effect.apply(game, source); - } else { - game.addEffect((ContinuousEffect) effect, source); - return true; - } + if (AbilityResolvedWatcher.getResolutionCount(game, source) != resolutionNumber) { + return true; } + if (effect instanceof OneShotEffect) { + return effect.apply(game, source); + } + game.addEffect((ContinuousEffect) effect, source); return true; } } diff --git a/Mage/src/main/java/mage/watchers/common/AbilityResolvedWatcher.java b/Mage/src/main/java/mage/watchers/common/AbilityResolvedWatcher.java index 953e4d64df1..fd65767ad3d 100644 --- a/Mage/src/main/java/mage/watchers/common/AbilityResolvedWatcher.java +++ b/Mage/src/main/java/mage/watchers/common/AbilityResolvedWatcher.java @@ -33,7 +33,11 @@ public class AbilityResolvedWatcher extends Watcher { resolutionMap.clear(); } - public int getResolutionCount(Game game, Ability source) { - return resolutionMap.getOrDefault(source.getOriginalId().toString() + game.getState().getZoneChangeCounter(source.getSourceId()), 0); + public static int getResolutionCount(Game game, Ability source) { + return game + .getState() + .getWatcher(AbilityResolvedWatcher.class) + .resolutionMap + .getOrDefault(source.getOriginalId().toString() + game.getState().getZoneChangeCounter(source.getSourceId()), 0); } }