diff --git a/Mage.Sets/src/mage/sets/kaladesh/AethersquallAncient.java b/Mage.Sets/src/mage/sets/kaladesh/AethersquallAncient.java
new file mode 100644
index 00000000000..2e0573f300a
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/kaladesh/AethersquallAncient.java
@@ -0,0 +1,83 @@
+/*
+ * 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.kaladesh;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.common.ActivateAsSorceryActivatedAbility;
+import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
+import mage.abilities.costs.common.PayEnergyCost;
+import mage.abilities.effects.common.ReturnToHandFromBattlefieldAllEffect;
+import mage.abilities.effects.common.counter.GetEnergyCountersControllerEffect;
+import mage.abilities.keyword.FlyingAbility;
+import mage.cards.CardImpl;
+import mage.constants.CardType;
+import mage.constants.Rarity;
+import mage.constants.TargetController;
+import mage.constants.Zone;
+import mage.filter.common.FilterCreaturePermanent;
+import mage.filter.predicate.permanent.AnotherPredicate;
+
+/**
+ *
+ * @author fireshoes
+ */
+public class AethersquallAncient extends CardImpl {
+
+ private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("other creatures");
+
+ static {
+ filter.add(new AnotherPredicate());
+ }
+
+ public AethersquallAncient(UUID ownerId) {
+ super(ownerId, 39, "Aethersquall Ancient", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{5}{U}{U}");
+ this.expansionSetCode = "KLD";
+ this.subtype.add("Leviathan");
+ this.power = new MageInt(6);
+ this.toughness = new MageInt(6);
+
+ // Flying
+ this.addAbility(FlyingAbility.getInstance());
+
+ // At the beginning of your upkeep, you get {E}{E}{E}.
+ this.addAbility(new BeginningOfUpkeepTriggeredAbility(new GetEnergyCountersControllerEffect(3), TargetController.YOU, false));
+
+ // Pay {E}{E}{E}{E}{E}{E}{E}{E}: Return all other creatures to their owners' hands. Activate this ability only any time you could cast a sorcery.
+ this.addAbility(new ActivateAsSorceryActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandFromBattlefieldAllEffect(filter), new PayEnergyCost(8)));
+ }
+
+ public AethersquallAncient(final AethersquallAncient card) {
+ super(card);
+ }
+
+ @Override
+ public AethersquallAncient copy() {
+ return new AethersquallAncient(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/kaladesh/CeremoniousRejection.java b/Mage.Sets/src/mage/sets/kaladesh/CeremoniousRejection.java
new file mode 100644
index 00000000000..e73b879b673
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/kaladesh/CeremoniousRejection.java
@@ -0,0 +1,68 @@
+/*
+ * 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.kaladesh;
+
+import java.util.UUID;
+import mage.abilities.effects.common.CounterTargetEffect;
+import mage.cards.CardImpl;
+import mage.constants.CardType;
+import mage.constants.Rarity;
+import mage.filter.FilterSpell;
+import mage.filter.predicate.mageobject.ColorlessPredicate;
+import mage.target.TargetSpell;
+
+/**
+ *
+ * @author fireshoes
+ */
+public class CeremoniousRejection extends CardImpl {
+
+ private static final FilterSpell filter = new FilterSpell("colorless spell");
+
+ static{
+ filter.add(new ColorlessPredicate());
+ }
+
+ public CeremoniousRejection(UUID ownerId) {
+ super(ownerId, 40, "Ceremonious Rejection", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{U}");
+ this.expansionSetCode = "KLD";
+
+ // Counter target colorless spell.
+ getSpellAbility().addEffect(new CounterTargetEffect());
+ getSpellAbility().addTarget(new TargetSpell(filter));
+ }
+
+ public CeremoniousRejection(final CeremoniousRejection card) {
+ super(card);
+ }
+
+ @Override
+ public CeremoniousRejection copy() {
+ return new CeremoniousRejection(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/kaladesh/DisappearingAct.java b/Mage.Sets/src/mage/sets/kaladesh/DisappearingAct.java
index 821b1d3794f..1263d677446 100644
--- a/Mage.Sets/src/mage/sets/kaladesh/DisappearingAct.java
+++ b/Mage.Sets/src/mage/sets/kaladesh/DisappearingAct.java
@@ -48,7 +48,7 @@ public class DisappearingAct extends CardImpl {
this.expansionSetCode = "KLD";
// As an additional cost to cast Disappearing Act, return a permanent you control to its owner's hand.
- this.getSpellAbility().addCost(new ReturnToHandChosenControlledPermanentCost(new TargetControlledPermanent(new FilterControlledPermanent("a permanent you control"))));
+ this.getSpellAbility().addCost(new ReturnToHandChosenControlledPermanentCost(new TargetControlledPermanent(new FilterControlledPermanent("a permanent"))));
// Counter target spell.
getSpellAbility().addEffect(new CounterTargetEffect());
diff --git a/Mage.Sets/src/mage/sets/kaladesh/InsidiousWill.java b/Mage.Sets/src/mage/sets/kaladesh/InsidiousWill.java
new file mode 100644
index 00000000000..d4d6340c530
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/kaladesh/InsidiousWill.java
@@ -0,0 +1,90 @@
+/*
+ * 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.kaladesh;
+
+import java.util.UUID;
+import mage.abilities.Mode;
+import mage.abilities.effects.common.ChooseNewTargetsTargetEffect;
+import mage.abilities.effects.common.CopyTargetSpellEffect;
+import mage.abilities.effects.common.CounterTargetEffect;
+import mage.cards.CardImpl;
+import mage.constants.CardType;
+import mage.constants.Rarity;
+import mage.filter.FilterSpell;
+import mage.filter.predicate.Predicates;
+import mage.filter.predicate.mageobject.CardTypePredicate;
+import mage.target.TargetSpell;
+
+/**
+ *
+ * @author fireshoes
+ */
+public class InsidiousWill extends CardImpl {
+
+ private static final FilterSpell filter = new FilterSpell("instant or sorcery spell");
+
+ static {
+ filter.add(Predicates.or(
+ new CardTypePredicate(CardType.INSTANT),
+ new CardTypePredicate(CardType.SORCERY)));
+ }
+
+ public InsidiousWill(UUID ownerId) {
+ super(ownerId, 52, "Insidious Will", Rarity.RARE, new CardType[]{CardType.INSTANT}, "{2}{U}{U}");
+ this.expansionSetCode = "KLD";
+
+ // Choose one &mdash
+ this.getSpellAbility().getModes().setMinModes(1);
+ this.getSpellAbility().getModes().setMaxModes(1);
+
+ // Counter target spell.;
+ getSpellAbility().addEffect(new CounterTargetEffect());
+ getSpellAbility().addTarget(new TargetSpell());
+
+ // You may choose new targets for target spell.;
+ Mode mode = new Mode();
+ mode.getEffects().add(new ChooseNewTargetsTargetEffect());
+ mode.getTargets().add(new TargetSpell());
+ this.getSpellAbility().addMode(mode);
+
+ // Copy target instant or sorcery spell. You may choose new targets for the copy.
+ mode = new Mode();
+ mode.getEffects().add(new CopyTargetSpellEffect());
+ mode.getTargets().add(new TargetSpell(filter));
+ this.getSpellAbility().getModes().addMode(mode);
+ }
+
+ public InsidiousWill(final InsidiousWill card) {
+ super(card);
+ }
+
+ @Override
+ public InsidiousWill copy() {
+ return new InsidiousWill(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/kaladesh/LongFinnedSkywhale.java b/Mage.Sets/src/mage/sets/kaladesh/LongFinnedSkywhale.java
new file mode 100644
index 00000000000..b4941238455
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/kaladesh/LongFinnedSkywhale.java
@@ -0,0 +1,66 @@
+/*
+ * 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.kaladesh;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.common.CanBlockOnlyFlyingAbility;
+import mage.abilities.keyword.FlyingAbility;
+import mage.cards.CardImpl;
+import mage.constants.CardType;
+import mage.constants.Rarity;
+
+/**
+ *
+ * @author fireshoes
+ */
+public class LongFinnedSkywhale extends CardImpl {
+
+ public LongFinnedSkywhale(UUID ownerId) {
+ super(ownerId, 54, "Long-Finned Skywhale", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{U}{U}");
+ this.expansionSetCode = "KLD";
+ this.subtype.add("Whale");
+ this.power = new MageInt(4);
+ this.toughness = new MageInt(3);
+
+ // Flying
+ this.addAbility(FlyingAbility.getInstance());
+
+ // Long-Finned Skywhale can block only creatures with flying.
+ this.addAbility(new CanBlockOnlyFlyingAbility());
+ }
+
+ public LongFinnedSkywhale(final LongFinnedSkywhale card) {
+ super(card);
+ }
+
+ @Override
+ public LongFinnedSkywhale copy() {
+ return new LongFinnedSkywhale(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/kaladesh/MetallurgicSummonings.java b/Mage.Sets/src/mage/sets/kaladesh/MetallurgicSummonings.java
new file mode 100644
index 00000000000..5d5c76a3a01
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/kaladesh/MetallurgicSummonings.java
@@ -0,0 +1,168 @@
+/*
+ * 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.kaladesh;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.SpellCastControllerTriggeredAbility;
+import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
+import mage.abilities.costs.common.ExileSourceCost;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.decorator.ConditionalActivatedAbility;
+import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.common.CreateTokenEffect;
+import mage.cards.CardImpl;
+import mage.constants.CardType;
+import mage.constants.Outcome;
+import mage.constants.Rarity;
+import mage.constants.Zone;
+import mage.filter.FilterSpell;
+import mage.filter.common.FilterControlledArtifactPermanent;
+import mage.filter.common.FilterInstantOrSorceryCard;
+import mage.filter.predicate.Predicates;
+import mage.filter.predicate.mageobject.CardTypePredicate;
+import mage.game.Game;
+import mage.game.permanent.token.Token;
+import mage.game.stack.Spell;
+import mage.players.Player;
+import mage.target.targetpointer.FixedTarget;
+
+/**
+ *
+ * @author fireshoes
+ */
+public class MetallurgicSummonings extends CardImpl {
+
+ private static final FilterSpell filter = new FilterSpell("an instant or sorcery spell");
+
+ static {
+ filter.add(Predicates.or(
+ new CardTypePredicate(CardType.INSTANT),
+ new CardTypePredicate(CardType.SORCERY)));
+ }
+
+ public MetallurgicSummonings(UUID ownerId) {
+ super(ownerId, 56, "Metallurgic Summonings", Rarity.MYTHIC, new CardType[]{CardType.ENCHANTMENT}, "{3}{U}{U}");
+ this.expansionSetCode = "KLD";
+
+ // Whenever you cast an instant or sorcery spell, create an X/X colorless Construct artifact creature token, where X is that spell's converted mana cost.
+ this.addAbility(new SpellCastControllerTriggeredAbility(new MetallurgicSummoningsTokenEffect(), filter, false, true));
+
+ // {3}{U}{U}, Exile Metallurgic Summons: Return all instant and sorcery cards from your graveyard to your hand. Activate this ability only if you control six or more artifacts.
+ Ability ability = new ConditionalActivatedAbility(Zone.BATTLEFIELD,
+ new MetallurgicSummoningsReturnEffect(), new ManaCostsImpl("{3}{U}{U}"),
+ new PermanentsOnTheBattlefieldCondition(new FilterControlledArtifactPermanent(), PermanentsOnTheBattlefieldCondition.CountType.MORE_THAN, 5),
+ "{3}{U}{U}, Exile {this}: Return all instant and sorcery cards from your graveyard to your hand."
+ + " Activate this ability only if you control six or more artifacts.");
+ ability.addCost(new ExileSourceCost());
+ this.addAbility(ability);
+ }
+
+ public MetallurgicSummonings(final MetallurgicSummonings card) {
+ super(card);
+ }
+
+ @Override
+ public MetallurgicSummonings copy() {
+ return new MetallurgicSummonings(this);
+ }
+}
+
+class MetallurgicSummoningsTokenEffect extends OneShotEffect {
+
+ public MetallurgicSummoningsTokenEffect() {
+ super(Outcome.PutCreatureInPlay);
+ staticText = "create an X/X colorless Construct artifact creature token, where X is that spell's converted mana cost";
+ }
+
+ public MetallurgicSummoningsTokenEffect(MetallurgicSummoningsTokenEffect ability) {
+ super(ability);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Spell spell = game.getStack().getSpell(targetPointer.getFirst(game, source));
+ if (spell == null) {
+ spell = (Spell) game.getLastKnownInformation(((FixedTarget) getTargetPointer()).getTarget(), Zone.STACK);
+ }
+ if (spell != null) {
+ int cmc = spell.getConvertedManaCost();
+ if (cmc > 0) {
+ return new CreateTokenEffect(new MetallurgicSummoningsConstructToken(cmc)).apply(game, source);
+ }
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public MetallurgicSummoningsTokenEffect copy() {
+ return new MetallurgicSummoningsTokenEffect(this);
+ }
+}
+
+class MetallurgicSummoningsReturnEffect extends OneShotEffect {
+
+ MetallurgicSummoningsReturnEffect() {
+ super(Outcome.PutCardInPlay);
+ this.staticText = "Return all instant and sorcery cards from your graveyard to your hand. Activate this ability only if you control six or more artifacts";
+ }
+
+ MetallurgicSummoningsReturnEffect(final MetallurgicSummoningsReturnEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public MetallurgicSummoningsReturnEffect copy() {
+ return new MetallurgicSummoningsReturnEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Player controller = game.getPlayer(source.getControllerId());
+ if (controller != null) {
+ return controller.moveCards(controller.getGraveyard().getCards(new FilterInstantOrSorceryCard(), source.getSourceId(),
+ source.getControllerId(), game), Zone.HAND, source, game);
+ }
+ return false;
+ }
+}
+
+class MetallurgicSummoningsConstructToken extends Token {
+
+ public MetallurgicSummoningsConstructToken(int xValue) {
+ super("Construct", "X/X colorless Construct artifact creature token");
+ setOriginalExpansionSetCode("KLD");
+ cardType.add(CardType.ARTIFACT);
+ cardType.add(CardType.CREATURE);
+ subtype.add("Construct");
+ power = new MageInt(xValue);
+ toughness = new MageInt(xValue);
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/kaladesh/ShrewdNegotiation.java b/Mage.Sets/src/mage/sets/kaladesh/ShrewdNegotiation.java
new file mode 100644
index 00000000000..cbe03dbdf4e
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/kaladesh/ShrewdNegotiation.java
@@ -0,0 +1,79 @@
+/*
+ * 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.kaladesh;
+
+import java.util.UUID;
+import mage.abilities.effects.common.continuous.ExchangeControlTargetEffect;
+import mage.cards.CardImpl;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.Rarity;
+import mage.constants.TargetController;
+import mage.filter.FilterPermanent;
+import mage.filter.common.FilterControlledArtifactPermanent;
+import mage.filter.predicate.Predicates;
+import mage.filter.predicate.mageobject.CardTypePredicate;
+import mage.filter.predicate.permanent.ControllerPredicate;
+import mage.target.TargetPermanent;
+import mage.target.common.TargetControlledPermanent;
+
+/**
+ *
+ * @author fireshoes
+ */
+public class ShrewdNegotiation extends CardImpl {
+
+ private static final String rule = "Exchange control of target artifact you control and target artifact or creature you don't control";
+
+ private static final FilterPermanent filter = new FilterPermanent("artifact or creature you don't control");
+
+ static {
+ filter.add(new ControllerPredicate(TargetController.NOT_YOU));
+ filter.add(Predicates.or(new CardTypePredicate(CardType.ARTIFACT),
+ new CardTypePredicate(CardType.CREATURE)));
+ }
+
+ public ShrewdNegotiation(UUID ownerId) {
+ super(ownerId, 64, "Shrewd Negotiation", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{4}{U}");
+ this.expansionSetCode = "KLD";
+
+ // Exchange control of target artifact you control and target artifact or creature you don't control.
+ getSpellAbility().addEffect(new ExchangeControlTargetEffect(Duration.EndOfGame, rule, false, true));
+ getSpellAbility().addTarget(new TargetControlledPermanent(new FilterControlledArtifactPermanent("artifact you control")));
+ getSpellAbility().addTarget(new TargetPermanent(filter));
+ }
+
+ public ShrewdNegotiation(final ShrewdNegotiation card) {
+ super(card);
+ }
+
+ @Override
+ public ShrewdNegotiation copy() {
+ return new ShrewdNegotiation(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/kaladesh/TezzeretsAmbition.java b/Mage.Sets/src/mage/sets/kaladesh/TezzeretsAmbition.java
new file mode 100644
index 00000000000..fdeffa7a124
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/kaladesh/TezzeretsAmbition.java
@@ -0,0 +1,72 @@
+/*
+ * 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.kaladesh;
+
+import java.util.UUID;
+import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
+import mage.abilities.decorator.ConditionalOneShotEffect;
+import mage.abilities.effects.common.DrawCardSourceControllerEffect;
+import mage.abilities.effects.common.discard.DiscardControllerEffect;
+import mage.cards.CardImpl;
+import mage.constants.CardType;
+import mage.constants.Rarity;
+import mage.filter.common.FilterControlledPermanent;
+import mage.filter.predicate.mageobject.CardTypePredicate;
+
+/**
+ *
+ * @author fireshoes
+ */
+public class TezzeretsAmbition extends CardImpl {
+
+ private static final FilterControlledPermanent filter = new FilterControlledPermanent("you control no artifacts");
+
+ static {
+ filter.add(new CardTypePredicate(CardType.ARTIFACT));
+ }
+
+ public TezzeretsAmbition(UUID ownerId) {
+ super(ownerId, 65, "Tezzeret's Ambition", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{3}{U}{U}");
+ this.expansionSetCode = "KLD";
+
+ // Draw three cards. If you control no artifacts, discard a card.
+ this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(3));
+ this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
+ new DiscardControllerEffect(1),
+ new PermanentsOnTheBattlefieldCondition(filter, PermanentsOnTheBattlefieldCondition.CountType.EQUAL_TO, 0)));
+ }
+
+ public TezzeretsAmbition(final TezzeretsAmbition card) {
+ super(card);
+ }
+
+ @Override
+ public TezzeretsAmbition copy() {
+ return new TezzeretsAmbition(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/kaladesh/ThrivingTurtle.java b/Mage.Sets/src/mage/sets/kaladesh/ThrivingTurtle.java
new file mode 100644
index 00000000000..4503bf8d73c
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/kaladesh/ThrivingTurtle.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 mage.sets.kaladesh;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.common.AttacksTriggeredAbility;
+import mage.abilities.common.EntersBattlefieldTriggeredAbility;
+import mage.abilities.costs.common.PayEnergyCost;
+import mage.abilities.effects.common.DoIfCostPaid;
+import mage.abilities.effects.common.counter.AddCountersSourceEffect;
+import mage.abilities.effects.common.counter.GetEnergyCountersControllerEffect;
+import mage.cards.CardImpl;
+import mage.constants.CardType;
+import mage.constants.Rarity;
+import mage.counters.CounterType;
+
+/**
+ *
+ * @author fireshoes
+ */
+public class ThrivingTurtle extends CardImpl {
+
+ public ThrivingTurtle(UUID ownerId) {
+ super(ownerId, 66, "Thriving Turtle", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{U}");
+ this.expansionSetCode = "KLD";
+ this.subtype.add("Turtle");
+ this.power = new MageInt(0);
+ this.toughness = new MageInt(3);
+
+ // When Thriving Turtle enters the battlefield, you get {E}{E}.
+ this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2)));
+
+ // Whenever Thriving Turtle attacks, you may pay {E}{E}. If you do, put a +1/+1 counter on it.
+ this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), new PayEnergyCost(2)), false));
+ }
+
+ public ThrivingTurtle(final ThrivingTurtle card) {
+ super(card);
+ }
+
+ @Override
+ public ThrivingTurtle copy() {
+ return new ThrivingTurtle(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/kaladesh/TorrentialGearhulk.java b/Mage.Sets/src/mage/sets/kaladesh/TorrentialGearhulk.java
new file mode 100644
index 00000000000..805bb282740
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/kaladesh/TorrentialGearhulk.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.kaladesh;
+
+import java.util.UUID;
+
+/**
+ *
+ * @author fireshoes
+ */
+public class TorrentialGearhulk extends mage.sets.masterpieceseries.TorrentialGearhulk {
+
+ public TorrentialGearhulk(UUID ownerId) {
+ super(ownerId);
+ this.cardNumber = "67";
+ this.expansionSetCode = "KLD";
+ }
+
+ public TorrentialGearhulk(final TorrentialGearhulk card) {
+ super(card);
+ }
+
+ @Override
+ public TorrentialGearhulk copy() {
+ return new TorrentialGearhulk(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/masterpieceseries/TorrentialGearhulk.java b/Mage.Sets/src/mage/sets/masterpieceseries/TorrentialGearhulk.java
new file mode 100644
index 00000000000..7d729d3506d
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/masterpieceseries/TorrentialGearhulk.java
@@ -0,0 +1,172 @@
+/*
+ * 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.masterpieceseries;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.EntersBattlefieldTriggeredAbility;
+import mage.abilities.effects.ContinuousEffect;
+import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.ReplacementEffectImpl;
+import mage.abilities.keyword.FlashAbility;
+import mage.cards.Card;
+import mage.cards.CardImpl;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.Outcome;
+import mage.constants.Rarity;
+import mage.constants.Zone;
+import mage.filter.FilterCard;
+import mage.filter.predicate.mageobject.CardTypePredicate;
+import mage.game.Game;
+import mage.game.events.GameEvent;
+import mage.game.events.ZoneChangeEvent;
+import mage.players.Player;
+import mage.target.common.TargetCardInYourGraveyard;
+import mage.target.targetpointer.FixedTarget;
+
+/**
+ *
+ * @author fireshoes
+ */
+public class TorrentialGearhulk extends CardImpl {
+
+ private static final FilterCard filter = new FilterCard("instant card from your graveyard");
+
+ static {
+ filter.add(new CardTypePredicate(CardType.INSTANT));
+ }
+
+ public TorrentialGearhulk(UUID ownerId) {
+ super(ownerId, 4, "Torrential Gearhulk", Rarity.MYTHIC, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{4}{U}{U}");
+ this.expansionSetCode = "MPS";
+ this.subtype.add("Construct");
+ this.power = new MageInt(5);
+ this.toughness = new MageInt(6);
+
+ // Flash
+ this.addAbility(FlashAbility.getInstance());
+
+ // When Torrential Gearhulk enters the battlefield, you may cast target instant card from your graveyard without paying its mana cost.
+ // If that card would be put into your graveyard this turn, exile it instead.
+ Ability ability = new EntersBattlefieldTriggeredAbility(new TorrentialGearhulkEffect());
+ ability.addTarget(new TargetCardInYourGraveyard(filter));
+ this.addAbility(ability);
+ }
+
+ public TorrentialGearhulk(final TorrentialGearhulk card) {
+ super(card);
+ }
+
+ @Override
+ public TorrentialGearhulk copy() {
+ return new TorrentialGearhulk(this);
+ }
+}
+
+class TorrentialGearhulkEffect extends OneShotEffect {
+
+ TorrentialGearhulkEffect() {
+ super(Outcome.Benefit);
+ this.staticText = "you may cast target instant card from your graveyard without paying its mana cost. "
+ + "If that card would be put into your graveyard this turn, exile it instead";
+ }
+
+ TorrentialGearhulkEffect(final TorrentialGearhulkEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public TorrentialGearhulkEffect copy() {
+ return new TorrentialGearhulkEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Player controller = game.getPlayer(source.getControllerId());
+ if (controller != null) {
+ Card card = game.getCard(this.getTargetPointer().getFirst(game, source));
+ if (card != null) {
+ if (controller.chooseUse(outcome, "Cast " + card.getLogName() + "?", source, game)) {
+ if (controller.cast(card.getSpellAbility(), game, true)) {
+ ContinuousEffect effect = new TorrentialGearhulkReplacementEffect(card.getId());
+ effect.setTargetPointer(new FixedTarget(card.getId(), game.getState().getZoneChangeCounter(card.getId())));
+ game.addEffect(effect, source);
+ }
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+}
+
+class TorrentialGearhulkReplacementEffect extends ReplacementEffectImpl {
+
+ private final UUID cardId;
+
+ TorrentialGearhulkReplacementEffect(UUID cardId) {
+ super(Duration.EndOfTurn, Outcome.Exile);
+ this.cardId = cardId;
+ staticText = "If that card would be put into your graveyard this turn, exile it instead";
+ }
+
+ TorrentialGearhulkReplacementEffect(final TorrentialGearhulkReplacementEffect effect) {
+ super(effect);
+ this.cardId = effect.cardId;
+ }
+
+ @Override
+ public TorrentialGearhulkReplacementEffect copy() {
+ return new TorrentialGearhulkReplacementEffect(this);
+ }
+
+ @Override
+ public boolean replaceEvent(GameEvent event, Ability source, Game game) {
+ Player controller = game.getPlayer(source.getControllerId());
+ Card card = game.getCard(this.cardId);
+ if (controller != null && card != null) {
+ controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.STACK, true);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean checksEventType(GameEvent event, Game game) {
+ return event.getType() == GameEvent.EventType.ZONE_CHANGE;
+ }
+
+ @Override
+ public boolean applies(GameEvent event, Ability source, Game game) {
+ ZoneChangeEvent zEvent = (ZoneChangeEvent) event;
+ return zEvent.getToZone() == Zone.GRAVEYARD
+ && zEvent.getTargetId().equals(this.cardId);
+ }
+}
diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt
index d68985c377a..29c7c9ad278 100644
--- a/Utils/mtg-cards-data.txt
+++ b/Utils/mtg-cards-data.txt
@@ -29776,6 +29776,8 @@ Whirler Virtuoso|Kaladesh|190|U|{1}{U}{R}|Creature - Vedalken Artificer|2|3|When
Aetherflux Reservoir|Kaladesh|192|R|{4}|Artifact|||Whenever you cast a spell, you gain 1 life for each spell you've cast this turn.$Pay 50 life: Aetherflux Reservoir deals 50 damage to target creature or player.|
Aetherworks Marvel|Kaladesh|193|M|{4}|Legendary Artifact|||Whenever a permanent you control is put into a graveyard, you get {E} (an energy counter).${T}, Pay {E}{E}{E}{E}{E}{E}: Look at the top six cards of your library. You may cast a card from among them without paying its mana cost. Put the rest on the bottom of your library in a random order.|
Animation Module|Kaladesh|194|R|{1}|Artifact|||Whenever one or more +1/+1 counters are placed on a permanent you control, you may pay {1}. If you do, create a 1/1 colorless Servo artifact creature token.${3}, {T}: Choose a counter on target permanent or player. Give that permanent or player another counter of that kind.|
+Aradara Express|Kaladesh|195|C|{5}|Artifact - Vehicle|8|6|Menace$Crew 4 (Tap any number of creatures you control with total power 4 or more: This Vehicle becomes an artifact creature until end of turn.)|
+Ballista Charger|Kaladesh|196|U|{5}|Artifact - Vehicle|6|6|Whenever Ballista Charger attacks, it deals 1 damage to target creature or player.$Crew 3 (Tap any number of creatures you control with total power 3 or more: This Vehicle becomes an artifact creature until end of turn.)|
Bomat Bazaar Barge|Kaladesh|198|U|{4}|Artifact - Vehicle|5|5|When Bomat Bazaar Barge enters the battlefield, draw a card.$Crew 3 (Tap any number of creatures you control with total power 3 or more: This Vehicle becomes an artifact creature until end of turn.)|
Bomat Courier|Kaladesh|199|R|{1}|Artifact Creature - Construct|1|1|Haste$Whenever Bomat Courier attacks, exile the top card of your library face down. (You can't look at it.)${R}, Discard your hand, Sacrifice Bomat Courier: Put all cards exiled with Bomat Courier into their owners' hands.|
Chief of the Foundry|Kaladesh|200|U|{3}|Artifact Creature - Construct|2|3|Other artifact creatures you control get +1/+1.|
@@ -29801,6 +29803,7 @@ Ovalchase Dragster|Kaladesh|225|U|{4}|Artifact - Vehicle|6|1|Trample, haste$Crew
Panharmonicon|Kaladesh|226|R|{4}|Artifact|||If an artifact or creature entering the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time.|
Perpetual Timepiece|Kaladesh|227|U|{2}|Artifact|||{T}: Put the top two cards of your library into your graveyard.${2}, Exile Perpetual Timepiece: Shuffle any number of target cards from your graveyard into your libary.|
Prophetic Prism|Kaladesh|229|C|{2}|Artifact|||When Prophetic Prism enters the battlefield, draw a card.${1}, {T}: Add one mana of any color to your mana pool.|
+Renegade Freighter|Kaladesh|230|C|{3}|Artifact - Vehicle|4|3|Whenever Renegade Freighter attacks, it gets +1/+1 and gains trample until end of turn.$Crew 2 (Tap any number of creatures you control with total power 2 or more: This Vehicle becomes an artifact creature until end of turn.)|
Scrapheap Scrounger|Kaladesh|231|R|{2}|Artifact Creature - Construct|3|2|Scrapheap Scrounger can't block.${1}{B}, Exile another creature card from your graveyard: Return Scrapheap Scrounger from your graveyard to the battlefield.|
Self-Assembler|Kaladesh|232|C|{5}|Artifact Creature - Assembly-Worker|4|4|When Self-Assembler enters the battlefield, you may search your library for an Assembly-Worker creature card, reveal it, put it into your hand, then shuffle your library.|
Sky Skiff|Kaladesh|233|C|{2}|Artifact - Vehicle|2|3|Flying$Crew 1 (Tap any number of creatures you control with total power 1 or more: This Vehicle becomes an artifact creature until end of turn.)|