diff --git a/Mage.Sets/src/mage/cards/l/LilianasContract.java b/Mage.Sets/src/mage/cards/l/LilianasContract.java new file mode 100644 index 00000000000..e11a5d929f9 --- /dev/null +++ b/Mage.Sets/src/mage/cards/l/LilianasContract.java @@ -0,0 +1,89 @@ +package mage.cards.l; + +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.condition.Condition; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; +import mage.abilities.effects.common.WinGameSourceControllerEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.TargetController; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author TheElk801 + */ +public final class LilianasContract extends CardImpl { + + public LilianasContract(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{B}{B}"); + + // When Liliana's Contract enters the battlefield, you draw four cards and you lose 4 life. + Ability ability = new EntersBattlefieldTriggeredAbility( + new DrawCardSourceControllerEffect(4) + .setText("you draw four cards") + ); + ability.addEffect( + new LoseLifeSourceControllerEffect(4) + .setText("and you lose 4 life") + ); + this.addAbility(ability); + + // At the beginning of your upkeep, if you control four or more Demons with different names, you win the game. + this.addAbility(new ConditionalTriggeredAbility( + new BeginningOfUpkeepTriggeredAbility( + new WinGameSourceControllerEffect(), + TargetController.YOU, false + ), LilianasContractCondition.instance, + "At the beginning of your upkeep, " + + "if you control four or more Demons with different names, " + + "you win the game." + )); + } + + public LilianasContract(final LilianasContract card) { + super(card); + } + + @Override + public LilianasContract copy() { + return new LilianasContract(this); + } +} + +enum LilianasContractCondition implements Condition { + + instance; + + @Override + public boolean apply(Game game, Ability source) { + Set demonNames = new HashSet(); + for (Permanent permanent : game.getBattlefield().getActivePermanents(source.getControllerId(), game)) { + if (permanent == null + || !permanent.getControllerId().equals(source.getControllerId()) + || !permanent.hasSubtype(SubType.DEMON, game)) { + continue; + } + demonNames.add(permanent.getName()); + if (demonNames.size() > 3) { + return true; + } + } + return false; + } + + @Override + public String toString() { + return "you control four or more Demons with different names"; + } +} diff --git a/Mage.Sets/src/mage/sets/CoreSet2019.java b/Mage.Sets/src/mage/sets/CoreSet2019.java index 9de47c68d28..75a72539b33 100644 --- a/Mage.Sets/src/mage/sets/CoreSet2019.java +++ b/Mage.Sets/src/mage/sets/CoreSet2019.java @@ -129,6 +129,7 @@ public final class CoreSet2019 extends ExpansionSet { cards.add(new SetCardInfo("Lich's Caress", 105, Rarity.COMMON, mage.cards.l.LichsCaress.class)); cards.add(new SetCardInfo("Lightning Mare", 151, Rarity.UNCOMMON, mage.cards.l.LightningMare.class)); cards.add(new SetCardInfo("Lightning Strike", 152, Rarity.UNCOMMON, mage.cards.l.LightningStrike.class)); + cards.add(new SetCardInfo("Liliana's Contract", 107, Rarity.RARE, mage.cards.l.LilianasContract.class)); cards.add(new SetCardInfo("Liliana's Spoils", 294, Rarity.RARE, mage.cards.l.LilianasSpoils.class)); cards.add(new SetCardInfo("Liliana, the Necromancer", 291, Rarity.MYTHIC, mage.cards.l.LilianaTheNecromancer.class)); cards.add(new SetCardInfo("Llanowar Elves", 314, Rarity.COMMON, mage.cards.l.LlanowarElves.class));