From b97719fbb64dc6f7f0e3129c57057ce5c10e6821 Mon Sep 17 00:00:00 2001 From: Noah Gleason Date: Sat, 23 Jun 2018 17:30:57 -0400 Subject: [PATCH 1/2] Add Delirium, not recognized as a card --- Mage.Sets/src/mage/cards/d/DeliriumCard.java | 89 +++++++++++++++++++ Mage.Sets/src/mage/sets/Mirage.java | 1 + .../ControllerIsActivePlayerPredicate.java | 27 ++++++ 3 files changed, 117 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/d/DeliriumCard.java create mode 100644 Mage/src/main/java/mage/filter/predicate/permanent/ControllerIsActivePlayerPredicate.java diff --git a/Mage.Sets/src/mage/cards/d/DeliriumCard.java b/Mage.Sets/src/mage/cards/d/DeliriumCard.java new file mode 100644 index 00000000000..2cc0631b0b0 --- /dev/null +++ b/Mage.Sets/src/mage/cards/d/DeliriumCard.java @@ -0,0 +1,89 @@ +package mage.cards.d; + +import java.util.UUID; + +import mage.abilities.Ability; +import mage.abilities.common.CastOnlyIfConditionIsTrueAbility; +import mage.abilities.condition.common.OnOpponentsTurnCondition; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.PreventCombatDamageBySourceEffect; +import mage.abilities.effects.common.PreventCombatDamageToSourceEffect; +import mage.abilities.effects.common.TapTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.ControllerIsActivePlayerPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author noahg + */ +public final class DeliriumCard extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); + + static { + filter.add(new ControllerIsActivePlayerPredicate()); + } + + public DeliriumCard(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{B}{R}"); + + + // Cast this spell only during an opponent’s turn. + this.addAbility(new CastOnlyIfConditionIsTrueAbility(OnOpponentsTurnCondition.instance, "Cast this spell only during an opponent’s turn.")); + // Tap target creature that player controls. That creature deals damage equal to its power to the player. Prevent all combat damage that would be dealt to and dealt by the creature this turn. + this.spellAbility.addEffect(new TapTargetEffect().setText("tap target creature that player controls")); + this.spellAbility.addTarget(new TargetCreaturePermanent(filter)); + this.spellAbility.addEffect(new DeliriumCardEffect()); + this.spellAbility.addEffect(new PreventCombatDamageBySourceEffect(Duration.EndOfTurn).setText("Prevent all combat damage that would be dealt to")); + this.spellAbility.addEffect(new PreventCombatDamageToSourceEffect(Duration.EndOfTurn).setText("and dealt by the creature this turn.")); + } + + public DeliriumCard(final DeliriumCard card) { + super(card); + } + + @Override + public DeliriumCard copy() { + return new DeliriumCard(this); + } +} + +class DeliriumCardEffect extends OneShotEffect { + + public DeliriumCardEffect() { + super(Outcome.Damage); + this.staticText = "that creature deals damage equal to its power to the player"; + } + + public DeliriumCardEffect(DeliriumCardEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent creature = game.getPermanent(source.getFirstTarget()); + if (creature != null) { + int amount = creature.getPower().getValue(); + Player controller = game.getPlayer(creature.getControllerId()); + if (controller != null) { + controller.damage(amount, creature.getId(), game, false, true); + return true; + } + } + return false; + } + + @Override + public DeliriumCardEffect copy() { + return new DeliriumCardEffect(this); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/Mirage.java b/Mage.Sets/src/mage/sets/Mirage.java index d67f5b34103..3098c4e0b27 100644 --- a/Mage.Sets/src/mage/sets/Mirage.java +++ b/Mage.Sets/src/mage/sets/Mirage.java @@ -83,6 +83,7 @@ public final class Mirage extends ExpansionSet { cards.add(new SetCardInfo("Dark Banishing", 115, Rarity.COMMON, mage.cards.d.DarkBanishing.class)); cards.add(new SetCardInfo("Dark Ritual", 116, Rarity.COMMON, mage.cards.d.DarkRitual.class)); cards.add(new SetCardInfo("Dazzling Beauty", 8, Rarity.COMMON, mage.cards.d.DazzlingBeauty.class)); + cards.add(new SetCardInfo("Delirium", 260, Rarity.UNCOMMON, mage.cards.d.DeliriumCard.class)); cards.add(new SetCardInfo("Dirtwater Wraith", 117, Rarity.COMMON, mage.cards.d.DirtwaterWraith.class)); cards.add(new SetCardInfo("Disempower", 9, Rarity.COMMON, mage.cards.d.Disempower.class)); cards.add(new SetCardInfo("Disenchant", 10, Rarity.COMMON, mage.cards.d.Disenchant.class)); diff --git a/Mage/src/main/java/mage/filter/predicate/permanent/ControllerIsActivePlayerPredicate.java b/Mage/src/main/java/mage/filter/predicate/permanent/ControllerIsActivePlayerPredicate.java new file mode 100644 index 00000000000..e67b02e0862 --- /dev/null +++ b/Mage/src/main/java/mage/filter/predicate/permanent/ControllerIsActivePlayerPredicate.java @@ -0,0 +1,27 @@ + +package mage.filter.predicate.permanent; + +import mage.filter.predicate.Predicate; +import mage.game.Game; +import mage.game.permanent.Permanent; + +import java.util.UUID; + +/** + * + * @author North + */ +public class ControllerIsActivePlayerPredicate implements Predicate { + @Override + public boolean apply(Permanent input, Game game) { + if(input.getControllerId() == null){ + return false; + } + return game.getActivePlayerId().equals(input.getControllerId()); + } + + @Override + public String toString() { + return "controlled by the active player"; + } +} From d1d38974428c6a6df95219b208d48db5641ba369 Mon Sep 17 00:00:00 2001 From: Noah Gleason Date: Sat, 23 Jun 2018 21:22:44 -0400 Subject: [PATCH 2/2] Fix this.spellAbility NPE --- .../d/{DeliriumCard.java => Delirium.java} | 34 +++++++++---------- Mage.Sets/src/mage/sets/Mirage.java | 3 +- 2 files changed, 18 insertions(+), 19 deletions(-) rename Mage.Sets/src/mage/cards/d/{DeliriumCard.java => Delirium.java} (63%) diff --git a/Mage.Sets/src/mage/cards/d/DeliriumCard.java b/Mage.Sets/src/mage/cards/d/Delirium.java similarity index 63% rename from Mage.Sets/src/mage/cards/d/DeliriumCard.java rename to Mage.Sets/src/mage/cards/d/Delirium.java index 2cc0631b0b0..3a04e3523ae 100644 --- a/Mage.Sets/src/mage/cards/d/DeliriumCard.java +++ b/Mage.Sets/src/mage/cards/d/Delirium.java @@ -6,9 +6,7 @@ import mage.abilities.Ability; import mage.abilities.common.CastOnlyIfConditionIsTrueAbility; import mage.abilities.condition.common.OnOpponentsTurnCondition; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.PreventCombatDamageBySourceEffect; -import mage.abilities.effects.common.PreventCombatDamageToSourceEffect; -import mage.abilities.effects.common.TapTargetEffect; +import mage.abilities.effects.common.*; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -25,7 +23,7 @@ import mage.target.common.TargetCreaturePermanent; * * @author noahg */ -public final class DeliriumCard extends CardImpl { +public final class Delirium extends CardImpl { private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); @@ -33,38 +31,38 @@ public final class DeliriumCard extends CardImpl { filter.add(new ControllerIsActivePlayerPredicate()); } - public DeliriumCard(UUID ownerId, CardSetInfo setInfo) { + public Delirium(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{B}{R}"); // Cast this spell only during an opponent’s turn. this.addAbility(new CastOnlyIfConditionIsTrueAbility(OnOpponentsTurnCondition.instance, "Cast this spell only during an opponent’s turn.")); // Tap target creature that player controls. That creature deals damage equal to its power to the player. Prevent all combat damage that would be dealt to and dealt by the creature this turn. - this.spellAbility.addEffect(new TapTargetEffect().setText("tap target creature that player controls")); - this.spellAbility.addTarget(new TargetCreaturePermanent(filter)); - this.spellAbility.addEffect(new DeliriumCardEffect()); - this.spellAbility.addEffect(new PreventCombatDamageBySourceEffect(Duration.EndOfTurn).setText("Prevent all combat damage that would be dealt to")); - this.spellAbility.addEffect(new PreventCombatDamageToSourceEffect(Duration.EndOfTurn).setText("and dealt by the creature this turn.")); + this.getSpellAbility().addEffect(new TapTargetEffect().setText("target creature that player controls")); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); + this.getSpellAbility().addEffect(new DeliriumEffect()); + this.getSpellAbility().addEffect(new PreventDamageToTargetEffect(Duration.EndOfTurn, true).setText("Prevent all combat damage that would be dealt to")); + this.getSpellAbility().addEffect(new PreventDamageByTargetEffect(Duration.EndOfTurn, true).setText("and dealt by the creature this turn.")); } - public DeliriumCard(final DeliriumCard card) { + public Delirium(final Delirium card) { super(card); } @Override - public DeliriumCard copy() { - return new DeliriumCard(this); + public Delirium copy() { + return new Delirium(this); } } -class DeliriumCardEffect extends OneShotEffect { +class DeliriumEffect extends OneShotEffect { - public DeliriumCardEffect() { + public DeliriumEffect() { super(Outcome.Damage); this.staticText = "that creature deals damage equal to its power to the player"; } - public DeliriumCardEffect(DeliriumCardEffect effect) { + public DeliriumEffect(DeliriumEffect effect) { super(effect); } @@ -83,7 +81,7 @@ class DeliriumCardEffect extends OneShotEffect { } @Override - public DeliriumCardEffect copy() { - return new DeliriumCardEffect(this); + public DeliriumEffect copy() { + return new DeliriumEffect(this); } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/Mirage.java b/Mage.Sets/src/mage/sets/Mirage.java index 3098c4e0b27..845414da3a6 100644 --- a/Mage.Sets/src/mage/sets/Mirage.java +++ b/Mage.Sets/src/mage/sets/Mirage.java @@ -1,6 +1,7 @@ package mage.sets; import mage.cards.ExpansionSet; +import mage.cards.d.Delirium; import mage.constants.Rarity; import mage.constants.SetType; @@ -83,7 +84,7 @@ public final class Mirage extends ExpansionSet { cards.add(new SetCardInfo("Dark Banishing", 115, Rarity.COMMON, mage.cards.d.DarkBanishing.class)); cards.add(new SetCardInfo("Dark Ritual", 116, Rarity.COMMON, mage.cards.d.DarkRitual.class)); cards.add(new SetCardInfo("Dazzling Beauty", 8, Rarity.COMMON, mage.cards.d.DazzlingBeauty.class)); - cards.add(new SetCardInfo("Delirium", 260, Rarity.UNCOMMON, mage.cards.d.DeliriumCard.class)); + cards.add(new SetCardInfo("Delirium", 260, Rarity.UNCOMMON, Delirium.class)); cards.add(new SetCardInfo("Dirtwater Wraith", 117, Rarity.COMMON, mage.cards.d.DirtwaterWraith.class)); cards.add(new SetCardInfo("Disempower", 9, Rarity.COMMON, mage.cards.d.Disempower.class)); cards.add(new SetCardInfo("Disenchant", 10, Rarity.COMMON, mage.cards.d.Disenchant.class));