[BLB] Consumed by Greed, Thought Shucker, Mabel's Mettle, Heaped Harvest (#12600)

* Consumed by Greed

* Fix Gift text

* Thought Shucker

* Mabel's Mettle

* Heaped Harvest
This commit is contained in:
ssk97 2024-07-24 17:25:44 -07:00 committed by GitHub
parent 669b9636cb
commit be3065789d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 218 additions and 2 deletions

View file

@ -0,0 +1,59 @@
package mage.cards.c;
import mage.abilities.condition.common.GiftWasPromisedCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.abilities.effects.common.SacrificeEffect;
import mage.abilities.keyword.GiftAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.GiftType;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.GreatestPowerControlledPredicate;
import mage.target.common.TargetCardInYourGraveyard;
import mage.target.common.TargetOpponent;
import mage.target.targetadjustment.ConditionalTargetAdjuster;
import mage.target.targetpointer.SecondTargetPointer;
import java.util.UUID;
/**
* @author notgreat
*/
public final class ConsumedByGreed extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with the greatest power among creatures they control");
static {
filter.add(GreatestPowerControlledPredicate.instance);
}
public ConsumedByGreed(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{B}{B}");
// Gift a card
this.addAbility(new GiftAbility(this, GiftType.CARD));
// Target opponent sacrifices a creature with the greatest power among creatures they control. If the gift was promised, return target creature card from your graveyard to your hand.
this.getSpellAbility().addEffect(new SacrificeEffect(filter, 1, "Target opponent"));
this.getSpellAbility().addTarget(new TargetOpponent());
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
new ReturnFromGraveyardToHandTargetEffect(), GiftWasPromisedCondition.TRUE,
"If the gift was promised, return target creature card from your graveyard to your hand.")
.setTargetPointer(new SecondTargetPointer()));
this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(GiftWasPromisedCondition.TRUE, true,
new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)));
}
private ConsumedByGreed(final ConsumedByGreed card) {
super(card);
}
@Override
public ConsumedByGreed copy() {
return new ConsumedByGreed(this);
}
}

View file

@ -0,0 +1,47 @@
package mage.cards.h;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.SacrificeSourceTriggeredAbility;
import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
import mage.abilities.meta.OrTriggeredAbility;
import mage.abilities.token.FoodAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
/**
* @author notgreat
*/
public final class HeapedHarvest extends CardImpl {
public HeapedHarvest(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}{G}");
this.subtype.add(SubType.FOOD);
// When Heaped Harvest enters and when you sacrifice it, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle.
this.addAbility(new OrTriggeredAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(
new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND_A), true), true,
"When {this} enters and when you sacrifice it, ",
new EntersBattlefieldTriggeredAbility(null), new SacrificeSourceTriggeredAbility(null)
));
// {2}, {T}, Sacrifice Heaped Harvest: You gain 3 life.
this.addAbility(new FoodAbility(true));
}
private HeapedHarvest(final HeapedHarvest card) {
super(card);
}
@Override
public HeapedHarvest copy() {
return new HeapedHarvest(this);
}
}

View file

@ -0,0 +1,37 @@
package mage.cards.m;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.StaticFilters;
import mage.target.common.TargetCreaturePermanent;
import mage.target.targetpointer.SecondTargetPointer;
import java.util.UUID;
/**
* @author notgreat
*/
public final class MabelsMettle extends CardImpl {
public MabelsMettle(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{W}");
// Target creature gets +2/+2 until end of turn. Up to one other target creature gets +1/+1 until end of turn.
this.getSpellAbility().addEffect(new BoostTargetEffect(2, 2));
this.getSpellAbility().addTarget(new TargetCreaturePermanent().setTargetTag(1));
this.getSpellAbility().addEffect(new BoostTargetEffect(1, 1).setTargetPointer(new SecondTargetPointer()));
this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 1, StaticFilters.FILTER_ANOTHER_CREATURE_TARGET_2, false).setTargetTag(2));
}
private MabelsMettle(final MabelsMettle card) {
super(card);
}
@Override
public MabelsMettle copy() {
return new MabelsMettle(this);
}
}

View file

@ -0,0 +1,69 @@
package mage.cards.t;
import mage.MageInt;
import mage.abilities.condition.common.ThresholdCondition;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalActivatedAbility;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.counters.CounterType;
import java.util.UUID;
/**
* @author notgreat
*/
public final class ThoughtShucker extends CardImpl {
public ThoughtShucker(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}");
this.subtype.add(SubType.RAT);
this.subtype.add(SubType.ROGUE);
this.power = new MageInt(1);
this.toughness = new MageInt(3);
// Threshold -- {1}{U}: Put a +1/+1 counter on Thought Shucker and draw a card. Activate only if seven or more cards are in your graveyard and only once.
this.addAbility(new ThoughtShuckerActivatedAbility());
}
private ThoughtShucker(final ThoughtShucker card) {
super(card);
}
@Override
public ThoughtShucker copy() {
return new ThoughtShucker(this);
}
}
class ThoughtShuckerActivatedAbility extends ConditionalActivatedAbility {
ThoughtShuckerActivatedAbility() {
super(new AddCountersSourceEffect(CounterType.P1P1.createInstance()),
new ManaCostsImpl<>("{1}{U}"), ThresholdCondition.instance);
addEffect(new DrawCardSourceControllerEffect(1).concatBy("and"));
setAbilityWord(AbilityWord.THRESHOLD);
maxActivationsPerGame = 1;
}
protected ThoughtShuckerActivatedAbility(final ThoughtShuckerActivatedAbility ability) {
super(ability);
}
@Override
public ThoughtShuckerActivatedAbility copy() {
return new ThoughtShuckerActivatedAbility(this);
}
@Override
public String getRule() {
String rule = super.getRule();
int len = rule.length();
return rule.substring(0, len - 1) + " and only once.";
}
}

