forked from External/mage
[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:
parent
669b9636cb
commit
be3065789d
7 changed files with 218 additions and 2 deletions
59
Mage.Sets/src/mage/cards/c/ConsumedByGreed.java
Normal file
59
Mage.Sets/src/mage/cards/c/ConsumedByGreed.java
Normal 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);
|
||||
}
|
||||
}
|
||||
47
Mage.Sets/src/mage/cards/h/HeapedHarvest.java
Normal file
47
Mage.Sets/src/mage/cards/h/HeapedHarvest.java
Normal 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);
|
||||
}
|
||||
}
|
||||
37
Mage.Sets/src/mage/cards/m/MabelsMettle.java
Normal file
37
Mage.Sets/src/mage/cards/m/MabelsMettle.java
Normal 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);
|
||||
}
|
||||
}
|
||||
69
Mage.Sets/src/mage/cards/t/ThoughtShucker.java
Normal file
69
Mage.Sets/src/mage/cards/t/ThoughtShucker.java
Normal 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.";
|
||||
}
|
||||
}
|
||||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue