diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/equipped/BatterskullTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/equipped/BatterskullTest.java new file mode 100644 index 00000000000..c6fbfc9a301 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/equipped/BatterskullTest.java @@ -0,0 +1,71 @@ +/* +* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. +* +* Redistribution and use in source and binary forms, with or without modification, are +* permitted provided that the following conditions are met: +* +* 1. Redistributions of source code must retain the above copyright notice, this list of +* conditions and the following disclaimer. +* +* 2. Redistributions in binary form must reproduce the above copyright notice, this list +* of conditions and the following disclaimer in the documentation and/or other materials +* provided with the distribution. +* +* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED +* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR +* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +* The views and conclusions contained in the software and documentation are those of the +* authors and should not be interpreted as representing official policies, either expressed +* or implied, of BetaSteward_at_googlemail.com. +*/ + +package org.mage.test.cards.abilities.equipped; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import mage.game.permanent.Permanent; +import org.junit.Assert; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * Batterskull {5} + * Artifact - Equipment + * Living weapon (When this Equipment enters the battlefield, put a 0/0 black Germ creature token onto the battlefield, then attach this to it.) + * Equipped creature gets +4/+4 and has vigilance and lifelink. + * {3}: Return Batterskull to its owner's hand. + * Equip {5} + * + * + * @author LevelX2 + */ +public class BatterskullTest extends CardTestPlayerBase { + + /** + * Tests that Batterskull gets attached to the Germ creature token + */ + @Test + public void testEquippedToGerm() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 5); + addCard(Zone.HAND, playerA, "Batterskull"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Batterskull"); + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertLife(playerA, 20); + assertLife(playerB, 20); + + assertHandCount(playerA, 0); + assertPermanentCount(playerA, "Batterskull", 1); + assertPermanentCount(playerA, "Germ", 1); + assertPowerToughness(playerA, "Germ", 4, 4); + } +} diff --git a/Mage/src/mage/abilities/keyword/LivingWeaponAbility.java b/Mage/src/mage/abilities/keyword/LivingWeaponAbility.java index 93658ffe1ea..cf0a9dc4167 100644 --- a/Mage/src/mage/abilities/keyword/LivingWeaponAbility.java +++ b/Mage/src/mage/abilities/keyword/LivingWeaponAbility.java @@ -10,6 +10,7 @@ import mage.constants.Outcome; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.permanent.token.Token; +import mage.players.Player; public class LivingWeaponAbility extends EntersBattlefieldTriggeredAbility { public LivingWeaponAbility() { @@ -42,11 +43,15 @@ class LivingWeaponEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - GermToken token = new GermToken(); - token.putOntoBattlefield(1, game, source.getId(), source.getControllerId()); - Permanent p = game.getPermanent(token.getLastAddedToken()); - if (p != null) { - p.addAttachment(source.getSourceId(), game); + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + GermToken token = new GermToken(); + token.putOntoBattlefield(1, game, source.getId(), source.getControllerId()); + Permanent p = game.getPermanent(token.getLastAddedToken()); + if (p != null) { + p.addAttachment(source.getSourceId(), game); + return true; + } } return false; } diff --git a/Mage/src/mage/game/GameImpl.java b/Mage/src/mage/game/GameImpl.java index 5d6b230bb16..911dfcdb755 100644 --- a/Mage/src/mage/game/GameImpl.java +++ b/Mage/src/mage/game/GameImpl.java @@ -1120,7 +1120,7 @@ public abstract class GameImpl> implements Game, Serializa state.getStack().remove(top); while (state.hasSimultaneousEvents()) { state.handleSimultaneousEvent(this); - checkStateAndTriggered(); + checkTriggered(); } } }