[LCI] Implement Poetic Ingenuity

This commit is contained in:
Susucre 2023-10-28 18:08:12 +02:00
parent 139e06665a
commit bcd8687285
7 changed files with 113 additions and 4 deletions

View file

@ -77,7 +77,7 @@ class FangornTreeShepherdEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(source.getControllerId());
int amount = (Integer) getValue("attackers");
int amount = (Integer) getValue(AttacksWithCreaturesTriggeredAbility.VALUEKEY_NUMBER_ATTACKERS);
if (player != null && amount > 0) {
player.getManaPool().addMana(Mana.GreenMana(2 * amount), game, source);
return true;

View file

@ -0,0 +1,77 @@
package mage.cards.p;
import mage.abilities.Ability;
import mage.abilities.common.AttacksWithCreaturesTriggeredAbility;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledPermanent;
import mage.game.Game;
import mage.game.permanent.token.Dinosaur31Token;
import mage.game.permanent.token.TreasureToken;
import java.util.UUID;
/**
* @author Susucr
*/
public final class PoeticIngenuity extends CardImpl {
private static final FilterPermanent filter = new FilterControlledPermanent(SubType.DINOSAUR);
public PoeticIngenuity(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}");
// Whenever one or more Dinosaurs you control attack, create that many Treasure tokens.
this.addAbility(new AttacksWithCreaturesTriggeredAbility(
new PoeticIngenuityEffect(), 1, filter
).setTriggerPhrase("Whenever one or more Dinosaurs you control attack, "));
// Whenever you cast an artifact spell, create a 3/1 red Dinosaur creature token. This ability triggers only once per turn.
this.addAbility(new SpellCastControllerTriggeredAbility(
new CreateTokenEffect(new Dinosaur31Token()),
StaticFilters.FILTER_SPELL_AN_ARTIFACT,
false
).setTriggersOnceEachTurn(true));
}
private PoeticIngenuity(final PoeticIngenuity card) {
super(card);
}
@Override
public PoeticIngenuity copy() {
return new PoeticIngenuity(this);
}
}
class PoeticIngenuityEffect extends OneShotEffect {
PoeticIngenuityEffect() {
super(Outcome.Benefit);
staticText = "create that many Treasure tokens";
}
private PoeticIngenuityEffect(final PoeticIngenuityEffect effect) {
super(effect);
}
@Override
public PoeticIngenuityEffect copy() {
return new PoeticIngenuityEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
int amount = (Integer) getValue(AttacksWithCreaturesTriggeredAbility.VALUEKEY_NUMBER_ATTACKERS);
return amount > 0 &&
new CreateTokenEffect(new TreasureToken(), amount).apply(game, source);
}
}

View file

@ -63,7 +63,7 @@ enum RabbleRousingValue implements DynamicValue {
@Override
public int calculate(Game game, Ability sourceAbility, Effect effect) {
return (Integer) effect.getValue("attackers");
return (Integer) effect.getValue(AttacksWithCreaturesTriggeredAbility.VALUEKEY_NUMBER_ATTACKERS);
}
@Override

View file

@ -68,7 +68,7 @@ enum ScreamingSwarmValue implements DynamicValue {
@Override
public int calculate(Game game, Ability sourceAbility, Effect effect) {
return (Integer) effect.getValue("attackers");
return (Integer) effect.getValue(AttacksWithCreaturesTriggeredAbility.VALUEKEY_NUMBER_ATTACKERS);
}
@Override

View file

@ -79,6 +79,7 @@ public final class TheLostCavernsOfIxalan extends ExpansionSet {
cards.add(new SetCardInfo("Oltec Cloud Guard", 28, Rarity.COMMON, mage.cards.o.OltecCloudGuard.class));
cards.add(new SetCardInfo("Palani's Hatcher", 237, Rarity.RARE, mage.cards.p.PalanisHatcher.class));
cards.add(new SetCardInfo("Plains", 393, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Poetic Ingenuity", 161, Rarity.RARE, mage.cards.p.PoeticIngenuity.class));
cards.add(new SetCardInfo("Poison Dart Frog", 207, Rarity.COMMON, mage.cards.p.PoisonDartFrog.class));
cards.add(new SetCardInfo("Pugnacious Hammerskull", 208, Rarity.RARE, mage.cards.p.PugnaciousHammerskull.class));
cards.add(new SetCardInfo("Quintorius Kand", 238, Rarity.MYTHIC, mage.cards.q.QuintoriusKand.class));

View file

@ -20,6 +20,9 @@ import java.util.stream.Collectors;
*/
public class AttacksWithCreaturesTriggeredAbility extends TriggeredAbilityImpl {
// retrieve the number of attackers in triggered effects with getValue
public static final String VALUEKEY_NUMBER_ATTACKERS = "number_attackers";
private final FilterPermanent filter;
private final int minAttackers;
private final boolean setTargetPointer;
@ -86,7 +89,7 @@ public class AttacksWithCreaturesTriggeredAbility extends TriggeredAbilityImpl {
if (attackers.size() < minAttackers) {
return false;
}
getEffects().setValue("attackers", attackers.size());
getEffects().setValue(VALUEKEY_NUMBER_ATTACKERS, attackers.size());
if (setTargetPointer) {
getEffects().setTargetPointer(new FixedTargets(attackers, game));
}

View file

@ -0,0 +1,28 @@
package mage.game.permanent.token;
import mage.MageInt;
import mage.constants.CardType;
import mage.constants.SubType;
/**
* @author Susucr
*/
public final class Dinosaur31Token extends TokenImpl {
public Dinosaur31Token() {
super("Dinosaur Token", "3/1 red Dinosaur creature token");
cardType.add(CardType.CREATURE);
color.setRed(true);
subtype.add(SubType.DINOSAUR);
power = new MageInt(3);
toughness = new MageInt(1);
}
protected Dinosaur31Token(final Dinosaur31Token token) {
super(token);
}
public Dinosaur31Token copy() {
return new Dinosaur31Token(this);
}
}