View file

@ -58,6 +58,7 @@ public final class Bloomburrow extends ExpansionSet {
cards.add(new SetCardInfo("Clifftop Lookout", 168, Rarity.UNCOMMON, mage.cards.c.ClifftopLookout.class));
cards.add(new SetCardInfo("Colossification", 392, Rarity.RARE, mage.cards.c.Colossification.class));
cards.add(new SetCardInfo("Conduct Electricity", 130, Rarity.COMMON, mage.cards.c.ConductElectricity.class));
cards.add(new SetCardInfo("Consumed by Greed", 87, Rarity.UNCOMMON, mage.cards.c.ConsumedByGreed.class));
cards.add(new SetCardInfo("Corpseberry Cultivator", 210, Rarity.COMMON, mage.cards.c.CorpseberryCultivator.class));
cards.add(new SetCardInfo("Coruscation Mage", 131, Rarity.UNCOMMON, mage.cards.c.CoruscationMage.class));
cards.add(new SetCardInfo("Cruelclaw's Heist", 88, Rarity.RARE, mage.cards.c.CruelclawsHeist.class));
@ -104,6 +105,7 @@ public final class Bloomburrow extends ExpansionSet {
cards.add(new SetCardInfo("Hazardroot Herbalist", 174, Rarity.UNCOMMON, mage.cards.h.HazardrootHerbalist.class));
cards.add(new SetCardInfo("Hazel's Nocturne", 97, Rarity.UNCOMMON, mage.cards.h.HazelsNocturne.class));
cards.add(new SetCardInfo("Head of the Homestead", 216, Rarity.COMMON, mage.cards.h.HeadOfTheHomestead.class));
cards.add(new SetCardInfo("Heaped Harvest", 175, Rarity.COMMON, mage.cards.h.HeapedHarvest.class));
cards.add(new SetCardInfo("Heartfire Hero", 138, Rarity.UNCOMMON, mage.cards.h.HeartfireHero.class));
cards.add(new SetCardInfo("Hearthborn Battler", 139, Rarity.RARE, mage.cards.h.HearthbornBattler.class));
cards.add(new SetCardInfo("Hidden Grotto", 254, Rarity.COMMON, mage.cards.h.HiddenGrotto.class));
@ -135,6 +137,7 @@ public final class Bloomburrow extends ExpansionSet {
cards.add(new SetCardInfo("Lumra, Bellow of the Woods", 183, Rarity.MYTHIC, mage.cards.l.LumraBellowOfTheWoods.class));
cards.add(new SetCardInfo("Lunar Convocation", 223, Rarity.RARE, mage.cards.l.LunarConvocation.class));
cards.add(new SetCardInfo("Lupinflower Village", 256, Rarity.UNCOMMON, mage.cards.l.LupinflowerVillage.class));
cards.add(new SetCardInfo("Mabel's Mettle", 21, Rarity.UNCOMMON, mage.cards.m.MabelsMettle.class));
cards.add(new SetCardInfo("Mabel, Heir to Cragflame", 224, Rarity.RARE, mage.cards.m.MabelHeirToCragflame.class));
cards.add(new SetCardInfo("Maha, Its Feathers Night", 100, Rarity.MYTHIC, mage.cards.m.MahaItsFeathersNight.class));
cards.add(new SetCardInfo("Manifold Mouse", 143, Rarity.RARE, mage.cards.m.ManifoldMouse.class));
@ -226,6 +229,7 @@ public final class Bloomburrow extends ExpansionSet {
cards.add(new SetCardInfo("Thistledown Players", 35, Rarity.COMMON, mage.cards.t.ThistledownPlayers.class));
cards.add(new SetCardInfo("Thornplate Intimidator", 117, Rarity.COMMON, mage.cards.t.ThornplateIntimidator.class));
cards.add(new SetCardInfo("Thornvault Forager", 197, Rarity.RARE, mage.cards.t.ThornvaultForager.class));
cards.add(new SetCardInfo("Thought Shucker", 77, Rarity.COMMON, mage.cards.t.ThoughtShucker.class));
cards.add(new SetCardInfo("Thought-Stalker Warlock", 118, Rarity.UNCOMMON, mage.cards.t.ThoughtStalkerWarlock.class));
cards.add(new SetCardInfo("Three Tree Mascot", 251, Rarity.COMMON, mage.cards.t.ThreeTreeMascot.class));
cards.add(new SetCardInfo("Three Tree Rootweaver", 198, Rarity.COMMON, mage.cards.t.ThreeTreeRootweaver.class));

View file

@ -25,6 +25,6 @@ public enum GiftWasPromisedCondition implements Condition {
@Override
public String toString() {
return "Gift was " + (flag ? "" : "not ") + "promised";
return "the gift was " + (flag ? "" : "not ") + "promised";
}
}

View file

@ -44,7 +44,7 @@ public class GiftAbility extends StaticAbility implements OptionalAdditionalSour
public GiftAbility(Card card, GiftType giftType) {
super(Zone.STACK, null);
this.additionalCost = new OptionalAdditionalCostImpl(
keywordText + ' ' + giftType,
keywordText + ' ' + giftType.getName(),
makeReminderText(giftType, card.isPermanent()),
new PromiseGiftCost(giftType)
);