Skip to content

Commit

Permalink
Add set [YNEO] with six cards; add two [J21] cards plus reprints (#12692
Browse files Browse the repository at this point in the history
)
  • Loading branch information
Svyatoslav28597 authored Aug 24, 2024
1 parent 614fae9 commit 44fb947
Show file tree
Hide file tree
Showing 12 changed files with 569 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ private CheckResult(String ACode, ExpansionSet ASet, boolean AHaveCommon, boolea
"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",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
61 changes: 61 additions & 0 deletions Mage.Sets/src/mage/cards/b/BoseijuPathlighter.java
Original file line number Diff line number Diff line change
@@ -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 changes: 41 additions & 0 deletions Mage.Sets/src/mage/cards/d/DragonflyPilot.java
Original file line number Diff line number Diff line change
@@ -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 changes: 75 additions & 0 deletions Mage.Sets/src/mage/cards/e/ExperimentalPilot.java
Original file line number Diff line number Diff line change
@@ -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 changes: 89 additions & 0 deletions Mage.Sets/src/mage/cards/j/JukaiLiberator.java
Original file line number Diff line number Diff line change
@@ -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 changes: 45 additions & 0 deletions Mage.Sets/src/mage/cards/k/KamiOfBambooGroves.java
Original file line number Diff line number Diff line change
@@ -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 changes: 63 additions & 0 deletions Mage.Sets/src/mage/cards/k/KioraTheTidesFury.java
Original file line number Diff line number Diff line change
@@ -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);
}
}

Loading

0 comments on commit 44fb947

Please sign in to comment.