diff --git a/Mage.Sets/src/mage/cards/a/AsajjVentress.java b/Mage.Sets/src/mage/cards/a/AsajjVentress.java index 41a67bfe0be..923dc483d22 100644 --- a/Mage.Sets/src/mage/cards/a/AsajjVentress.java +++ b/Mage.Sets/src/mage/cards/a/AsajjVentress.java @@ -39,7 +39,7 @@ public final class AsajjVentress extends CardImpl { this.addAbility(DoubleStrikeAbility.getInstance()); // When Asajj Ventress becomes blocked, she gets +1/+1 for each creature blocking her until end of turn. - BlockedCreatureCount value = new BlockedCreatureCount(); + BlockedCreatureCount value = BlockedCreatureCount.ALL; Effect effect = new BoostSourceEffect(value, value, Duration.EndOfTurn, true); effect.setText("she gets +1/+1 for each creature blocking her until end of turn"); this.addAbility(new BecomesBlockedSourceTriggeredAbility(effect, false)); diff --git a/Mage.Sets/src/mage/cards/b/BeastmastersMagemark.java b/Mage.Sets/src/mage/cards/b/BeastmastersMagemark.java index 9b1f1acd9ea..c001e1c1dbb 100644 --- a/Mage.Sets/src/mage/cards/b/BeastmastersMagemark.java +++ b/Mage.Sets/src/mage/cards/b/BeastmastersMagemark.java @@ -46,7 +46,7 @@ public final class BeastmastersMagemark extends CardImpl { ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostAllEffect(1, 1, Duration.WhileOnBattlefield, filter, false)); this.addAbility(ability); // Whenever a creature you control that's enchanted becomes blocked, it gets +1/+1 until end of turn for each creature blocking it. - BlockedCreatureCount value = new BlockedCreatureCount(); + BlockedCreatureCount value = BlockedCreatureCount.ALL; Effect effect = new BoostSourceEffect(value, value, Duration.EndOfTurn, true); effect.setText("it gets +1/+1 until end of turn for each creature blocking it"); this.addAbility(new BecomesBlockedAllTriggeredAbility(effect, false, filter, false)); diff --git a/Mage.Sets/src/mage/cards/b/BerserkMurlodont.java b/Mage.Sets/src/mage/cards/b/BerserkMurlodont.java index 405c8ee45c9..fe0d5d311d6 100644 --- a/Mage.Sets/src/mage/cards/b/BerserkMurlodont.java +++ b/Mage.Sets/src/mage/cards/b/BerserkMurlodont.java @@ -1,42 +1,42 @@ - package mage.cards.b; -import java.util.UUID; import mage.MageInt; +import mage.abilities.Ability; import mage.abilities.common.BecomesBlockedAllTriggeredAbility; -import mage.abilities.dynamicvalue.common.BlockedCreatureCount; -import mage.abilities.effects.Effect; -import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; +import mage.constants.Outcome; import mage.constants.SubType; import mage.filter.common.FilterCreaturePermanent; +import mage.game.Game; +import mage.game.combat.CombatGroup; +import mage.game.permanent.Permanent; +import mage.target.targetpointer.FixedTarget; + +import java.util.List; +import java.util.UUID; /** - * - * @author Markedagain + * @author TheElk801 */ public final class BerserkMurlodont extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a Beast"); - - static { - filter.add(SubType.BEAST.getPredicate()); - } + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(SubType.BEAST, "a Beast"); public BerserkMurlodont(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}"); this.subtype.add(SubType.BEAST); this.power = new MageInt(3); this.toughness = new MageInt(3); // Whenever a Beast becomes blocked, it gets +1/+1 until end of turn for each creature blocking it. - BlockedCreatureCount value = new BlockedCreatureCount(); - Effect effect = new BoostSourceEffect(value, value, Duration.EndOfTurn, true); - effect.setText("it gets +1/+1 until end of turn for each creature blocking it"); - this.addAbility(new BecomesBlockedAllTriggeredAbility(effect, false, filter, false)); + this.addAbility(new BecomesBlockedAllTriggeredAbility( + new BerserkMurlodontEffect(), false, filter, false + )); } private BerserkMurlodont(final BerserkMurlodont card) { @@ -48,3 +48,40 @@ public final class BerserkMurlodont extends CardImpl { return new BerserkMurlodont(this); } } + +class BerserkMurlodontEffect extends OneShotEffect { + + BerserkMurlodontEffect() { + super(Outcome.Benefit); + staticText = "it gets +1/+1 until end of turn for each creature blocking it"; + } + + private BerserkMurlodontEffect(final BerserkMurlodontEffect effect) { + super(effect); + } + + @Override + public BerserkMurlodontEffect copy() { + return new BerserkMurlodontEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source)); + if (permanent == null) { + return false; + } + int blockers = game + .getCombat() + .getGroups() + .stream() + .filter(combatGroup -> combatGroup.getAttackers().contains(permanent.getId())) + .map(CombatGroup::getBlockers) + .mapToInt(List::size) + .sum(); + game.addEffect(new BoostTargetEffect( + blockers, blockers, Duration.EndOfTurn + ).setTargetPointer(new FixedTarget(permanent, game)), source); + return true; + } +} diff --git a/Mage.Sets/src/mage/cards/e/ElvishBerserker.java b/Mage.Sets/src/mage/cards/e/ElvishBerserker.java index 339abbb6417..dad5d798c2c 100644 --- a/Mage.Sets/src/mage/cards/e/ElvishBerserker.java +++ b/Mage.Sets/src/mage/cards/e/ElvishBerserker.java @@ -27,7 +27,7 @@ public final class ElvishBerserker extends CardImpl { this.toughness = new MageInt(1); // Whenever Elvish Berserker becomes blocked, it gets +1/+1 until end of turn for each creature blocking it. - BlockedCreatureCount value = new BlockedCreatureCount(); + BlockedCreatureCount value = BlockedCreatureCount.ALL; Effect effect = new BoostSourceEffect(value, value, Duration.EndOfTurn, true); effect.setText("it gets +1/+1 until end of turn for each creature blocking it"); this.addAbility(new BecomesBlockedSourceTriggeredAbility(effect, false)); diff --git a/Mage.Sets/src/mage/cards/g/GangOfElk.java b/Mage.Sets/src/mage/cards/g/GangOfElk.java index e98635a64f6..a3d7acab61c 100644 --- a/Mage.Sets/src/mage/cards/g/GangOfElk.java +++ b/Mage.Sets/src/mage/cards/g/GangOfElk.java @@ -30,7 +30,7 @@ public final class GangOfElk extends CardImpl { this.toughness = new MageInt(4); // Whenever Gang of Elk becomes blocked, it gets +2/+2 until end of turn for each creature blocking it. - DynamicValue value = new MultipliedValue(new BlockedCreatureCount(), 2); + DynamicValue value = new MultipliedValue(BlockedCreatureCount.ALL, 2); Effect effect = new BoostSourceEffect(value, value, Duration.EndOfTurn, true); effect.setText("it gets +2/+2 until end of turn for each creature blocking it"); this.addAbility(new BecomesBlockedSourceTriggeredAbility(effect, false)); diff --git a/Mage.Sets/src/mage/cards/j/JohtullWurm.java b/Mage.Sets/src/mage/cards/j/JohtullWurm.java index a8ff605f273..48f94420e70 100644 --- a/Mage.Sets/src/mage/cards/j/JohtullWurm.java +++ b/Mage.Sets/src/mage/cards/j/JohtullWurm.java @@ -1,37 +1,37 @@ - package mage.cards.j; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.BecomesBlockedSourceTriggeredAbility; import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.MultipliedValue; import mage.abilities.dynamicvalue.common.BlockedCreatureCount; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; +import mage.constants.SubType; + +import java.util.UUID; /** - * * @author fireshoes */ public final class JohtullWurm extends CardImpl { + private static final DynamicValue xValue1 = new MultipliedValue(BlockedCreatureCount.BEYOND_FIRST, -2); + private static final DynamicValue xValue2 = new MultipliedValue(BlockedCreatureCount.BEYOND_FIRST, -1); + public JohtullWurm(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{G}"); this.subtype.add(SubType.WURM); this.power = new MageInt(6); this.toughness = new MageInt(6); // Whenever Johtull Wurm becomes blocked, it gets -2/-1 until end of turn for each creature blocking it beyond the first. - DynamicValue blockedCreatureCount = new BlockedCreatureCount("each creature blocking it beyond the first", true); - Effect effect = new BoostSourceEffect(new MultipliedValue(blockedCreatureCount, -2), new MultipliedValue(blockedCreatureCount, -1), Duration.EndOfTurn, true); - effect.setText("it gets -2/-1 until end of turn for each creature blocking it beyond the first"); - this.addAbility(new BecomesBlockedSourceTriggeredAbility(effect, false)); + this.addAbility(new BecomesBlockedSourceTriggeredAbility(new BoostSourceEffect( + xValue2, xValue1, Duration.EndOfTurn, true + ).setText("it gets -2/-1 until end of turn for each creature blocking it beyond the first"), false)); } private JohtullWurm(final JohtullWurm card) { diff --git a/Mage.Sets/src/mage/cards/j/JungleWurm.java b/Mage.Sets/src/mage/cards/j/JungleWurm.java index d38b80f5898..e871579e5e5 100644 --- a/Mage.Sets/src/mage/cards/j/JungleWurm.java +++ b/Mage.Sets/src/mage/cards/j/JungleWurm.java @@ -20,7 +20,7 @@ import java.util.UUID; public final class JungleWurm extends CardImpl { private static final DynamicValue xValue = new MultipliedValue( - new BlockedCreatureCount("", true), -1 + BlockedCreatureCount.BEYOND_FIRST, -1 ); public JungleWurm(UUID ownerId, CardSetInfo setInfo) { diff --git a/Mage.Sets/src/mage/cards/r/RabidElephant.java b/Mage.Sets/src/mage/cards/r/RabidElephant.java index 5bb4a95cebd..98e40298b6f 100644 --- a/Mage.Sets/src/mage/cards/r/RabidElephant.java +++ b/Mage.Sets/src/mage/cards/r/RabidElephant.java @@ -29,7 +29,7 @@ public final class RabidElephant extends CardImpl { this.toughness = new MageInt(4); // Whenever Rabid Elephant becomes blocked, it gets +2/+2 until end of turn for each creature blocking it. - DynamicValue value = new MultipliedValue(new BlockedCreatureCount(), 2); + DynamicValue value = new MultipliedValue(BlockedCreatureCount.ALL, 2); Effect effect = new BoostSourceEffect(value, value, Duration.EndOfTurn, true); effect.setText("it gets +2/+2 until end of turn for each creature blocking it"); this.addAbility(new BecomesBlockedSourceTriggeredAbility(effect, false)); diff --git a/Mage.Sets/src/mage/cards/s/SparringGolem.java b/Mage.Sets/src/mage/cards/s/SparringGolem.java index 6010b6c76d1..cced05fa799 100644 --- a/Mage.Sets/src/mage/cards/s/SparringGolem.java +++ b/Mage.Sets/src/mage/cards/s/SparringGolem.java @@ -26,7 +26,7 @@ public final class SparringGolem extends CardImpl { this.toughness = new MageInt(2); // Whenever Sparring Golem becomes blocked, it gets +1/+1 until end of turn for each creature blocking it. - BlockedCreatureCount value = new BlockedCreatureCount(); + BlockedCreatureCount value = BlockedCreatureCount.ALL; Effect effect = new BoostSourceEffect(value, value, Duration.EndOfTurn, true); effect.setText("it gets +1/+1 until end of turn for each creature blocking it"); this.addAbility(new BecomesBlockedSourceTriggeredAbility(effect, false)); diff --git a/Mage/src/main/java/mage/abilities/common/BecomesBlockedAllTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/BecomesBlockedAllTriggeredAbility.java index 47d4d724c7a..cd8e947d6a1 100644 --- a/Mage/src/main/java/mage/abilities/common/BecomesBlockedAllTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/BecomesBlockedAllTriggeredAbility.java @@ -1,9 +1,9 @@ - package mage.abilities.common; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.Effect; import mage.constants.Zone; +import mage.filter.StaticFilters; import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; import mage.game.events.GameEvent; @@ -11,16 +11,15 @@ import mage.game.permanent.Permanent; import mage.target.targetpointer.FixedTarget; /** - * * @author LevelX2 */ public class BecomesBlockedAllTriggeredAbility extends TriggeredAbilityImpl { - private FilterCreaturePermanent filter; - private boolean setTargetPointer; + private final FilterCreaturePermanent filter; + private final boolean setTargetPointer; public BecomesBlockedAllTriggeredAbility(Effect effect, boolean optional) { - this(effect, optional, new FilterCreaturePermanent("a creature"), false); + this(effect, optional, StaticFilters.FILTER_PERMANENT_CREATURE_A, false); } public BecomesBlockedAllTriggeredAbility(Effect effect, boolean optional, FilterCreaturePermanent filter, boolean setTargetPointer) { @@ -45,7 +44,7 @@ public class BecomesBlockedAllTriggeredAbility extends TriggeredAbilityImpl { Permanent permanent = game.getPermanent(event.getTargetId()); if (filter.match(permanent, getSourceId(), getControllerId(), game)) { if (setTargetPointer) { - this.getEffects().setTargetPointer(new FixedTarget(event.getTargetId())); + this.getEffects().setTargetPointer(new FixedTarget(event.getTargetId(), game)); } return true; } diff --git a/Mage/src/main/java/mage/abilities/dynamicvalue/common/BlockedCreatureCount.java b/Mage/src/main/java/mage/abilities/dynamicvalue/common/BlockedCreatureCount.java index 297ce55d7b1..df8a1d6bcdc 100644 --- a/Mage/src/main/java/mage/abilities/dynamicvalue/common/BlockedCreatureCount.java +++ b/Mage/src/main/java/mage/abilities/dynamicvalue/common/BlockedCreatureCount.java @@ -10,47 +10,36 @@ import mage.game.combat.CombatGroup; /** * @author Markedagain */ -public class BlockedCreatureCount implements DynamicValue { +public enum BlockedCreatureCount implements DynamicValue { + ALL("each creature blocking it", false), + BEYOND_FIRST("each creature blocking it beyond the first", true); private final String message; private final boolean beyondTheFirst; - public BlockedCreatureCount() { - this("each creature blocking it"); - } - - public BlockedCreatureCount(String message) { - this(message, false); - } - - public BlockedCreatureCount(String message, boolean beyondTheFirst) { + BlockedCreatureCount(String message, boolean beyondTheFirst) { this.message = message; this.beyondTheFirst = beyondTheFirst; } - public BlockedCreatureCount(final BlockedCreatureCount dynamicValue) { - super(); - this.message = dynamicValue.message; - this.beyondTheFirst = dynamicValue.beyondTheFirst; - } - @Override public int calculate(Game game, Ability sourceAbility, Effect effect) { for (CombatGroup combatGroup : game.getCombat().getGroups()) { - if (combatGroup.getAttackers().contains(sourceAbility.getSourceId())) { - int blockers = combatGroup.getBlockers().size(); - if (beyondTheFirst) { - blockers = blockers > 0 ? blockers - 1 : 0; - } - return blockers; + if (!combatGroup.getAttackers().contains(sourceAbility.getSourceId())) { + continue; } + int blockers = combatGroup.getBlockers().size(); + if (beyondTheFirst) { + blockers = blockers > 0 ? blockers - 1 : 0; + } + return blockers; } return 0; } @Override public BlockedCreatureCount copy() { - return new BlockedCreatureCount(this); + return this; } @Override