From e8f4b8947e2067b7ce3ce87a64fe5a53a6fbb6c8 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sun, 9 Jul 2017 20:43:06 +0200 Subject: [PATCH] * Stinkdrinker Bandit - Fixed that it applies boost more than once in multiplayer games (fixes #3542). --- .../src/mage/cards/s/StinkdrinkerBandit.java | 16 +++++++++------- .../test/multiplayer/MultiplayerTriggerTest.java | 16 +++++++++++----- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/Mage.Sets/src/mage/cards/s/StinkdrinkerBandit.java b/Mage.Sets/src/mage/cards/s/StinkdrinkerBandit.java index 50389ad6f1a..3b7808f3c1c 100644 --- a/Mage.Sets/src/mage/cards/s/StinkdrinkerBandit.java +++ b/Mage.Sets/src/mage/cards/s/StinkdrinkerBandit.java @@ -53,7 +53,7 @@ import mage.game.permanent.Permanent; * @author BursegSardaukar */ public class StinkdrinkerBandit extends CardImpl { - + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Rogue"); static { @@ -61,7 +61,7 @@ public class StinkdrinkerBandit extends CardImpl { } public StinkdrinkerBandit(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}"); this.subtype.add("Goblin"); this.subtype.add("Rogue"); @@ -71,10 +71,10 @@ public class StinkdrinkerBandit extends CardImpl { // Prowl {1}, {B} (You may cast this for its prowl cost if you dealt combat damage to a player this turn with a Goblin or Rogue.) this.addAbility(new ProwlAbility(this, "{1}{B}")); - // Whenever a Rogue you control attacks and isn't blocked, it gets +2/+1 until end of turn. + // Whenever a Rogue you control attacks and isn't blocked, it gets +2/+1 until end of turn. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect( - new StinkdrinkerBanditTriggeredAbility(), Duration.WhileOnBattlefield, - filter, "Whenever a Rogue you control attacks and isn't blocked, it gets +2/+1 until end of turn"))); + new StinkdrinkerBanditTriggeredAbility(), Duration.WhileOnBattlefield, + filter, "Whenever a Rogue you control attacks and isn't blocked, it gets +2/+1 until end of turn"))); } public StinkdrinkerBandit(final StinkdrinkerBandit card) { @@ -111,8 +111,10 @@ class StinkdrinkerBanditTriggeredAbility extends TriggeredAbilityImpl { public boolean checkTrigger(GameEvent event, Game game) { Permanent sourcePermanent = game.getPermanent(getSourceId()); if (sourcePermanent.isAttacking()) { - for (CombatGroup combatGroup: game.getCombat().getGroups()) { - if (combatGroup.getBlockers().isEmpty() && combatGroup.getAttackers().contains(getSourceId())) { + for (CombatGroup combatGroup : game.getCombat().getGroups()) { + if (combatGroup.getBlockers().isEmpty() + && combatGroup.getDefenderId().equals(event.getTargetId()) + && combatGroup.getAttackers().contains(getSourceId())) { return true; } } diff --git a/Mage.Tests/src/test/java/org/mage/test/multiplayer/MultiplayerTriggerTest.java b/Mage.Tests/src/test/java/org/mage/test/multiplayer/MultiplayerTriggerTest.java index c2d598c72cc..ed53f823941 100644 --- a/Mage.Tests/src/test/java/org/mage/test/multiplayer/MultiplayerTriggerTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/multiplayer/MultiplayerTriggerTest.java @@ -1,5 +1,6 @@ package org.mage.test.multiplayer; +import java.io.FileNotFoundException; import mage.constants.MultiplayerAttackOption; import mage.constants.PhaseStep; import mage.constants.RangeOfInfluence; @@ -10,8 +11,6 @@ import mage.game.GameException; import org.junit.Test; import org.mage.test.serverside.base.CardTestMultiPlayerBase; -import java.io.FileNotFoundException; - public class MultiplayerTriggerTest extends CardTestMultiPlayerBase { @Override @@ -26,9 +25,15 @@ public class MultiplayerTriggerTest extends CardTestMultiPlayerBase { } @Test - public void testMultiplayerAttackStinkdrinkerBanditTrigger(){ - String pestermite = "Pestermite"; - String stinkdrinker = "Stinkdrinker Bandit"; + public void testMultiplayerAttackStinkdrinkerBanditTrigger() { + // Flash + // Flying + // When Pestermite enters the battlefield, you may tap or untap target permanent. + String pestermite = "Pestermite"; // 2/1 + + // Prowl {1}, {B} (You may cast this for its prowl cost if you dealt combat damage to a player this turn with a Goblin or Rogue.) + // Whenever a Rogue you control attacks and isn't blocked, it gets +2/+1 until end of turn. + String stinkdrinker = "Stinkdrinker Bandit"; // 2/1 addCard(Zone.BATTLEFIELD, playerA, stinkdrinker); addCard(Zone.BATTLEFIELD, playerA, pestermite, 1); @@ -38,6 +43,7 @@ public class MultiplayerTriggerTest extends CardTestMultiPlayerBase { setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); execute(); + assertPowerToughness(playerA, stinkdrinker, 4, 2); assertPowerToughness(playerA, pestermite, 4, 2); } }