implement [MH3] Shifting Woodland

This commit is contained in:
Susucre 2024-05-25 19:07:44 +02:00
parent 0e524aaee2
commit 5cc38a1225
2 changed files with 105 additions and 0 deletions

View file

@ -0,0 +1,104 @@
package mage.cards.s;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.DeliriumCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalActivatedAbility;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.hint.common.CardTypesInGraveyardHint;
import mage.abilities.mana.GreenManaAbility;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.FilterCard;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.common.FilterPermanentCard;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.game.permanent.PermanentCard;
import mage.target.common.TargetCardInYourGraveyard;
import mage.util.functions.EmptyCopyApplier;
import java.util.UUID;
/**
* @author Susucr
*/
public final class ShiftingWoodland extends CardImpl {
private static final FilterPermanent filter = new FilterControlledPermanent(SubType.FOREST);
private static final Condition condition
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.EQUAL_TO, 0);
private static final FilterCard filterCard = new FilterPermanentCard("permanent card in your graveyard");
public ShiftingWoodland(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Shifting Woodland enters the battlefield tapped unless you control a Forest.
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(
new TapSourceEffect(), condition
), "tapped unless you control a Forest"));
// {T}: Add {G}.
this.addAbility(new GreenManaAbility());
// Delirium -- {2}{G}{G}: Shifting Woodland becomes a copy of target permanent card in your graveyard until end of turn. Activate only if there are four or more card types among cards in your graveyard.
Ability ability = new ConditionalActivatedAbility(
new ShiftingWoodlandCopyEffect(),
new ManaCostsImpl<>("{2}{G}{G}"),
DeliriumCondition.instance
);
ability.addTarget(new TargetCardInYourGraveyard(1, filterCard));
ability.setAbilityWord(AbilityWord.DELIRIUM);
this.addAbility(ability.addHint(CardTypesInGraveyardHint.YOU));
}
private ShiftingWoodland(final ShiftingWoodland card) {
super(card);
}
@Override
public ShiftingWoodland copy() {
return new ShiftingWoodland(this);
}
}
class ShiftingWoodlandCopyEffect extends OneShotEffect {
ShiftingWoodlandCopyEffect() {
super(Outcome.Copy);
this.staticText = "{this} becomes a copy of target permanent card in your graveyard until end of turn";
}
private ShiftingWoodlandCopyEffect(final ShiftingWoodlandCopyEffect effect) {
super(effect);
}
@Override
public ShiftingWoodlandCopyEffect copy() {
return new ShiftingWoodlandCopyEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Permanent sourcePermanent = game.getPermanent(source.getSourceId());
if (sourcePermanent == null) {
return false;
}
Card copyFromCard = game.getCard(getTargetPointer().getFirst(game, source));
if (copyFromCard == null) {
return false;
}
Permanent blueprint = new PermanentCard(copyFromCard, source.getControllerId(), game);
game.copyPermanent(Duration.EndOfTurn, blueprint, sourcePermanent.getId(), source, new EmptyCopyApplier());
return true;
}
}

View file

@ -124,6 +124,7 @@ public final class ModernHorizons3 extends ExpansionSet {
cards.add(new SetCardInfo("Scurrilous Sentry", 108, Rarity.COMMON, mage.cards.s.ScurrilousSentry.class));
cards.add(new SetCardInfo("Scurry of Gremlins", 203, Rarity.UNCOMMON, mage.cards.s.ScurryOfGremlins.class));
cards.add(new SetCardInfo("Serum Visionary", 69, Rarity.COMMON, mage.cards.s.SerumVisionary.class));
cards.add(new SetCardInfo("Shifting Woodland", 228, Rarity.RARE, mage.cards.s.ShiftingWoodland.class));
cards.add(new SetCardInfo("Sink into Stupor", 241, Rarity.UNCOMMON, mage.cards.s.SinkIntoStupor.class));
cards.add(new SetCardInfo("Six", 169, Rarity.RARE, mage.cards.s.Six.class));
cards.add(new SetCardInfo("Skoa, Embermage", 138, Rarity.COMMON, mage.cards.s.SkoaEmbermage.class));