From 6b1e52d0942ef07f3e900bf86be982f84894d4c7 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Wed, 7 May 2014 01:30:39 +0200 Subject: [PATCH 1/3] Made a change to the event handling to get Undying to work. --- .../mage/test/cards/abilities/keywords/UndyingTest.java | 2 +- Mage/src/mage/abilities/TriggeredAbilities.java | 7 ++++--- Mage/src/mage/game/permanent/PermanentCard.java | 1 + 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/UndyingTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/UndyingTest.java index 737173b4ba..e4e861283c 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/UndyingTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/UndyingTest.java @@ -69,7 +69,7 @@ public class UndyingTest extends CardTestPlayerBase { castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Last Gasp", "Elite Vanguard"); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Undying Evil", "Elite Vanguard"); - setStopAt(1, PhaseStep.BEGIN_COMBAT); + setStopAt(1, PhaseStep.END_COMBAT); execute(); assertPermanentCount(playerA, "Elite Vanguard", 1); diff --git a/Mage/src/mage/abilities/TriggeredAbilities.java b/Mage/src/mage/abilities/TriggeredAbilities.java index 1140156f99..d01eff1e5f 100644 --- a/Mage/src/mage/abilities/TriggeredAbilities.java +++ b/Mage/src/mage/abilities/TriggeredAbilities.java @@ -49,7 +49,7 @@ import mage.game.permanent.PermanentCard; */ public class TriggeredAbilities extends HashMap { - private Map> sources = new HashMap>(); + private final Map> sources = new HashMap<>(); public TriggeredAbilities() {} @@ -122,7 +122,7 @@ public class TriggeredAbilities extends HashMap { */ public void add(TriggeredAbility ability, UUID sourceId, MageObject attachedTo) { this.add(ability, attachedTo); - List uuidList = new LinkedList(); + List uuidList = new LinkedList<>(); uuidList.add(sourceId); // if the object that gained the ability moves zone, also then the triggered ability must be removed uuidList.add(attachedTo.getId()); @@ -145,9 +145,10 @@ public class TriggeredAbilities extends HashMap { * Removes gained abilities by sourceId * * @param sourceId + * @return */ public List removeGainedAbilitiesForSource(UUID sourceId) { - List keysToRemove = new ArrayList(); + List keysToRemove = new ArrayList<>(); for (Map.Entry> entry : sources.entrySet()) { if (entry.getValue().contains(sourceId)) { diff --git a/Mage/src/mage/game/permanent/PermanentCard.java b/Mage/src/mage/game/permanent/PermanentCard.java index 335a64f68a..09c53cb4ff 100644 --- a/Mage/src/mage/game/permanent/PermanentCard.java +++ b/Mage/src/mage/game/permanent/PermanentCard.java @@ -163,6 +163,7 @@ public class PermanentCard extends PermanentImpl { game.setZone(objectId, event.getToZone()); game.addSimultaneousEvent(event); if (event.getFromZone().equals(Zone.BATTLEFIELD)) { + game.getState().handleSimultaneousEvent(game); game.resetForSourceId(getId()); game.applyEffects(); // LevelX2: needed to execute isInactive for of custom duration copy effect if source returns directly (e.g. cloudshifted clone) } From ef6e8e53392b6061819a1ee364115a81c99e14ce Mon Sep 17 00:00:00 2001 From: Loki Date: Wed, 7 May 2014 13:10:59 +1200 Subject: [PATCH 2/3] [MMS] Henge Guardian --- .../sets/knightsvsdragons/HengeGuardian.java | 52 ++++++++++++++ .../sets/mercadianmasques/HengeGuardian.java | 69 +++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/knightsvsdragons/HengeGuardian.java create mode 100644 Mage.Sets/src/mage/sets/mercadianmasques/HengeGuardian.java diff --git a/Mage.Sets/src/mage/sets/knightsvsdragons/HengeGuardian.java b/Mage.Sets/src/mage/sets/knightsvsdragons/HengeGuardian.java new file mode 100644 index 0000000000..79ebfdf18d --- /dev/null +++ b/Mage.Sets/src/mage/sets/knightsvsdragons/HengeGuardian.java @@ -0,0 +1,52 @@ +/* + * 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 mage.sets.knightsvsdragons; + +import java.util.UUID; + +/** + * + * @author Loki + */ +public class HengeGuardian extends mage.sets.mercadianmasques.HengeGuardian { + + public HengeGuardian(UUID ownerId) { + super(ownerId); + this.cardNumber = 55; + this.expansionSetCode = "DDG"; + } + + public HengeGuardian(final HengeGuardian card) { + super(card); + } + + @Override + public HengeGuardian copy() { + return new HengeGuardian(this); + } +} diff --git a/Mage.Sets/src/mage/sets/mercadianmasques/HengeGuardian.java b/Mage.Sets/src/mage/sets/mercadianmasques/HengeGuardian.java new file mode 100644 index 0000000000..70a7a913a3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/mercadianmasques/HengeGuardian.java @@ -0,0 +1,69 @@ +/* + * 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 mage.sets.mercadianmasques; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continious.GainAbilitySourceEffect; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author Loki + */ +public class HengeGuardian extends CardImpl { + + public HengeGuardian(UUID ownerId) { + super(ownerId, 297, "Henge Guardian", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{5}"); + this.expansionSetCode = "MMQ"; + this.subtype.add("Dragon"); + this.subtype.add("Wurm"); + + this.power = new MageInt(3); + this.toughness = new MageInt(4); + + // {2}: Henge Guardian gains trample until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(TrampleAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{2}"))); + } + + public HengeGuardian(final HengeGuardian card) { + super(card); + } + + @Override + public HengeGuardian copy() { + return new HengeGuardian(this); + } +} From a2abc94316949453c808c0995e914fe954c9e07e Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Wed, 7 May 2014 07:57:59 +0200 Subject: [PATCH 3/3] * Vampiric Tutor - Fixed that library was not shuffeled after the search. --- Mage.Sets/src/mage/sets/visions/VampiricTutor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mage.Sets/src/mage/sets/visions/VampiricTutor.java b/Mage.Sets/src/mage/sets/visions/VampiricTutor.java index e5c450895e..7c3726fc6b 100644 --- a/Mage.Sets/src/mage/sets/visions/VampiricTutor.java +++ b/Mage.Sets/src/mage/sets/visions/VampiricTutor.java @@ -48,7 +48,7 @@ public class VampiricTutor extends CardImpl { this.color.setBlack(true); // Search your library for a card, then shuffle your library and put that card on top of it. You lose 2 life. - this.getSpellAbility().addEffect(new SearchLibraryPutOnLibraryEffect(new TargetCardInLibrary())); + this.getSpellAbility().addEffect(new SearchLibraryPutOnLibraryEffect(new TargetCardInLibrary(), false, true)); this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(2)); }