[EOE] Implement Moxite Refinery

This commit is contained in:
theelk801 2025-07-12 11:32:01 -04:00
parent 2b73fc9487
commit 2744bb00f4
4 changed files with 68 additions and 21 deletions

View file

@ -1,12 +1,8 @@
package mage.cards.a;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
import mage.abilities.Ability;
import mage.abilities.Mode;
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.OneShotEffect;
@ -15,6 +11,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.TimingRule;
import mage.counters.Counter;
import mage.counters.CounterType;
import mage.game.Game;
@ -22,6 +19,10 @@ import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.TargetPermanent;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
/**
* @author sobiech
*/
@ -35,8 +36,9 @@ public final class AethericAmplifier extends CardImpl {
// {4}, {T}: Choose one. Activate only as a sorcery.
// * Double the number of each kind of counter on target permanent.
final Ability ability = new ActivateAsSorceryActivatedAbility(new AethericAmplifierDoublePermanentEffect(), new GenericManaCost(4))
.withShowActivateText(false);
Ability ability = new SimpleActivatedAbility(
new AethericAmplifierDoublePermanentEffect(), new GenericManaCost(4)
).setTiming(TimingRule.SORCERY);
ability.addCost(new TapSourceCost());
ability.addTarget(new TargetPermanent());
ability.getModes().setChooseText("choose one. Activate only as a sorcery.");
@ -145,5 +147,3 @@ class AethericAmplifierDoubleControllerEffect extends OneShotEffect {
return new AethericAmplifierDoubleControllerEffect(this);
}
}

View file

@ -0,0 +1,57 @@
package mage.cards.m;
import mage.abilities.Ability;
import mage.abilities.Mode;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.RemoveVariableCountersTargetCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.dynamicvalue.common.GetXValue;
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.TimingRule;
import mage.counters.CounterType;
import mage.filter.StaticFilters;
import mage.target.common.TargetArtifactPermanent;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class MoxiteRefinery extends CardImpl {
public MoxiteRefinery(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}");
// {2}, {T}, Remove X counters from an artifact or creature you control: Choose one. Activate only as a sorcery.
// * Put X charge counters on target artifact.
Ability ability = new SimpleActivatedAbility(new AddCountersTargetEffect(
CounterType.CHARGE.createInstance(), GetXValue.instance
), new GenericManaCost(2)).setTiming(TimingRule.SORCERY);
ability.addCost(new TapSourceCost());
ability.addCost(new RemoveVariableCountersTargetCost(
StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT_OR_CREATURE, CounterType.CHARGE
));
ability.addTarget(new TargetArtifactPermanent());
ability.getModes().setChooseText("choose one. Activate only as a sorcery.");
// * Put X +1/+1 counters on target creature.
ability.addMode(new Mode(new AddCountersTargetEffect(
CounterType.P1P1.createInstance(), GetXValue.instance
)).addTarget(new TargetCreaturePermanent()));
this.addAbility(ability);
}
private MoxiteRefinery(final MoxiteRefinery card) {
super(card);
}
@Override
public MoxiteRefinery copy() {
return new MoxiteRefinery(this);
}
}

View file

@ -116,6 +116,8 @@ public final class EdgeOfEternitiesCommander extends ExpansionSet {
cards.add(new SetCardInfo("Mindless Automaton", 142, Rarity.UNCOMMON, mage.cards.m.MindlessAutomaton.class));
cards.add(new SetCardInfo("Moraug, Fury of Akoum", 89, Rarity.MYTHIC, mage.cards.m.MoraugFuryOfAkoum.class));
cards.add(new SetCardInfo("Mountain Valley", 61, Rarity.UNCOMMON, mage.cards.m.MountainValley.class));
cards.add(new SetCardInfo("Moxite Refinery", 17, Rarity.RARE, mage.cards.m.MoxiteRefinery.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Moxite Refinery", 37, Rarity.RARE, mage.cards.m.MoxiteRefinery.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Multani, Yavimaya's Avatar", 100, Rarity.MYTHIC, mage.cards.m.MultaniYavimayasAvatar.class));
cards.add(new SetCardInfo("Myriad Landscape", 169, Rarity.UNCOMMON, mage.cards.m.MyriadLandscape.class));
cards.add(new SetCardInfo("Mystic Monastery", 170, Rarity.UNCOMMON, mage.cards.m.MysticMonastery.class));

View file

@ -9,8 +9,6 @@ import mage.constants.Zone;
public class ActivateAsSorceryActivatedAbility extends ActivatedAbilityImpl {
private boolean showActivateText = true;
public ActivateAsSorceryActivatedAbility(Effect effect, Cost cost) {
this(Zone.BATTLEFIELD, effect, cost);
}
@ -22,7 +20,6 @@ public class ActivateAsSorceryActivatedAbility extends ActivatedAbilityImpl {
protected ActivateAsSorceryActivatedAbility(final ActivateAsSorceryActivatedAbility ability) {
super(ability);
this.showActivateText = ability.showActivateText;
}
@Override
@ -30,18 +27,9 @@ public class ActivateAsSorceryActivatedAbility extends ActivatedAbilityImpl {
return new ActivateAsSorceryActivatedAbility(this);
}
public ActivateAsSorceryActivatedAbility withShowActivateText(boolean showActivateText) {
this.showActivateText = showActivateText;
return this;
}
@Override
public String getRule() {
String superRule = super.getRule();
if (!showActivateText) {
return superRule;
}
String newText = (mayActivate == TargetController.OPPONENT
? " Only your opponents may activate this ability and only as a sorcery."
: " Activate only as a sorcery.");