diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/BushidoTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/BushidoTest.java
index f02153a56b9..c50854e0f9b 100644
--- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/BushidoTest.java
+++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/BushidoTest.java
@@ -46,4 +46,24 @@ public class BushidoTest extends CardTestPlayerBase {
assertPermanentCount(playerB, "Elite Vanguard", 0);
}
+ /**
+ * Tests boosting on double block, it may only trigger once
+ */
+ @Test
+ public void testMultipleBlocker() {
+ addCard(Zone.BATTLEFIELD, playerA, "Llanowar Elves", 1);
+ addCard(Zone.BATTLEFIELD, playerA, "Quirion Elves", 1);
+
+ addCard(Zone.BATTLEFIELD, playerB, "Isao, Enlightened Bushi"); // 2/1 Bushido 2
+ attack(2, playerB, "Isao, Enlightened Bushi");
+ block(2, playerA, "Llanowar Elves", "Isao, Enlightened Bushi");
+ block(2, playerA, "Quirion Elves", "Isao, Enlightened Bushi");
+
+ setStopAt(2, PhaseStep.END_COMBAT);
+ execute();
+
+ assertPowerToughness(playerB, "Isao, Enlightened Bushi", 4, 3);
+ assertPermanentCount(playerA, "Llanowar Elves", 0);
+ assertPermanentCount(playerA, "Quirion Elves", 0);
+ }
}
diff --git a/Mage/src/main/java/mage/abilities/keyword/BushidoAbility.java b/Mage/src/main/java/mage/abilities/keyword/BushidoAbility.java
index 21592a8e914..365dc7f36b3 100644
--- a/Mage/src/main/java/mage/abilities/keyword/BushidoAbility.java
+++ b/Mage/src/main/java/mage/abilities/keyword/BushidoAbility.java
@@ -28,40 +28,65 @@
package mage.abilities.keyword;
import mage.abilities.Ability;
-import mage.abilities.common.BlocksOrBecomesBlockedTriggeredAbility;
+import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.constants.Duration;
+import mage.constants.Zone;
import mage.game.Game;
+import mage.game.combat.CombatGroup;
+import mage.game.events.GameEvent;
+import mage.game.permanent.Permanent;
-public class BushidoAbility extends BlocksOrBecomesBlockedTriggeredAbility {
+public class BushidoAbility extends TriggeredAbilityImpl {
private DynamicValue value;
- private String rule = null;
+ private String rulesText = null;
public BushidoAbility(int value) {
this(new StaticValue(value));
- rule = "Bushido " + value + getReminder(Integer.toString(value));
+ rulesText = "Bushido " + value + getReminder(Integer.toString(value));
}
public BushidoAbility(DynamicValue value) {
- super(new BoostSourceEffect(value, value, Duration.EndOfTurn, true), false);
+ super(Zone.BATTLEFIELD, new BoostSourceEffect(value, value, Duration.EndOfTurn, true), false);
if (!(value instanceof StaticValue)) {
- rule = "{this} has bushido X, where X is " + value.getMessage() + getReminder(value.toString());
+ rulesText = "{this} has bushido X, where X is " + value.getMessage() + getReminder(value.toString());
}
this.value = value;
}
static String getReminder(String xValue) {
- return " (Whenever this creature blocks or becomes blocked, it gets +" + xValue+ "/+" + xValue + " until end of turn.)";
+ return " (Whenever this creature blocks or becomes blocked, it gets +" + xValue + "/+" + xValue + " until end of turn.)";
}
public BushidoAbility(final BushidoAbility ability) {
super(ability);
this.value = ability.value;
- this.rule = ability.rule;
+ this.rulesText = ability.rulesText;
+ }
+
+ @Override
+ public boolean checkEventType(GameEvent event, Game game) {
+ return event.getType() == GameEvent.EventType.DECLARE_BLOCKERS_STEP;
+ }
+
+ @Override
+ public boolean checkTrigger(GameEvent event, Game game) {
+ Permanent source = game.getPermanent(getSourceId());
+ if (source != null) {
+ if (source.isBlocked(game)) {
+ return true;
+ }
+ for (CombatGroup group : game.getCombat().getGroups()) {
+ if (group.getBlockers().contains(getSourceId())) {
+ return true;
+ }
+ }
+ }
+ return false;
}
@Override
@@ -75,6 +100,6 @@ public class BushidoAbility extends BlocksOrBecomesBlockedTriggeredAbility {
@Override
public String getRule() {
- return rule;
+ return rulesText;
}
}