From 2cd0919d2964facba19f2cf968e293cbe4227f55 Mon Sep 17 00:00:00 2001 From: swordshine Date: Tue, 30 Dec 2014 12:27:42 +0000 Subject: [PATCH] - FRF: Added Sandsteppe Mastodon --- .../src/main/java/forge/util/Aggregates.java | 19 +++++++++++++++++++ .../ability/effects/CountersPutEffect.java | 18 +++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/forge-core/src/main/java/forge/util/Aggregates.java b/forge-core/src/main/java/forge/util/Aggregates.java index 0a04379b80e..18601ff6a9e 100644 --- a/forge-core/src/main/java/forge/util/Aggregates.java +++ b/forge-core/src/main/java/forge/util/Aggregates.java @@ -1,6 +1,7 @@ package forge.util; import com.google.common.base.Function; +import com.google.common.collect.Lists; import java.util.*; import java.util.Map.Entry; @@ -51,6 +52,24 @@ public class Aggregates { return result; } + public static final List listWithMin(final Iterable source, final Function valueAccessor) { + if (source == null) { return null; } + int min = Integer.MAX_VALUE; + List result = Lists.newArrayList(); + for (final T c : source) { + int value = valueAccessor.apply(c); + if (value == min) { + result.add(c); + } + if (value < min) { + min = value; + result.clear(); + result.add(c); + } + } + return result; + } + public static final int sum(final Iterable source, final Function valueAccessor) { int result = 0; if (source != null) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/CountersPutEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CountersPutEffect.java index 446be8d9434..9b1a690337e 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CountersPutEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CountersPutEffect.java @@ -3,13 +3,18 @@ package forge.game.ability.effects; import forge.game.ability.AbilityUtils; import forge.game.ability.SpellAbilityEffect; import forge.game.card.Card; +import forge.game.card.CardCollection; +import forge.game.card.CardLists; +import forge.game.card.CardPredicates; import forge.game.card.CounterType; +import forge.game.card.CardPredicates.Presets; import forge.game.player.Player; import forge.game.player.PlayerActionConfirmMode; import forge.game.spellability.SpellAbility; import forge.game.trigger.TriggerType; import forge.game.zone.Zone; import forge.game.zone.ZoneType; +import forge.util.Aggregates; import java.util.HashMap; import java.util.Iterator; @@ -24,6 +29,10 @@ public class CountersPutEffect extends SpellAbilityEffect { final CounterType cType = CounterType.valueOf(sa.getParam("CounterType")); final int amount = AbilityUtils.calculateAmount(card, sa.getParam("CounterNum"), sa); + if (sa.hasParam("Bolster")) { + sb.append("Bolster ").append(amount); + return sb.toString(); + } if (dividedAsYouChoose) { sb.append("Distribute "); } else { @@ -84,7 +93,14 @@ public class CountersPutEffect extends SpellAbilityEffect { counterAmount = activator.getController().chooseNumber(sa, "How many counters?", 0, counterAmount); } - List tgtCards = getDefinedCardsOrTargeted(sa); + CardCollection tgtCards = new CardCollection(); + if (sa.hasParam("Bolster")) { + CardCollection creatsYouCtrl = CardLists.filter(activator.getCardsIn(ZoneType.Battlefield), Presets.CREATURES); + CardCollection leastToughness = new CardCollection(Aggregates.listWithMin(creatsYouCtrl, CardPredicates.Accessors.fnGetDefense)); + tgtCards.addAll(activator.getController().chooseCardsForEffect(leastToughness, sa, "Choose a creature with the least toughness", 1, 1, false)); + } else { + tgtCards.addAll(getDefinedCardsOrTargeted(sa)); + } for (final Card tgtCard : tgtCards) { counterAmount = sa.usesTargeting() && sa.hasParam("DividedAsYouChoose") ? sa.getTargetRestrictions().getDividedValue(tgtCard) : counterAmount;