diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java index 522ae5632af..c4cabe6430a 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java @@ -109,7 +109,7 @@ public class GathererSets implements Iterable { "NEC", "YNEO", "NEO", "SNC", "NCC", "CLB", "2X2", "DMU", "DMC", "40K", "GN3", "UNF", "BRO", "BRC", "BOT", "J22", "DMR", "ONE", "ONC", "SCH", "MOM", "MOC", "MUL", "MAT", "LTR", "CMM", "WOE", "WHO", "RVR", "WOT", - "WOC", "SPG", "LCI", "LCC", "REX", "PIP", "MKM", "MKC", "CLU", "OTJ", + "WOC", "SPG", "LCI", "LCC", "REX", "PIP", "YMKM", "MKM", "MKC", "CLU", "OTJ", "OTC", "OTP", "BIG", "MH3", "M3C", "ACR", "BLB", "BLC", "DSK", "DSC", "MB2", "FDN", "INR", "J25", "DRC", "DFT", "TDC", "TDM", "FCA", "FIC", "FIN", "SIS", "SIR", "SLD", "AKR", "MD1", "ANB", "LTC", "BRR", "HA1", @@ -181,6 +181,7 @@ public class GathererSets implements Iterable { codeReplacements.put("WTH", "WL"); codeReplacements.put("YMID", "Y22"); codeReplacements.put("YNEO", "Y22NEO"); + } public GathererSets() { diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index 5fc2c4b0f2b..65d7719b7c2 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -570,6 +570,7 @@ public class ScryfallImageSupportCards { add("RVR"); // Ravnica Remastered add("PL24"); // Year of the Dragon 2024 add("PIP"); // Fallout + add("YMKM"); // Alchemy: Murders at Karlov Manor add("MKM"); // Murders at Karlov Manor add("MKC"); // Murders at Karlov Manor Commander add("PSS4"); // MKM Standard Showdown diff --git a/Mage.Sets/src/mage/cards/e/EmporiumThopterist.java b/Mage.Sets/src/mage/cards/e/EmporiumThopterist.java new file mode 100644 index 00000000000..01e95ea29bc --- /dev/null +++ b/Mage.Sets/src/mage/cards/e/EmporiumThopterist.java @@ -0,0 +1,50 @@ +package mage.cards.e; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.ConjureCardEffect; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; +import mage.constants.SubType; +import mage.filter.common.FilterCreaturePermanent; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; + +/** + * + * @author Failure + */ +public final class EmporiumThopterist extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Thopter creatures"); + + static { + filter.add(SubType.THOPTER.getPredicate()); + } + + public EmporiumThopterist(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}"); + + this.subtype.add(SubType.VEDALKEN); + this.subtype.add(SubType.ARTIFICER); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Thopters you control get +2/+0. + this.addAbility(new SimpleStaticAbility(new BoostControlledEffect(2, 0, Duration.WhileOnBattlefield, filter, false))); + // At the beginning of your upkeep, conjure a card named Ornithopter into your hand. + this.addAbility(new BeginningOfUpkeepTriggeredAbility(new ConjureCardEffect("Ornithopter"))); + } + + private EmporiumThopterist(final EmporiumThopterist card) { + super(card); + } + + @Override + public EmporiumThopterist copy() { + return new EmporiumThopterist(this); + } +} diff --git a/Mage.Sets/src/mage/sets/AlchemyMurdersAtKarlovManor.java b/Mage.Sets/src/mage/sets/AlchemyMurdersAtKarlovManor.java new file mode 100644 index 00000000000..32934d78ecd --- /dev/null +++ b/Mage.Sets/src/mage/sets/AlchemyMurdersAtKarlovManor.java @@ -0,0 +1,28 @@ + +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.cards.ExpansionSet.SetCardInfo; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * @author JayDi85 + */ +public final class AlchemyMurdersAtKarlovManor extends ExpansionSet { + + private static final AlchemyMurdersAtKarlovManor instance = new AlchemyMurdersAtKarlovManor(); + + public static AlchemyMurdersAtKarlovManor getInstance() { + return instance; + } + + private AlchemyMurdersAtKarlovManor() { + super("Alchemy: Murders at Karlov Manor", "YMKM", ExpansionSet.buildDate(2024, 3, 5), SetType.SUPPLEMENTAL); + this.hasBasicLands = false; + + cards.add(new SetCardInfo("Emporium Thopterist", 5, Rarity.UNCOMMON, mage.cards.e.EmporiumThopterist.class)); + + + } +} diff --git a/Mage/src/main/java/mage/cards/repository/CardRepository.java b/Mage/src/main/java/mage/cards/repository/CardRepository.java index 1cd472acf52..3c9e0eac492 100644 --- a/Mage/src/main/java/mage/cards/repository/CardRepository.java +++ b/Mage/src/main/java/mage/cards/repository/CardRepository.java @@ -40,6 +40,8 @@ public enum CardRepository { private static final String VERSION_ENTITY_NAME = "card"; private static final long CARD_DB_VERSION = 55; // raise this if db structure was changed private static final long CARD_CONTENT_VERSION = 241; // raise this if new cards were added to the server + private static final long CARD_CONTENT_VERSION_FOUL = 1; // raise this if specifically foul magic patches changed things + private Dao cardsDao; @@ -680,7 +682,7 @@ public enum CardRepository { } public long getContentVersionConstant() { - return CARD_CONTENT_VERSION; + return CARD_CONTENT_VERSION + CARD_CONTENT_VERSION_FOUL; } public void closeDB(boolean writeCompact) {