mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 10:40:06 -08:00
Add set [YNEO] with six cards; add two [J21] cards plus reprints (#12692)
This commit is contained in:
parent
614fae90b7
commit
44fb94782c
12 changed files with 569 additions and 1 deletions
|
|
@ -101,7 +101,7 @@ public class GathererSets implements Iterable<DownloadJob> {
|
|||
"C19", "ELD", "MB1", "GN2", "J20", "THB", "UND", "C20", "IKO", "M21",
|
||||
"JMP", "2XM", "ZNR", "KLR", "CMR", "KHC", "KHM", "TSR", "STX", "STA",
|
||||
"C21", "MH2", "AFR", "AFC", "J21", "MID", "MIC", "VOW", "VOC", "YMID",
|
||||
"NEC", "NEO", "SNC", "NCC", "CLB", "2X2", "DMU", "DMC", "YDMU", "40K", "GN3",
|
||||
"NEC", "YNEO", "NEO", "SNC", "NCC", "CLB", "2X2", "DMU", "DMC", "YDMU", "40K", "GN3",
|
||||
"UNF", "BRO", "BRC", "BOT", "30A", "J22", "SCD", "DMR", "ONE", "ONC",
|
||||
"MOM", "MOC", "MUL", "MAT", "LTR", "CMM", "WOE", "WHO", "RVR", "WOT",
|
||||
"WOC", "SPG", "LCI", "LCC", "REX", "PIP", "MKM", "MKC", "CLU", "OTJ",
|
||||
|
|
|
|||
|
|
@ -503,6 +503,7 @@ public class ScryfallImageSupportCards {
|
|||
add("DBL"); // Innistrad: Double Feature
|
||||
add("CC2"); // Commander Collection: Black
|
||||
add("NEO"); // Kamigawa: Neon Dynasty
|
||||
add("YNEO"); // Alchemy: Kamigawa
|
||||
add("NEC"); // Neon Dynasty Commander
|
||||
add("PL22"); // Year of the Tiger 2022
|
||||
add("SNC"); // Streets of New Capenna
|
||||
|
|
|
|||
61
Mage.Sets/src/mage/cards/b/BoseijuPathlighter.java
Normal file
61
Mage.Sets/src/mage/cards/b/BoseijuPathlighter.java
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
package mage.cards.b;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.common.DraftFromSpellbookEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
||||
/**
|
||||
* @author Svyatoslav28
|
||||
*/
|
||||
public final class BoseijuPathlighter extends CardImpl {
|
||||
|
||||
private static final List<String> spellbook = Collections.unmodifiableList(Arrays.asList(
|
||||
"Bonders' Enclave",
|
||||
"Boseiju, Who Endures",
|
||||
"Emergence Zone",
|
||||
"Field of Ruin",
|
||||
"Gingerbread Cabin",
|
||||
"Hall of Oracles",
|
||||
"Khalni Garden",
|
||||
"Memorial to Unity",
|
||||
"Mobilized District",
|
||||
"Radiant Fountain",
|
||||
"Roadside Reliquary",
|
||||
"Scavenger Grounds",
|
||||
"Secluded Courtyard",
|
||||
"Thriving Grove",
|
||||
"Treasure vault"
|
||||
));
|
||||
|
||||
public BoseijuPathlighter(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
|
||||
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.ROGUE);
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// When Boseiju Pathlighter enters the battlefield, draft a card from Boseiju Pathlighter's spellbook.
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new DraftFromSpellbookEffect(spellbook));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private BoseijuPathlighter(final BoseijuPathlighter card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BoseijuPathlighter copy() {
|
||||
return new BoseijuPathlighter(this);
|
||||
}
|
||||
}
|
||||
41
Mage.Sets/src/mage/cards/d/DragonflyPilot.java
Normal file
41
Mage.Sets/src/mage/cards/d/DragonflyPilot.java
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
package mage.cards.d;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.CrewIncreasedPowerAbility;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.common.ConjureCardEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
||||
/**
|
||||
* @author Svyatoslav28
|
||||
*/
|
||||
public final class DragonflyPilot extends CardImpl {
|
||||
|
||||
public DragonflyPilot(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}");
|
||||
|
||||
this.subtype.add(SubType.FOX);
|
||||
this.subtype.add(SubType.PILOT);
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// When Dragonfly Pilot enters the battlefield, conjure a card named Dragonfly Suit into your hand.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new ConjureCardEffect("Dragonfly Suit")));
|
||||
// Dragonfly Pilot crews Vehicles as though its power were 2 greater.
|
||||
this.addAbility(new CrewIncreasedPowerAbility());
|
||||
}
|
||||
|
||||
private DragonflyPilot(final DragonflyPilot card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DragonflyPilot copy() {
|
||||
return new DragonflyPilot(this);
|
||||
}
|
||||
}
|
||||
75
Mage.Sets/src/mage/cards/e/ExperimentalPilot.java
Normal file
75
Mage.Sets/src/mage/cards/e/ExperimentalPilot.java
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
package mage.cards.e;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.CrewIncreasedPowerAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.DiscardTargetCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.DraftFromSpellbookEffect;
|
||||
import mage.abilities.keyword.WardAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.target.common.TargetCardInHand;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author Svyatoslav28
|
||||
*/
|
||||
public final class ExperimentalPilot extends CardImpl {
|
||||
|
||||
private static final List<String> spellbook = Collections.unmodifiableList(Arrays.asList(
|
||||
"Bomat Bazaar Barge",
|
||||
"Cultivator's Caravan",
|
||||
"Daredevil Dragster",
|
||||
"Demolition Stomper",
|
||||
"Futurist Sentinel",
|
||||
"High-Speed Hoverbike",
|
||||
"Mechtitan Core",
|
||||
"Mindlink Mech",
|
||||
"Mobile Garrison",
|
||||
"Ovalchase Dragster",
|
||||
"Raiders' Karve",
|
||||
"Reckoner Bankbuster",
|
||||
"Silent Submersible",
|
||||
"Thundering Chariot",
|
||||
"Untethered Express"
|
||||
));
|
||||
|
||||
public ExperimentalPilot(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{U}");
|
||||
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.PILOT);
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// Ward {2}
|
||||
this.addAbility(new WardAbility(new ManaCostsImpl<>("{2}")));
|
||||
|
||||
// {U}, Discard two cards: Draft a card from Experimental Pilot's spellbook.
|
||||
Ability ability = new SimpleActivatedAbility(
|
||||
new DraftFromSpellbookEffect(spellbook), new ManaCostsImpl<>("{U}")
|
||||
);
|
||||
ability.addCost(new DiscardTargetCost(new TargetCardInHand(2, StaticFilters.FILTER_CARD_CARDS)));
|
||||
this.addAbility(ability);
|
||||
// Experimental Pilot crews Vehicles as though its power were 2 greater.
|
||||
this.addAbility(new CrewIncreasedPowerAbility());
|
||||
}
|
||||
|
||||
private ExperimentalPilot(final ExperimentalPilot card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ExperimentalPilot copy() {
|
||||
return new ExperimentalPilot(this);
|
||||
}
|
||||
}
|
||||
89
Mage.Sets/src/mage/cards/j/JukaiLiberator.java
Normal file
89
Mage.Sets/src/mage/cards/j/JukaiLiberator.java
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
|
||||
package mage.cards.j;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.keyword.NinjutsuAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
||||
/**
|
||||
* @author Svyatoslav28
|
||||
*/
|
||||
|
||||
public final class JukaiLiberator extends CardImpl {
|
||||
|
||||
public JukaiLiberator(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
|
||||
|
||||
this.subtype.add(SubType.SNAKE);
|
||||
this.subtype.add(SubType.NINJA);
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// Ninjutsu {1}{G}
|
||||
this.addAbility(new NinjutsuAbility("{1}{G}"));
|
||||
|
||||
// Whenever Jukai Liberator deals combat damage to a player, choose land or nonland. Seek a permanent card of the chosen type.
|
||||
Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new JukaiLiberatorEffect());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private JukaiLiberator(final JukaiLiberator card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JukaiLiberator copy() {
|
||||
return new JukaiLiberator(this);
|
||||
}
|
||||
}
|
||||
|
||||
class JukaiLiberatorEffect extends OneShotEffect {
|
||||
|
||||
JukaiLiberatorEffect() {
|
||||
super(Outcome.Benefit);
|
||||
staticText = "choose land or nonland." +
|
||||
" Seek a permanent card of the chosen kind.";
|
||||
}
|
||||
|
||||
private JukaiLiberatorEffect(final JukaiLiberatorEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JukaiLiberatorEffect copy() {
|
||||
return new JukaiLiberatorEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player player = game.getPlayer(source.getControllerId());
|
||||
if (player == null) {
|
||||
return false;
|
||||
}
|
||||
boolean land = player.chooseUse(
|
||||
Outcome.Neutral, "Choose land or nonland", null,
|
||||
"Land", "Nonland", source, game
|
||||
);
|
||||
if (land) {
|
||||
player.seekCard(StaticFilters.FILTER_CARD_LAND, source, game);
|
||||
} else {
|
||||
player.seekCard(StaticFilters.FILTER_CARD_NON_LAND, source, game);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
45
Mage.Sets/src/mage/cards/k/KamiOfBambooGroves.java
Normal file
45
Mage.Sets/src/mage/cards/k/KamiOfBambooGroves.java
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
package mage.cards.k;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.common.ConjureCardEffect;
|
||||
import mage.abilities.effects.common.PutCardFromHandOntoBattlefieldEffect;
|
||||
import mage.abilities.keyword.ChannelAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author Svyatoslav28
|
||||
*/
|
||||
public final class KamiOfBambooGroves extends CardImpl {
|
||||
|
||||
public KamiOfBambooGroves(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{G}");
|
||||
|
||||
this.subtype.add(SubType.SPIRIT);
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// When Kami of Bamboo Groves enters the battlefield, you may put a land card from your hand onto the battlefield tapped.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new PutCardFromHandOntoBattlefieldEffect(
|
||||
StaticFilters.FILTER_CARD_LAND_A, false, true
|
||||
), false));
|
||||
// Channel -- {2}{G}, Discard Kami of Bamboo Groves: Conjure two cards named Forest into your hand.
|
||||
this.addAbility(new ChannelAbility("{2}{G}", new ConjureCardEffect("Forest", Zone.HAND, 2)));
|
||||
}
|
||||
|
||||
private KamiOfBambooGroves(final KamiOfBambooGroves card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public KamiOfBambooGroves copy() {
|
||||
return new KamiOfBambooGroves(this);
|
||||
}
|
||||
}
|
||||
63
Mage.Sets/src/mage/cards/k/KioraTheTidesFury.java
Normal file
63
Mage.Sets/src/mage/cards/k/KioraTheTidesFury.java
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
package mage.cards.k;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.LoyaltyAbility;
|
||||
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||
import mage.abilities.effects.common.*;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.permanent.token.KrakenToken;
|
||||
import mage.target.TargetPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author Svyatoslav28
|
||||
*/
|
||||
public final class KioraTheTidesFury extends CardImpl {
|
||||
private static final FilterPermanent filter = new FilterPermanent (SubType.KRAKEN, "Kraken");
|
||||
|
||||
public KioraTheTidesFury(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{3}{U}");
|
||||
this.supertype.add(SuperType.LEGENDARY);
|
||||
this.subtype.add(SubType.KIORA);
|
||||
|
||||
this.setStartingLoyalty(4);
|
||||
|
||||
// +1: Conjure a card named Kraken Hatchling into your hand.
|
||||
LoyaltyAbility ability = new LoyaltyAbility((new ConjureCardEffect("Kraken Hatchling")), 1);
|
||||
this.addAbility(ability);
|
||||
|
||||
// +1: Untap target creature or land. Prevent all damage that would be dealt to and dealt by that permanent until your next turn.
|
||||
Ability secondAbility = new LoyaltyAbility(new UntapTargetEffect(), 1);
|
||||
secondAbility.addEffect(new PreventDamageToTargetEffect(Duration.UntilYourNextTurn)
|
||||
.setText("Prevent all damage that would be dealt to"));
|
||||
secondAbility.addEffect(new PreventDamageByTargetEffect(Duration.UntilYourNextTurn, false)
|
||||
.setText(" and dealt by that permanent until your next turn."));
|
||||
secondAbility.addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_CREATURE_OR_LAND));
|
||||
this.addAbility(secondAbility);
|
||||
|
||||
|
||||
// −3: You may sacrifice a Kraken. If you do, create an 8/8 blue Kraken creature token.
|
||||
this.addAbility(new LoyaltyAbility(new DoIfCostPaid(
|
||||
new CreateTokenEffect(new KrakenToken()),
|
||||
new SacrificeTargetCost(filter)),
|
||||
-3));
|
||||
}
|
||||
|
||||
private KioraTheTidesFury(final KioraTheTidesFury card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public KioraTheTidesFury copy() {
|
||||
return new KioraTheTidesFury(this);
|
||||
}
|
||||
}
|
||||
|
||||
94
Mage.Sets/src/mage/cards/s/SubversiveAcolyte.java
Normal file
94
Mage.Sets/src/mage/cards/s/SubversiveAcolyte.java
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
package mage.cards.s;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.Mode;
|
||||
import mage.abilities.common.ActivateOncePerGameActivatedAbility;
|
||||
import mage.abilities.common.DealtDamageToSourceTriggeredAbility;
|
||||
import mage.abilities.costs.common.PayLifeCost;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.dynamicvalue.common.SavedDamageValue;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.SacrificeControllerEffect;
|
||||
import mage.abilities.effects.common.continuous.AddCardSubTypeSourceEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||
import mage.abilities.keyword.LifelinkAbility;
|
||||
import mage.abilities.keyword.TrampleAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author Svyatoslav28
|
||||
*/
|
||||
public final class SubversiveAcolyte extends CardImpl {
|
||||
|
||||
public SubversiveAcolyte(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}");
|
||||
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// {2}: Pay 2 life: Choose one. Activate only once.
|
||||
// * Subversive Acolyte becomes a Human Cleric. It gets +1/+1 and gains lifelink.
|
||||
Ability ability = new ActivateOncePerGameActivatedAbility(Zone.BATTLEFIELD, new AddCardSubTypeSourceEffect(Duration.WhileOnBattlefield, SubType.HUMAN, SubType.CLERIC).setText("{this} becomes a Human Cleric"),
|
||||
new GenericManaCost(2), TimingRule.INSTANT);
|
||||
ability.addEffect(new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield).setText("It gains +1/+1"));
|
||||
ability.addEffect(new GainAbilitySourceEffect(LifelinkAbility.getInstance(), Duration.WhileOnBattlefield).setText(" and gains lifelink"));
|
||||
ability.addCost(new PayLifeCost(2));
|
||||
|
||||
// * Subversive Acolyte becomes a Phyrexian. It gets +3/+2 and gains trample and “Whenever this creature is dealt damage, sacrifice that many permanents.”
|
||||
ability.addMode(new Mode(new PhyrexianModeEffect()));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private SubversiveAcolyte(final SubversiveAcolyte card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SubversiveAcolyte copy() {
|
||||
return new SubversiveAcolyte(this);
|
||||
}
|
||||
}
|
||||
|
||||
class PhyrexianModeEffect extends OneShotEffect {
|
||||
|
||||
PhyrexianModeEffect() {
|
||||
super(Outcome.Benefit);
|
||||
staticText = "{this} becomes a Phyrexian. It gets +3/+2 " +
|
||||
"and gains trample and \"Whenever this creature is dealt damage, sacrifice that many permanents.\"";
|
||||
}
|
||||
|
||||
private PhyrexianModeEffect(final PhyrexianModeEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PhyrexianModeEffect copy() {
|
||||
return new PhyrexianModeEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Permanent permanent = source.getSourcePermanentIfItStillExists(game);
|
||||
if (permanent == null) {
|
||||
return false;
|
||||
}
|
||||
game.addEffect(new AddCardSubTypeSourceEffect(Duration.WhileOnBattlefield, SubType.PHYREXIAN), source);
|
||||
game.addEffect(new BoostSourceEffect(3, 2, Duration.WhileOnBattlefield), source);
|
||||
game.addEffect(new GainAbilitySourceEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield), source);
|
||||
game.addEffect(new GainAbilitySourceEffect(
|
||||
new DealtDamageToSourceTriggeredAbility(
|
||||
new SacrificeControllerEffect(StaticFilters.FILTER_PERMANENTS, SavedDamageValue.MANY, ""),false),
|
||||
Duration.WhileOnBattlefield), source);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
48
Mage.Sets/src/mage/cards/s/SwarmSaboteur.java
Normal file
48
Mage.Sets/src/mage/cards/s/SwarmSaboteur.java
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
package mage.cards.s;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
|
||||
import mage.abilities.effects.common.ConjureCardEffect;
|
||||
import mage.abilities.keyword.DeathtouchAbility;
|
||||
import mage.abilities.keyword.NinjutsuAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author Svyatoslav28
|
||||
*/
|
||||
public final class SwarmSaboteur extends CardImpl {
|
||||
|
||||
public SwarmSaboteur(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}");
|
||||
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.NINJA);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// Ninjutsu {B}
|
||||
this.addAbility(new NinjutsuAbility("{B}"));
|
||||
|
||||
// Deathtouch
|
||||
this.addAbility(DeathtouchAbility.getInstance());
|
||||
|
||||
// Whenever Swarm Saboteur deals combat damage to a player, conjure a card named Virus Beetle into your hand.
|
||||
this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(
|
||||
(new ConjureCardEffect("Virus Beetle"))
|
||||
));
|
||||
}
|
||||
|
||||
private SwarmSaboteur(final SwarmSaboteur card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SwarmSaboteur copy() {
|
||||
return new SwarmSaboteur(this);
|
||||
}
|
||||
}
|
||||
32
Mage.Sets/src/mage/sets/AlchemyKamigawa.java
Normal file
32
Mage.Sets/src/mage/sets/AlchemyKamigawa.java
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
package mage.sets;
|
||||
|
||||
import mage.cards.ExpansionSet;
|
||||
import mage.constants.Rarity;
|
||||
import mage.constants.SetType;
|
||||
|
||||
/**
|
||||
* @author karapuzz14
|
||||
*/
|
||||
public final class AlchemyKamigawa extends ExpansionSet {
|
||||
|
||||
private static final AlchemyKamigawa instance = new AlchemyKamigawa();
|
||||
|
||||
public static AlchemyKamigawa getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
private AlchemyKamigawa() {
|
||||
super("Alchemy: Kamigawa", "YNEO", ExpansionSet.buildDate(2022, 3, 17), SetType.MAGIC_ARENA);
|
||||
this.blockName = "Alchemy";
|
||||
this.hasBoosters = false;
|
||||
this.hasBasicLands = false;
|
||||
|
||||
cards.add(new SetCardInfo("Boseiju Pathlighter", 26, Rarity.RARE, mage.cards.b.BoseijuPathlighter.class));
|
||||
cards.add(new SetCardInfo("Dragonfly Pilot", 1, Rarity.UNCOMMON, mage.cards.d.DragonflyPilot.class));
|
||||
cards.add(new SetCardInfo("Experimental Pilot", 6, Rarity.UNCOMMON, mage.cards.e.ExperimentalPilot.class));
|
||||
cards.add(new SetCardInfo("Jukai Liberator", 27, Rarity.RARE, mage.cards.j.JukaiLiberator.class));
|
||||
cards.add(new SetCardInfo("Kami of Bamboo Groves", 24, Rarity.UNCOMMON, mage.cards.k.KamiOfBambooGroves.class));
|
||||
cards.add(new SetCardInfo("Swarm Saboteur", 13, Rarity.RARE, mage.cards.s.SwarmSaboteur.class));
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -43,6 +43,7 @@ public final class JumpstartHistoricHorizons extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Arcbound Whelp", 410, Rarity.UNCOMMON, mage.cards.a.ArcboundWhelp.class));
|
||||
cards.add(new SetCardInfo("Archfiend of Sorrows", 285, Rarity.UNCOMMON, mage.cards.a.ArchfiendOfSorrows.class));
|
||||
cards.add(new SetCardInfo("Archmage's Charm", 166, Rarity.RARE, mage.cards.a.ArchmagesCharm.class));
|
||||
cards.add(new SetCardInfo("Assault Strobe", 786, Rarity.COMMON, mage.cards.a.AssaultStrobe.class));
|
||||
cards.add(new SetCardInfo("Arcus Acolyte", 678, Rarity.UNCOMMON, mage.cards.a.ArcusAcolyte.class));
|
||||
cards.add(new SetCardInfo("Asylum Visitor", 286, Rarity.RARE, mage.cards.a.AsylumVisitor.class));
|
||||
cards.add(new SetCardInfo("Awaken the Bear", 542, Rarity.COMMON, mage.cards.a.AwakenTheBear.class));
|
||||
|
|
@ -98,6 +99,7 @@ public final class JumpstartHistoricHorizons extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Cordial Vampire", 306, Rarity.RARE, mage.cards.c.CordialVampire.class));
|
||||
cards.add(new SetCardInfo("Crocanura", 557, Rarity.COMMON, mage.cards.c.Crocanura.class));
|
||||
cards.add(new SetCardInfo("Dark Salvation", 308, Rarity.RARE, mage.cards.d.DarkSalvation.class));
|
||||
cards.add(new SetCardInfo("Dark Ritual", 783, Rarity.COMMON, mage.cards.d.DarkRitual.class));
|
||||
cards.add(new SetCardInfo("Death Wind", 314, Rarity.COMMON, mage.cards.d.DeathWind.class));
|
||||
cards.add(new SetCardInfo("Deepwood Denizen", 558, Rarity.COMMON, mage.cards.d.DeepwoodDenizen.class));
|
||||
cards.add(new SetCardInfo("Devouring Light", 67, Rarity.UNCOMMON, mage.cards.d.DevouringLight.class));
|
||||
|
|
@ -112,6 +114,7 @@ public final class JumpstartHistoricHorizons extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Dragon's Rage Channeler", 438, Rarity.UNCOMMON, mage.cards.d.DragonsRageChanneler.class));
|
||||
cards.add(new SetCardInfo("Dregscape Sliver", 319, Rarity.UNCOMMON, mage.cards.d.DregscapeSliver.class));
|
||||
cards.add(new SetCardInfo("Drey Keeper", 687, Rarity.COMMON, mage.cards.d.DreyKeeper.class));
|
||||
cards.add(new SetCardInfo("Duress", 784, Rarity.COMMON, mage.cards.d.Duress.class));
|
||||
cards.add(new SetCardInfo("Duskshell Crawler", 561, Rarity.COMMON, mage.cards.d.DuskshellCrawler.class));
|
||||
cards.add(new SetCardInfo("Echoing Return", 320, Rarity.COMMON, mage.cards.e.EchoingReturn.class));
|
||||
cards.add(new SetCardInfo("Elusive Krasis", 688, Rarity.UNCOMMON, mage.cards.e.ElusiveKrasis.class));
|
||||
|
|
@ -136,6 +139,8 @@ public final class JumpstartHistoricHorizons extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Fists of Flame", 443, Rarity.COMMON, mage.cards.f.FistsOfFlame.class));
|
||||
cards.add(new SetCardInfo("Fleshbag Marauder", 331, Rarity.UNCOMMON, mage.cards.f.FleshbagMarauder.class));
|
||||
cards.add(new SetCardInfo("Floodhound", 193, Rarity.COMMON, mage.cards.f.Floodhound.class));
|
||||
cards.add(new SetCardInfo("Fog", 789, Rarity.COMMON, mage.cards.f.Fog.class));
|
||||
cards.add(new SetCardInfo("Force Spike", 780, Rarity.COMMON, mage.cards.f.ForceSpike.class));
|
||||
cards.add(new SetCardInfo("Foul Watcher", 194, Rarity.COMMON, mage.cards.f.FoulWatcher.class));
|
||||
cards.add(new SetCardInfo("Foundry Street Denizen", 446, Rarity.COMMON, mage.cards.f.FoundryStreetDenizen.class));
|
||||
cards.add(new SetCardInfo("Funnel-Web Recluse", 573, Rarity.COMMON, mage.cards.f.FunnelWebRecluse.class));
|
||||
|
|
@ -143,6 +148,7 @@ public final class JumpstartHistoricHorizons extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Galvanic Relay", 450, Rarity.COMMON, mage.cards.g.GalvanicRelay.class));
|
||||
cards.add(new SetCardInfo("Geomancer's Gambit", 452, Rarity.COMMON, mage.cards.g.GeomancersGambit.class));
|
||||
cards.add(new SetCardInfo("Ghost-Lit Drifter", 196, Rarity.UNCOMMON, mage.cards.g.GhostLitDrifter.class));
|
||||
cards.add(new SetCardInfo("Giant Growth", 790, Rarity.COMMON, mage.cards.g.GiantGrowth.class));
|
||||
cards.add(new SetCardInfo("Gilded Light", 86, Rarity.COMMON, mage.cards.g.GildedLight.class));
|
||||
cards.add(new SetCardInfo("Gilt-Blade Prowler", 332, Rarity.COMMON, mage.cards.g.GiltBladeProwler.class));
|
||||
cards.add(new SetCardInfo("Glimmer Bairn", 576, Rarity.COMMON, mage.cards.g.GlimmerBairn.class));
|
||||
|
|
@ -171,6 +177,7 @@ public final class JumpstartHistoricHorizons extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Hollowhead Sliver", 469, Rarity.UNCOMMON, mage.cards.h.HollowheadSliver.class));
|
||||
cards.add(new SetCardInfo("Hordeling Outburst", 470, Rarity.UNCOMMON, mage.cards.h.HordelingOutburst.class));
|
||||
cards.add(new SetCardInfo("Hunting Pack", 587, Rarity.UNCOMMON, mage.cards.h.HuntingPack.class));
|
||||
cards.add(new SetCardInfo("Ichor Wellspring", 763, Rarity.COMMON, mage.cards.i.IchorWellspring.class));
|
||||
cards.add(new SetCardInfo("Igneous Elemental", 471, Rarity.COMMON, mage.cards.i.IgneousElemental.class));
|
||||
cards.add(new SetCardInfo("Implement of Combustion", 744, Rarity.COMMON, mage.cards.i.ImplementOfCombustion.class));
|
||||
cards.add(new SetCardInfo("Impostor of the Sixth Pride", 96, Rarity.COMMON, mage.cards.i.ImpostorOfTheSixthPride.class));
|
||||
|
|
@ -186,8 +193,10 @@ public final class JumpstartHistoricHorizons extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Just the Wind", 205, Rarity.COMMON, mage.cards.j.JustTheWind.class));
|
||||
cards.add(new SetCardInfo("Khalni Garden", 770, Rarity.COMMON, mage.cards.k.KhalniGarden.class));
|
||||
cards.add(new SetCardInfo("King of the Pride", 99, Rarity.UNCOMMON, mage.cards.k.KingOfThePride.class));
|
||||
cards.add(new SetCardInfo("Kiora, the Tide's Fury", 10, Rarity.MYTHIC, mage.cards.k.KioraTheTidesFury.class));
|
||||
cards.add(new SetCardInfo("Kitchen Imp", 342, Rarity.COMMON, mage.cards.k.KitchenImp.class));
|
||||
cards.add(new SetCardInfo("Kor Skyfisher", 100, Rarity.COMMON, mage.cards.k.KorSkyfisher.class));
|
||||
cards.add(new SetCardInfo("Kraken Hatchling", 781, Rarity.COMMON, mage.cards.k.KrakenHatchling.class));
|
||||
cards.add(new SetCardInfo("Krenko's Command", 480, Rarity.COMMON, mage.cards.k.KrenkosCommand.class));
|
||||
cards.add(new SetCardInfo("Kuldotha Flamefiend", 481, Rarity.UNCOMMON, mage.cards.k.KuldothaFlamefiend.class));
|
||||
cards.add(new SetCardInfo("Lancer Sliver", 102, Rarity.COMMON, mage.cards.l.LancerSliver.class));
|
||||
|
|
@ -196,7 +205,9 @@ public final class JumpstartHistoricHorizons extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Lazotep Chancellor", 702, Rarity.UNCOMMON, mage.cards.l.LazotepChancellor.class));
|
||||
cards.add(new SetCardInfo("Leeching Sliver", 344, Rarity.UNCOMMON, mage.cards.l.LeechingSliver.class));
|
||||
cards.add(new SetCardInfo("Legion Vanguard", 345, Rarity.UNCOMMON, mage.cards.l.LegionVanguard.class));
|
||||
cards.add(new SetCardInfo("Lightning Bolt", 787, Rarity.COMMON, mage.cards.l.LightningBolt.class));
|
||||
cards.add(new SetCardInfo("Lightning Spear", 484, Rarity.COMMON, mage.cards.l.LightningSpear.class));
|
||||
cards.add(new SetCardInfo("Light of Hope", 777, Rarity.COMMON, mage.cards.l.LightOfHope.class));
|
||||
cards.add(new SetCardInfo("Llanowar Tribe", 598, Rarity.UNCOMMON, mage.cards.l.LlanowarTribe.class));
|
||||
cards.add(new SetCardInfo("Lonis, Cryptozoologist", 703, Rarity.RARE, mage.cards.l.LonisCryptozoologist.class));
|
||||
cards.add(new SetCardInfo("Mad Prophet", 487, Rarity.COMMON, mage.cards.m.MadProphet.class));
|
||||
|
|
@ -236,6 +247,7 @@ public final class JumpstartHistoricHorizons extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Pashalik Mons", 495, Rarity.RARE, mage.cards.p.PashalikMons.class));
|
||||
cards.add(new SetCardInfo("Phantasmal Form", 229, Rarity.COMMON, mage.cards.p.PhantasmalForm.class));
|
||||
cards.add(new SetCardInfo("Phantom Ninja", 230, Rarity.COMMON, mage.cards.p.PhantomNinja.class));
|
||||
cards.add(new SetCardInfo("Ponder", 782, Rarity.COMMON, mage.cards.p.Ponder.class));
|
||||
cards.add(new SetCardInfo("Pondering Mage", 231, Rarity.COMMON, mage.cards.p.PonderingMage.class));
|
||||
cards.add(new SetCardInfo("Predatory Sliver", 619, Rarity.COMMON, mage.cards.p.PredatorySliver.class));
|
||||
cards.add(new SetCardInfo("Prey's Vengeance", 620, Rarity.COMMON, mage.cards.p.PreysVengeance.class));
|
||||
|
|
@ -251,10 +263,12 @@ public final class JumpstartHistoricHorizons extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Ravenous Squirrel", 728, Rarity.UNCOMMON, mage.cards.r.RavenousSquirrel.class));
|
||||
cards.add(new SetCardInfo("Raving Visionary", 234, Rarity.UNCOMMON, mage.cards.r.RavingVisionary.class));
|
||||
cards.add(new SetCardInfo("Reap the Past", 710, Rarity.RARE, mage.cards.r.ReapThePast.class));
|
||||
cards.add(new SetCardInfo("Reassembling Skeleton", 785, Rarity.UNCOMMON, mage.cards.r.ReassemblingSkeleton.class));
|
||||
cards.add(new SetCardInfo("Recalibrate", 235, Rarity.COMMON, mage.cards.r.Recalibrate.class));
|
||||
cards.add(new SetCardInfo("Reckless Charge", 500, Rarity.COMMON, mage.cards.r.RecklessCharge.class));
|
||||
cards.add(new SetCardInfo("Reckless Racer", 501, Rarity.UNCOMMON, mage.cards.r.RecklessRacer.class));
|
||||
cards.add(new SetCardInfo("Reckless Wurm", 502, Rarity.UNCOMMON, mage.cards.r.RecklessWurm.class));
|
||||
cards.add(new SetCardInfo("Regal Force", 791, Rarity.RARE, mage.cards.r.RegalForce.class));
|
||||
cards.add(new SetCardInfo("Renegade Tactics", 503, Rarity.COMMON, mage.cards.r.RenegadeTactics.class));
|
||||
cards.add(new SetCardInfo("Reprobation", 116, Rarity.COMMON, mage.cards.r.Reprobation.class));
|
||||
cards.add(new SetCardInfo("Restoration Angel", 117, Rarity.RARE, mage.cards.r.RestorationAngel.class));
|
||||
|
|
@ -288,6 +302,7 @@ public final class JumpstartHistoricHorizons extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Servant of the Scale", 635, Rarity.COMMON, mage.cards.s.ServantOfTheScale.class));
|
||||
cards.add(new SetCardInfo("Shambleshark", 714, Rarity.COMMON, mage.cards.s.Shambleshark.class));
|
||||
cards.add(new SetCardInfo("Shelter", 133, Rarity.COMMON, mage.cards.s.Shelter.class));
|
||||
cards.add(new SetCardInfo("Shivan Drgaon", 788, Rarity.RARE, mage.cards.s.ShivanDragon.class));
|
||||
cards.add(new SetCardInfo("Shiv's Embrace", 511, Rarity.UNCOMMON, mage.cards.s.ShivsEmbrace.class));
|
||||
cards.add(new SetCardInfo("Shoreline Scout", 12, Rarity.UNCOMMON, mage.cards.s.ShorelineScout.class));
|
||||
cards.add(new SetCardInfo("Sinister Starfish", 383, Rarity.COMMON, mage.cards.s.SinisterStarfish.class));
|
||||
|
|
@ -316,13 +331,16 @@ public final class JumpstartHistoricHorizons extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Sterling Grove", 720, Rarity.RARE, mage.cards.s.SterlingGrove.class));
|
||||
cards.add(new SetCardInfo("Stirring Address", 145, Rarity.COMMON, mage.cards.s.StirringAddress.class));
|
||||
cards.add(new SetCardInfo("Stitchwing Skaab", 256, Rarity.UNCOMMON, mage.cards.s.StitchwingSkaab.class));
|
||||
cards.add(new SetCardInfo("Stormfront Pegasus", 778, Rarity.UNCOMMON, mage.cards.s.StormfrontPegasus.class));
|
||||
cards.add(new SetCardInfo("Storm God's Oracle", 721, Rarity.COMMON, mage.cards.s.StormGodsOracle.class));
|
||||
cards.add(new SetCardInfo("Strike It Rich", 521, Rarity.UNCOMMON, mage.cards.s.StrikeItRich.class));
|
||||
cards.add(new SetCardInfo("Striking Sliver", 522, Rarity.COMMON, mage.cards.s.StrikingSliver.class));
|
||||
cards.add(new SetCardInfo("Striped Bears", 648, Rarity.COMMON, mage.cards.s.StripedBears.class));
|
||||
cards.add(new SetCardInfo("Subversive Acolyte", 19, Rarity.RARE, mage.cards.s.SubversiveAcolyte.class));
|
||||
cards.add(new SetCardInfo("Sudden Edict", 389, Rarity.UNCOMMON, mage.cards.s.SuddenEdict.class));
|
||||
cards.add(new SetCardInfo("Sustainer of the Realm", 146, Rarity.COMMON, mage.cards.s.SustainerOfTheRealm.class));
|
||||
cards.add(new SetCardInfo("Svyelun of Sea and Sky", 259, Rarity.MYTHIC, mage.cards.s.SvyelunOfSeaAndSky.class));
|
||||
cards.add(new SetCardInfo("Swords to Plowshares", 779, Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class));
|
||||
cards.add(new SetCardInfo("Sylvan Anthem", 649, Rarity.RARE, mage.cards.s.SylvanAnthem.class));
|
||||
cards.add(new SetCardInfo("Sythis, Harvest's Hand", 722, Rarity.RARE, mage.cards.s.SythisHarvestsHand.class));
|
||||
cards.add(new SetCardInfo("Tajuru Pathwarden", 650, Rarity.COMMON, mage.cards.t.TajuruPathwarden.class));
|
||||
|
|
@ -343,6 +361,7 @@ public final class JumpstartHistoricHorizons extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Tireless Provisioner", 655, Rarity.UNCOMMON, mage.cards.t.TirelessProvisioner.class));
|
||||
cards.add(new SetCardInfo("Tourach's Canticle", 393, Rarity.COMMON, mage.cards.t.TourachsCanticle.class));
|
||||
cards.add(new SetCardInfo("Treasure Keeper", 758, Rarity.UNCOMMON, mage.cards.t.TreasureKeeper.class));
|
||||
cards.add(new SetCardInfo("Tropical Island", 792, Rarity.RARE, mage.cards.t.TropicalIsland.class));
|
||||
cards.add(new SetCardInfo("Trumpeting Herd", 659, Rarity.COMMON, mage.cards.t.TrumpetingHerd.class));
|
||||
cards.add(new SetCardInfo("Twin-Silk Spider", 660, Rarity.COMMON, mage.cards.t.TwinSilkSpider.class));
|
||||
cards.add(new SetCardInfo("Ulvenwald Mysteries", 661, Rarity.UNCOMMON, mage.cards.u.UlvenwaldMysteries.class));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue