[KHM] Implemented Glittering Frost

This commit is contained in:
Evan Kranzler 2021-01-13 18:02:25 -05:00
parent af0e9fb3d5
commit e18e3c79d4
14 changed files with 189 additions and 480 deletions

View file

@ -5,22 +5,18 @@ import mage.abilities.Ability;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.mana.ManaEffect;
import mage.abilities.keyword.EnchantAbility;
import mage.abilities.mana.TriggeredManaAbility;
import mage.abilities.mana.EnchantedTappedTriggeredManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.choices.ManaChoice;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.TargetPermanent;
import mage.target.common.TargetLandPermanent;
import mage.target.targetpointer.FixedTarget;
import java.util.ArrayList;
import java.util.List;
@ -43,10 +39,10 @@ public final class DawnsReflection extends CardImpl {
this.addAbility(ability);
// Whenever enchanted land is tapped for mana, its controller adds two mana in any combination of colors.
this.addAbility(new DawnsReflectionTriggeredAbility());
this.addAbility(new EnchantedTappedTriggeredManaAbility(new DawnsReflectionManaEffect()));
}
public DawnsReflection(final DawnsReflection card) {
private DawnsReflection(final DawnsReflection card) {
super(card);
}
@ -56,50 +52,15 @@ public final class DawnsReflection extends CardImpl {
}
}
class DawnsReflectionTriggeredAbility extends TriggeredManaAbility {
public DawnsReflectionTriggeredAbility() {
super(Zone.BATTLEFIELD, new DawnsReflectionManaEffect());
}
public DawnsReflectionTriggeredAbility(final DawnsReflectionTriggeredAbility ability) {
super(ability);
}
@Override
public DawnsReflectionTriggeredAbility copy() {
return new DawnsReflectionTriggeredAbility(this);
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.TAPPED_FOR_MANA;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
Permanent enchantment = game.getPermanent(this.getSourceId());
if (enchantment != null && event.getSourceId().equals(enchantment.getAttachedTo())) {
Permanent enchantedLand = game.getPermanentOrLKIBattlefield(enchantment.getAttachedTo());
return enchantedLand != null && enchantedLand.isLand();
}
return false;
}
@Override
public String getRule() {
return "Whenever enchanted land is tapped for mana, its controller adds two mana in any combination of colors <i>(in addition to the mana the land produces)</i>.";
}
}
class DawnsReflectionManaEffect extends ManaEffect {
public DawnsReflectionManaEffect() {
DawnsReflectionManaEffect() {
super();
this.staticText = "its controller adds two mana in any combination of colors";
this.staticText = "its controller adds two mana in any combination of colors " +
"<i>(in addition to the mana the land produces)</i>";
}
public DawnsReflectionManaEffect(final DawnsReflectionManaEffect effect) {
private DawnsReflectionManaEffect(final DawnsReflectionManaEffect effect) {
super(effect);
}

View file

@ -1,7 +1,5 @@
package mage.cards.e;
import java.util.UUID;
import mage.Mana;
import mage.abilities.Ability;
import mage.abilities.dynamicvalue.DynamicValue;
@ -9,26 +7,26 @@ import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.mana.DynamicManaEffect;
import mage.abilities.keyword.EnchantAbility;
import mage.abilities.mana.TriggeredManaAbility;
import mage.abilities.mana.EnchantedTappedTriggeredManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
import mage.target.TargetPermanent;
import mage.target.common.TargetLandPermanent;
import java.util.UUID;
/**
* @author Eirkei
*/
public final class ElvishGuidance extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent(SubType.ELF, "");
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter);
public ElvishGuidance(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}");
this.subtype.add(SubType.AURA);
@ -41,10 +39,12 @@ public final class ElvishGuidance extends CardImpl {
this.addAbility(ability);
// Whenever enchanted land is tapped for mana, its controller adds {G} for each Elf on the battlefield.
this.addAbility(new ElvishGuidanceTriggeredAbility());
this.addAbility(new EnchantedTappedTriggeredManaAbility(new DynamicManaEffect(
Mana.GreenMana(1), xValue
).setText("its controller adds {G} for each Elf on the battlefield")));
}
public ElvishGuidance(final ElvishGuidance card) {
private ElvishGuidance(final ElvishGuidance card) {
super(card);
}
@ -53,42 +53,3 @@ public final class ElvishGuidance extends CardImpl {
return new ElvishGuidance(this);
}
}
class ElvishGuidanceTriggeredAbility extends TriggeredManaAbility {
private static final FilterPermanent filter = new FilterPermanent(SubType.ELF, "");
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter);
public ElvishGuidanceTriggeredAbility() {
super(Zone.BATTLEFIELD, new DynamicManaEffect(Mana.GreenMana(1), xValue));
}
public ElvishGuidanceTriggeredAbility(final ElvishGuidanceTriggeredAbility ability) {
super(ability);
}
@Override
public ElvishGuidanceTriggeredAbility copy() {
return new ElvishGuidanceTriggeredAbility(this);
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.TAPPED_FOR_MANA;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
Permanent enchantment = game.getPermanent(this.getSourceId());
if (enchantment != null && event.getSourceId().equals(enchantment.getAttachedTo())) {
Permanent enchantedLand = game.getPermanentOrLKIBattlefield(enchantment.getAttachedTo());
return enchantedLand != null && enchantedLand.isLand();
}
return false;
}
@Override
public String getRule() {
return "Whenever enchanted land is tapped for mana, its controller adds {G} for each Elf on the battlefield.";
}
}

View file

@ -1,28 +1,21 @@
package mage.cards.f;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.mana.AddManaAnyColorAttachedControllerEffect;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.mana.AddManaAnyColorAttachedControllerEffect;
import mage.abilities.keyword.EnchantAbility;
import mage.abilities.mana.TriggeredManaAbility;
import mage.abilities.mana.EnchantedTappedTriggeredManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent;
import mage.constants.SubType;
import mage.target.TargetPermanent;
import mage.target.common.TargetLandPermanent;
import mage.target.targetpointer.FixedTarget;
import java.util.UUID;
/**
*
* @author Plopman
*/
public final class FertileGround extends CardImpl {
@ -39,10 +32,10 @@ public final class FertileGround extends CardImpl {
this.addAbility(ability);
// Whenever enchanted land is tapped for mana, its controller adds one mana of any color.
this.addAbility(new FertileGroundTriggeredAbility());
this.addAbility(new EnchantedTappedTriggeredManaAbility(new AddManaAnyColorAttachedControllerEffect()));
}
public FertileGround(final FertileGround card) {
private FertileGround(final FertileGround card) {
super(card);
}
@ -51,42 +44,3 @@ public final class FertileGround extends CardImpl {
return new FertileGround(this);
}
}
class FertileGroundTriggeredAbility extends TriggeredManaAbility {
public FertileGroundTriggeredAbility() {
super(Zone.BATTLEFIELD, new AddManaAnyColorAttachedControllerEffect());
}
public FertileGroundTriggeredAbility(FertileGroundTriggeredAbility ability) {
super(ability);
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.TAPPED_FOR_MANA;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
Permanent enchantment = game.getPermanent(this.getSourceId());
if (enchantment != null && event.getSourceId().equals(enchantment.getAttachedTo())) {
Permanent enchantedLand = game.getPermanentOrLKIBattlefield(enchantment.getAttachedTo());
if (enchantedLand != null && enchantedLand.isLand()) {
getEffects().get(0).setTargetPointer(new FixedTarget(enchantedLand.getControllerId()));
return true;
}
}
return false;
}
@Override
public FertileGroundTriggeredAbility copy() {
return new FertileGroundTriggeredAbility(this);
}
@Override
public String getRule() {
return "Whenever enchanted land is tapped for mana, its controller adds an additional one mana of any color.";
}
}

View file

@ -0,0 +1,53 @@
package mage.cards.g;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.continuous.AddCardSuperTypeAttachedEffect;
import mage.abilities.effects.mana.AddManaAnyColorAttachedControllerEffect;
import mage.abilities.keyword.EnchantAbility;
import mage.abilities.mana.EnchantedTappedTriggeredManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.target.TargetPermanent;
import mage.target.common.TargetLandPermanent;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class GlitteringFrost extends CardImpl {
public GlitteringFrost(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}");
this.addSuperType(SuperType.SNOW);
this.subtype.add(SubType.AURA);
// Enchant land
TargetPermanent auraTarget = new TargetLandPermanent();
this.getSpellAbility().addTarget(auraTarget);
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
Ability ability = new EnchantAbility(auraTarget.getTargetName());
this.addAbility(ability);
// Enchanted land is snow.
this.addAbility(new SimpleStaticAbility(new AddCardSuperTypeAttachedEffect(
SuperType.SNOW, Duration.WhileOnBattlefield, AttachmentType.AURA
).setText("enchanted land is snow")));
// Whenever enchanted land is tapped for mana, its controller adds an additional one mana of any color.
this.addAbility(new EnchantedTappedTriggeredManaAbility(new AddManaAnyColorAttachedControllerEffect()));
}
private GlitteringFrost(final GlitteringFrost card) {
super(card);
}
@Override
public GlitteringFrost copy() {
return new GlitteringFrost(this);
}
}

View file

@ -5,17 +5,14 @@ import mage.abilities.Ability;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.mana.ManaEffect;
import mage.abilities.keyword.EnchantAbility;
import mage.abilities.mana.TriggeredManaAbility;
import mage.abilities.mana.EnchantedTappedTriggeredManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.choices.ManaChoice;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.TargetPermanent;
@ -42,10 +39,10 @@ public final class MarketFestival extends CardImpl {
this.addAbility(ability);
// Whenever enchanted land is tapped for mana, its controller adds two mana in any combination of colors (in addition to the mana the land produces).
this.addAbility(new MarketFestivalTriggeredAbility());
this.addAbility(new EnchantedTappedTriggeredManaAbility(new MarketFestivalManaEffect()));
}
public MarketFestival(final MarketFestival card) {
private MarketFestival(final MarketFestival card) {
super(card);
}
@ -55,50 +52,14 @@ public final class MarketFestival extends CardImpl {
}
}
class MarketFestivalTriggeredAbility extends TriggeredManaAbility {
public MarketFestivalTriggeredAbility() {
super(Zone.BATTLEFIELD, new MarketFestivalManaEffect());
}
public MarketFestivalTriggeredAbility(final MarketFestivalTriggeredAbility ability) {
super(ability);
}
@Override
public MarketFestivalTriggeredAbility copy() {
return new MarketFestivalTriggeredAbility(this);
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.TAPPED_FOR_MANA;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
Permanent enchantment = game.getPermanent(this.getSourceId());
if (enchantment != null && event.getSourceId().equals(enchantment.getAttachedTo())) {
Permanent enchantedLand = game.getPermanentOrLKIBattlefield(enchantment.getAttachedTo());
return enchantedLand != null && enchantedLand.isLand();
}
return false;
}
@Override
public String getRule() {
return "Whenever enchanted land is tapped for mana, its controller adds two mana in any combination of colors <i>(in addition to the mana the land produces)</i>.";
}
}
class MarketFestivalManaEffect extends ManaEffect {
public MarketFestivalManaEffect() {
MarketFestivalManaEffect() {
super();
this.staticText = "its controller adds two mana in any combination of colors";
}
public MarketFestivalManaEffect(final MarketFestivalManaEffect effect) {
private MarketFestivalManaEffect(final MarketFestivalManaEffect effect) {
super(effect);
}

View file

@ -1,49 +1,44 @@
package mage.cards.o;
import java.util.UUID;
import mage.Mana;
import mage.abilities.Ability;
import mage.abilities.effects.mana.AddManaToManaPoolTargetControllerEffect;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.mana.AddManaToManaPoolTargetControllerEffect;
import mage.abilities.keyword.EnchantAbility;
import mage.abilities.mana.TriggeredManaAbility;
import mage.abilities.mana.EnchantedTappedTriggeredManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent;
import mage.constants.SubType;
import mage.target.TargetPermanent;
import mage.target.common.TargetLandPermanent;
import mage.target.targetpointer.FixedTarget;
import java.util.UUID;
/**
*
* @author Plopman
*/
public final class Overgrowth extends CardImpl {
public Overgrowth(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{G}");
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}");
this.subtype.add(SubType.AURA);
// Enchant land
TargetPermanent auraTarget = new TargetLandPermanent();
this.getSpellAbility().addTarget(auraTarget);
this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility));
Ability ability = new EnchantAbility(auraTarget.getTargetName());
this.addAbility(ability);
// Whenever enchanted land is tapped for mana, its controller adds {G}{G}.
this.addAbility(new OvergrowthTriggeredAbility());
this.addAbility(new EnchantedTappedTriggeredManaAbility(new AddManaToManaPoolTargetControllerEffect(
Mana.GreenMana(2), "their"
)));
}
public Overgrowth(final Overgrowth card) {
private Overgrowth(final Overgrowth card) {
super(card);
}
@ -52,44 +47,3 @@ public final class Overgrowth extends CardImpl {
return new Overgrowth(this);
}
}
class OvergrowthTriggeredAbility extends TriggeredManaAbility {
public OvergrowthTriggeredAbility() {
super(Zone.BATTLEFIELD, new AddManaToManaPoolTargetControllerEffect(Mana.GreenMana(2), "their"));
}
public OvergrowthTriggeredAbility(final OvergrowthTriggeredAbility ability) {
super(ability);
}
@Override
public OvergrowthTriggeredAbility copy() {
return new OvergrowthTriggeredAbility(this);
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.TAPPED_FOR_MANA;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
Permanent enchantment = game.getPermanent(this.getSourceId());
if (enchantment != null && event.getSourceId().equals(enchantment.getAttachedTo())) {
Permanent enchantedLand = game.getPermanentOrLKIBattlefield(enchantment.getAttachedTo());
if (enchantedLand != null && enchantedLand.isLand()) {
getEffects().get(0).setTargetPointer(new FixedTarget(enchantedLand.getControllerId()));
return true;
}
}
return false;
}
@Override
public String getRule() {
return "Whenever enchanted land is tapped for mana, its controller adds {G}{G}";
}
}

View file

@ -1,4 +1,3 @@
package mage.cards.t;
import mage.abilities.Ability;
@ -8,14 +7,10 @@ import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
import mage.abilities.effects.mana.AddManaAnyColorAttachedControllerEffect;
import mage.abilities.keyword.EnchantAbility;
import mage.abilities.keyword.ShroudAbility;
import mage.abilities.mana.TriggeredManaAbility;
import mage.abilities.mana.EnchantedTappedTriggeredManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent;
import mage.target.TargetPermanent;
import mage.target.common.TargetLandPermanent;
@ -26,8 +21,6 @@ import java.util.UUID;
*/
public final class TraceOfAbundance extends CardImpl {
private static final String rule = "Enchanted land has shroud";
public TraceOfAbundance(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{R/W}{G}");
this.subtype.add(SubType.AURA);
@ -40,13 +33,16 @@ public final class TraceOfAbundance extends CardImpl {
this.addAbility(ability);
// Enchanted land has shroud.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(ShroudAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield, rule)));
this.addAbility(new SimpleStaticAbility(new GainAbilityAttachedEffect(
ShroudAbility.getInstance(), AttachmentType.AURA,
Duration.WhileOnBattlefield, "enchanted land has shroud"
)));
// Whenever enchanted land is tapped for mana, its controller adds one mana of any color.
this.addAbility(new TraceOfAbundanceTriggeredAbility());
this.addAbility(new EnchantedTappedTriggeredManaAbility(new AddManaAnyColorAttachedControllerEffect()));
}
public TraceOfAbundance(final TraceOfAbundance card) {
private TraceOfAbundance(final TraceOfAbundance card) {
super(card);
}
@ -55,39 +51,3 @@ public final class TraceOfAbundance extends CardImpl {
return new TraceOfAbundance(this);
}
}
class TraceOfAbundanceTriggeredAbility extends TriggeredManaAbility {
public TraceOfAbundanceTriggeredAbility() {
super(Zone.BATTLEFIELD, new AddManaAnyColorAttachedControllerEffect());
}
public TraceOfAbundanceTriggeredAbility(final TraceOfAbundanceTriggeredAbility ability) {
super(ability);
}
@Override
public TraceOfAbundanceTriggeredAbility copy() {
return new TraceOfAbundanceTriggeredAbility(this);
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.TAPPED_FOR_MANA;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
Permanent enchantment = game.getPermanent(this.getSourceId());
if (enchantment != null && event.getSourceId().equals(enchantment.getAttachedTo())) {
Permanent enchantedLand = game.getPermanentOrLKIBattlefield(enchantment.getAttachedTo());
return enchantedLand != null && enchantedLand.isLand();
}
return false;
}
@Override
public String getRule() {
return "Whenever enchanted land is tapped for mana, its controller adds one mana of any color.";
}
}

View file

@ -8,6 +8,7 @@ import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.ChooseColorEffect;
import mage.abilities.effects.mana.ManaEffect;
import mage.abilities.keyword.EnchantAbility;
import mage.abilities.mana.EnchantedTappedTriggeredManaAbility;
import mage.abilities.mana.TriggeredManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@ -45,10 +46,10 @@ public final class UtopiaSprawl extends CardImpl {
this.addAbility(new AsEntersBattlefieldAbility(new ChooseColorEffect(Outcome.Detriment)));
// Whenever enchanted Forest is tapped for mana, its controller adds one mana of the chosen color.
this.addAbility(new UtopiaSprawlTriggeredAbility());
this.addAbility(new EnchantedTappedTriggeredManaAbility(new UtopiaSprawlEffect(),"Forest"));
}
public UtopiaSprawl(final UtopiaSprawl card) {
private UtopiaSprawl(final UtopiaSprawl card) {
super(card);
}
@ -57,47 +58,14 @@ public final class UtopiaSprawl extends CardImpl {
return new UtopiaSprawl(this);
}
}
class UtopiaSprawlTriggeredAbility extends TriggeredManaAbility {
public UtopiaSprawlTriggeredAbility() {
super(Zone.BATTLEFIELD, new UtopiaSprawlEffect());
}
public UtopiaSprawlTriggeredAbility(UtopiaSprawlTriggeredAbility ability) {
super(ability);
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.TAPPED_FOR_MANA;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
Permanent enchantment = game.getPermanent(this.getSourceId());
return enchantment != null && event.getSourceId().equals(enchantment.getAttachedTo());
}
@Override
public UtopiaSprawlTriggeredAbility copy() {
return new UtopiaSprawlTriggeredAbility(this);
}
@Override
public String getRule() {
return "Whenever enchanted Forest is tapped for mana, its controller adds one mana of the chosen color.";
}
}
class UtopiaSprawlEffect extends ManaEffect {
public UtopiaSprawlEffect() {
UtopiaSprawlEffect() {
super();
staticText = "its controller adds one mana of the chosen color";
}
public UtopiaSprawlEffect(final UtopiaSprawlEffect effect) {
private UtopiaSprawlEffect(final UtopiaSprawlEffect effect) {
super(effect);
}

View file

@ -1,38 +1,32 @@
package mage.cards.v;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.mana.AddManaAnyColorAttachedControllerEffect;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.mana.AddManaAnyColorAttachedControllerEffect;
import mage.abilities.keyword.EnchantAbility;
import mage.abilities.mana.TriggeredManaAbility;
import mage.abilities.mana.EnchantedTappedTriggeredManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent;
import mage.constants.SubType;
import mage.target.TargetPermanent;
import mage.target.common.TargetLandPermanent;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class VerdantHaven extends CardImpl {
public VerdantHaven(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{G}");
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}");
this.subtype.add(SubType.AURA);
// Enchant land
TargetPermanent auraTarget = new TargetLandPermanent();
this.getSpellAbility().addTarget(auraTarget);
@ -44,10 +38,10 @@ public final class VerdantHaven extends CardImpl {
this.addAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(2)));
// Whenever enchanted land is tapped for mana, its controller adds one mana of any color.
this.addAbility(new VerdantHavenTriggeredAbility());
this.addAbility(new EnchantedTappedTriggeredManaAbility(new AddManaAnyColorAttachedControllerEffect()));
}
public VerdantHaven(final VerdantHaven card) {
private VerdantHaven(final VerdantHaven card) {
super(card);
}
@ -56,39 +50,3 @@ public final class VerdantHaven extends CardImpl {
return new VerdantHaven(this);
}
}
class VerdantHavenTriggeredAbility extends TriggeredManaAbility {
public VerdantHavenTriggeredAbility() {
super(Zone.BATTLEFIELD, new AddManaAnyColorAttachedControllerEffect());
}
public VerdantHavenTriggeredAbility(final VerdantHavenTriggeredAbility ability) {
super(ability);
}
@Override
public VerdantHavenTriggeredAbility copy() {
return new VerdantHavenTriggeredAbility(this);
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.TAPPED_FOR_MANA;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
Permanent enchantment = game.getPermanent(this.getSourceId());
if (enchantment != null && event.getSourceId().equals(enchantment.getAttachedTo())) {
Permanent enchantedLand = game.getPermanentOrLKIBattlefield(enchantment.getAttachedTo());
return enchantedLand != null && enchantedLand.isLand();
}
return false;
}
@Override
public String getRule() {
return "Whenever enchanted land is tapped for mana, its controller adds one mana of any color.";
}
}

View file

@ -5,17 +5,15 @@ import mage.abilities.Ability;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.mana.AddManaToManaPoolTargetControllerEffect;
import mage.abilities.keyword.EnchantAbility;
import mage.abilities.mana.TriggeredManaAbility;
import mage.abilities.mana.EnchantedTappedTriggeredManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent;
import mage.constants.CardType;
import mage.constants.ColoredManaSymbol;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.target.TargetPermanent;
import mage.target.common.TargetLandPermanent;
import mage.target.targetpointer.FixedTarget;
import java.util.UUID;
@ -36,7 +34,9 @@ public final class WildGrowth extends CardImpl {
this.addAbility(ability);
// Whenever enchanted land is tapped for mana, its controller adds {G}.
this.addAbility(new WildGrowthTriggeredAbility());
this.addAbility(new EnchantedTappedTriggeredManaAbility(
new AddManaToManaPoolTargetControllerEffect(new Mana(ColoredManaSymbol.G), "their")
));
}
private WildGrowth(final WildGrowth card) {
@ -48,44 +48,3 @@ public final class WildGrowth extends CardImpl {
return new WildGrowth(this);
}
}
class WildGrowthTriggeredAbility extends TriggeredManaAbility {
WildGrowthTriggeredAbility() {
super(Zone.BATTLEFIELD, new AddManaToManaPoolTargetControllerEffect(new Mana(ColoredManaSymbol.G), "their"));
}
private WildGrowthTriggeredAbility(final WildGrowthTriggeredAbility ability) {
super(ability);
}
@Override
public WildGrowthTriggeredAbility copy() {
return new WildGrowthTriggeredAbility(this);
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.TAPPED_FOR_MANA;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
Permanent enchantment = game.getPermanent(this.getSourceId());
if (enchantment != null && event.getSourceId().equals(enchantment.getAttachedTo())) {
Permanent enchantedLand = game.getPermanentOrLKIBattlefield(enchantment.getAttachedTo());
if (enchantedLand != null && enchantedLand.isLand()) {
this.getEffects().setTargetPointer(new FixedTarget(enchantedLand.getControllerId()));
return true;
}
}
return false;
}
@Override
public String getRule() {
return "Whenever enchanted land is tapped for mana, its controller adds an additional {G}";
}
}

View file

@ -11,17 +11,13 @@ import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.mana.AddManaToManaPoolTargetControllerEffect;
import mage.abilities.hint.common.MyTurnHint;
import mage.abilities.keyword.EnchantAbility;
import mage.abilities.mana.TriggeredManaAbility;
import mage.abilities.mana.EnchantedTappedTriggeredManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
import mage.game.permanent.token.WolfToken;
import mage.target.TargetPermanent;
import mage.target.common.TargetLandPermanent;
import mage.target.targetpointer.FixedTarget;
import java.util.UUID;
@ -43,7 +39,9 @@ public final class WolfwillowHaven extends CardImpl {
this.addAbility(ability);
// Whenever enchanted land is tapped for mana, its controller adds an additional {G}.
this.addAbility(new WolfwillowHavenTriggeredAbility());
this.addAbility(new EnchantedTappedTriggeredManaAbility(new AddManaToManaPoolTargetControllerEffect(
new Mana(ColoredManaSymbol.G), "their"
)));
// {4}{G}, Sacrifice Wolfwillow Haven: Create a 2/2 green Wolf creature token. Activate this ability only during your turn.
ability = new ActivateIfConditionActivatedAbility(
@ -64,43 +62,3 @@ public final class WolfwillowHaven extends CardImpl {
return new WolfwillowHaven(this);
}
}
class WolfwillowHavenTriggeredAbility extends TriggeredManaAbility {
WolfwillowHavenTriggeredAbility() {
super(Zone.BATTLEFIELD, new AddManaToManaPoolTargetControllerEffect(new Mana(ColoredManaSymbol.G), "their"));
}
private WolfwillowHavenTriggeredAbility(final WolfwillowHavenTriggeredAbility ability) {
super(ability);
}
@Override
public WolfwillowHavenTriggeredAbility copy() {
return new WolfwillowHavenTriggeredAbility(this);
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.TAPPED_FOR_MANA;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
Permanent enchantment = game.getPermanent(this.getSourceId());
if (enchantment != null && event.getSourceId().equals(enchantment.getAttachedTo())) {
Permanent enchantedLand = game.getPermanentOrLKIBattlefield(enchantment.getAttachedTo());
if (enchantedLand != null && enchantedLand.isLand()) {
getEffects().setTargetPointer(new FixedTarget(enchantedLand.getControllerId()));
return true;
}
}
return false;
}
@Override
public String getRule() {
return "Whenever enchanted land is tapped for mana, its controller adds an additional {G}.";
}
}

View file

@ -100,6 +100,7 @@ public final class Kaldheim extends ExpansionSet {
cards.add(new SetCardInfo("Gilded Assault Cart", 390, Rarity.UNCOMMON, mage.cards.g.GildedAssaultCart.class));
cards.add(new SetCardInfo("Glacial Floodplain", 257, Rarity.COMMON, mage.cards.g.GlacialFloodplain.class));
cards.add(new SetCardInfo("Gladewalker Ritualist", 392, Rarity.UNCOMMON, mage.cards.g.GladewalkerRitualist.class));
cards.add(new SetCardInfo("Glittering Frost", 171, Rarity.COMMON, mage.cards.g.GlitteringFrost.class));
cards.add(new SetCardInfo("Gods' Hall Guardian", 13, Rarity.COMMON, mage.cards.g.GodsHallGuardian.class));
cards.add(new SetCardInfo("Goldspan Dragon", 139, Rarity.MYTHIC, mage.cards.g.GoldspanDragon.class));
cards.add(new SetCardInfo("Grim Draugr", 96, Rarity.COMMON, mage.cards.g.GrimDraugr.class));

View file

@ -2,8 +2,10 @@ package mage.abilities.effects.mana;
import mage.Mana;
import mage.abilities.Ability;
import mage.abilities.TriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.constants.AbilityType;
import mage.constants.ManaType;
import mage.constants.Outcome;
import mage.game.Game;
import mage.game.events.GameEvent;
@ -13,8 +15,6 @@ import mage.players.Player;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import mage.abilities.TriggeredAbility;
import mage.constants.ManaType;
/**
* @author BetaSteward_at_googlemail.com
@ -139,4 +139,10 @@ public abstract class ManaEffect extends OneShotEffect {
}
}
}
@Override
public ManaEffect setText(String staticText) {
super.setText(staticText);
return this;
}
}

View file

@ -0,0 +1,55 @@
package mage.abilities.mana;
import mage.abilities.effects.mana.ManaEffect;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
import mage.target.targetpointer.FixedTarget;
/**
* @author TheElk801
*/
public class EnchantedTappedTriggeredManaAbility extends TriggeredManaAbility {
private final String permName;
public EnchantedTappedTriggeredManaAbility(ManaEffect manaEffect) {
this(manaEffect, "land");
}
public EnchantedTappedTriggeredManaAbility(ManaEffect manaEffect, String permName) {
super(Zone.BATTLEFIELD, manaEffect);
this.permName = permName;
}
private EnchantedTappedTriggeredManaAbility(final EnchantedTappedTriggeredManaAbility ability) {
super(ability);
this.permName = ability.permName;
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.TAPPED_FOR_MANA;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
Permanent enchantment = game.getPermanent(this.getSourceId());
if (enchantment == null || !event.getSourceId().equals(enchantment.getAttachedTo())) {
return false;
}
this.getEffects().setTargetPointer(new FixedTarget(game.getControllerId(enchantment.getAttachedTo())));
return true;
}
@Override
public EnchantedTappedTriggeredManaAbility copy() {
return new EnchantedTappedTriggeredManaAbility(this);
}
@Override
public String getRule() {
return "Whenever enchanted " + permName + " is tapped for mana, " + super.getRule();
}
}