mirror of
https://github.com/correl/mage.git
synced 2025-04-03 01:08:59 -09:00
[SNC] Implemented Professional Face-Breaker
This commit is contained in:
parent
20a577fc5a
commit
32f12d3508
12 changed files with 82 additions and 26 deletions
Mage.Sets/src/mage
cards
g
m
n
o
p
s
t
sets
Mage/src/main/java/mage
abilities/common
game/command/emblems
|
@ -3,7 +3,7 @@ package mage.cards.g;
|
|||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.BecomesBlockedAllTriggeredAbility;
|
||||
import mage.abilities.common.ControlledCreaturesDealCombatDamagePlayerTriggeredAbility;
|
||||
import mage.abilities.common.DealCombatDamageControlledTriggeredAbility;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.ReturnToHandTargetEffect;
|
||||
import mage.constants.SubType;
|
||||
|
@ -40,7 +40,7 @@ public final class GrazilaxxIllithidScholar extends CardImpl {
|
|||
));
|
||||
|
||||
// Whenever one or more creatures you control deal combat damage to a player, draw a card.
|
||||
this.addAbility(new ControlledCreaturesDealCombatDamagePlayerTriggeredAbility(new DrawCardSourceControllerEffect(1)));
|
||||
this.addAbility(new DealCombatDamageControlledTriggeredAbility(new DrawCardSourceControllerEffect(1)));
|
||||
}
|
||||
|
||||
private GrazilaxxIllithidScholar(final GrazilaxxIllithidScholar card) {
|
||||
|
|
|
@ -3,7 +3,7 @@ package mage.cards.g;
|
|||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
||||
import mage.abilities.common.ControlledCreaturesDealCombatDamagePlayerTriggeredAbility;
|
||||
import mage.abilities.common.DealCombatDamageControlledTriggeredAbility;
|
||||
import mage.abilities.costs.common.SacrificeXTargetCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
|
@ -39,7 +39,7 @@ public final class GrimHireling extends CardImpl {
|
|||
this.toughness = new MageInt(2);
|
||||
|
||||
// Whenever one or more creatures you control deal combat damage to a player, create two Treasure tokens.
|
||||
this.addAbility(new ControlledCreaturesDealCombatDamagePlayerTriggeredAbility(
|
||||
this.addAbility(new DealCombatDamageControlledTriggeredAbility(
|
||||
new CreateTokenEffect(new TreasureToken(), 2)
|
||||
));
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package mage.cards.m;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.ControlledCreaturesDealCombatDamagePlayerTriggeredAbility;
|
||||
import mage.abilities.common.DealCombatDamageControlledTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesAllEffect;
|
||||
import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect;
|
||||
|
@ -44,7 +44,7 @@ public final class MidnightPathlighter extends CardImpl {
|
|||
)));
|
||||
|
||||
// Whenever one or more creatures you control deal combat damage to a player, venture into the dungeon.
|
||||
this.addAbility(new ControlledCreaturesDealCombatDamagePlayerTriggeredAbility(new VentureIntoTheDungeonEffect()));
|
||||
this.addAbility(new DealCombatDamageControlledTriggeredAbility(new VentureIntoTheDungeonEffect()));
|
||||
}
|
||||
|
||||
private MidnightPathlighter(final MidnightPathlighter card) {
|
||||
|
|
|
@ -3,7 +3,7 @@ package mage.cards.n;
|
|||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.ControlledCreaturesDealCombatDamagePlayerTriggeredAbility;
|
||||
import mage.abilities.common.DealCombatDamageControlledTriggeredAbility;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.TapAllTargetPlayerControlsEffect;
|
||||
import mage.abilities.effects.common.UntapAllEffect;
|
||||
|
@ -26,7 +26,7 @@ public final class NaturesWill extends CardImpl {
|
|||
// Whenever one or more creatures you control deal combat damage to a player, tap all lands that player controls and untap all lands you control.
|
||||
Effect tapAllEffect = new TapAllTargetPlayerControlsEffect(new FilterLandPermanent());
|
||||
tapAllEffect.setText("tap all lands that player controls");
|
||||
Ability ability = new ControlledCreaturesDealCombatDamagePlayerTriggeredAbility(Zone.BATTLEFIELD, tapAllEffect, true);
|
||||
Ability ability = new DealCombatDamageControlledTriggeredAbility(Zone.BATTLEFIELD, tapAllEffect, true);
|
||||
ability.addEffect(new UntapAllEffect(new FilterControlledLandPermanent()));
|
||||
addAbility(ability);
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ package mage.cards.o;
|
|||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.ControlledCreaturesDealCombatDamagePlayerTriggeredAbility;
|
||||
import mage.abilities.common.DealCombatDamageControlledTriggeredAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.ExileFromGraveCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
|
@ -26,7 +26,7 @@ public final class OngoingInvestigation extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}");
|
||||
|
||||
// Whenever one or more creatures you control deal combat damage to a player, investigate.
|
||||
this.addAbility(new ControlledCreaturesDealCombatDamagePlayerTriggeredAbility(new InvestigateEffect()));
|
||||
this.addAbility(new DealCombatDamageControlledTriggeredAbility(new InvestigateEffect()));
|
||||
|
||||
// {1}{G}, Exile a creature card from your graveyard: Investigate. You gain 2 life.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new InvestigateEffect(), new ManaCostsImpl("{1}{G}"));
|
||||
|
|
55
Mage.Sets/src/mage/cards/p/ProfessionalFaceBreaker.java
Normal file
55
Mage.Sets/src/mage/cards/p/ProfessionalFaceBreaker.java
Normal file
|
@ -0,0 +1,55 @@
|
|||
package mage.cards.p;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.DealCombatDamageControlledTriggeredAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.ExileTopXMayPlayUntilEndOfTurnEffect;
|
||||
import mage.abilities.keyword.MenaceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.game.permanent.token.TreasureToken;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class ProfessionalFaceBreaker extends CardImpl {
|
||||
|
||||
private static final FilterControlledPermanent filter
|
||||
= new FilterControlledPermanent(SubType.TREASURE, "a Treasure");
|
||||
|
||||
public ProfessionalFaceBreaker(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}");
|
||||
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.WARRIOR);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// Menace
|
||||
this.addAbility(new MenaceAbility());
|
||||
|
||||
// Whenever one or more creatures you control deal combat damage to a player, create a Treasure token.
|
||||
this.addAbility(new DealCombatDamageControlledTriggeredAbility(new CreateTokenEffect(new TreasureToken())));
|
||||
|
||||
// Sacrifice a Treasure: Exile the top card of your library. You may play that card this turn.
|
||||
this.addAbility(new SimpleActivatedAbility(
|
||||
new ExileTopXMayPlayUntilEndOfTurnEffect(1, false), new SacrificeTargetCost(filter)
|
||||
));
|
||||
}
|
||||
|
||||
private ProfessionalFaceBreaker(final ProfessionalFaceBreaker card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProfessionalFaceBreaker copy() {
|
||||
return new ProfessionalFaceBreaker(this);
|
||||
}
|
||||
}
|
|
@ -3,7 +3,7 @@ package mage.cards.p;
|
|||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.ControlledCreaturesDealCombatDamagePlayerTriggeredAbility;
|
||||
import mage.abilities.common.DealCombatDamageControlledTriggeredAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.DoIfCostPaid;
|
||||
import mage.abilities.effects.common.ReturnToHandSourceEffect;
|
||||
|
@ -30,7 +30,7 @@ public final class PyrewildShaman extends CardImpl {
|
|||
this.addAbility(new BloodrushAbility("{1}{R}", new BoostTargetEffect(3, 1, Duration.EndOfTurn)));
|
||||
|
||||
// Whenever one or more creatures you control deal combat damage to a player, if Pyrewild Shaman is in your graveyard, you may pay {3}. If you do, return Pyrewild Shaman to your hand.
|
||||
this.addAbility(new ControlledCreaturesDealCombatDamagePlayerTriggeredAbility(Zone.GRAVEYARD,
|
||||
this.addAbility(new DealCombatDamageControlledTriggeredAbility(Zone.GRAVEYARD,
|
||||
new DoIfCostPaid(new ReturnToHandSourceEffect(), new ManaCostsImpl("{3}"))
|
||||
.setText("if {this} is in your graveyard, you may pay {3}. If you do, return {this} to your hand")));
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ package mage.cards.s;
|
|||
import java.util.UUID;
|
||||
|
||||
import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.abilities.common.ControlledCreaturesDealCombatDamagePlayerTriggeredAbility;
|
||||
import mage.abilities.common.DealCombatDamageControlledTriggeredAbility;
|
||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
|
@ -32,7 +32,7 @@ public final class StormTheVault extends CardImpl {
|
|||
this.secondSideCardClazz = mage.cards.v.VaultOfCatlacan.class;
|
||||
|
||||
// Whenever one or more creatures you control deal combat damage to a player, create a colorless Treasure artifact token with "{T}, Sacrifice this artifact: Add one mana of any color."
|
||||
this.addAbility(new ControlledCreaturesDealCombatDamagePlayerTriggeredAbility(new CreateTokenEffect(new TreasureToken())));
|
||||
this.addAbility(new DealCombatDamageControlledTriggeredAbility(new CreateTokenEffect(new TreasureToken())));
|
||||
|
||||
// At the beginning of your end step, if you control five or more artifacts, transform Storm the Vault.
|
||||
this.addAbility(new TransformAbility());
|
||||
|
|
|
@ -3,7 +3,7 @@ package mage.cards.t;
|
|||
import java.util.UUID;
|
||||
import mage.ApprovingObject;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.ControlledCreaturesDealCombatDamagePlayerTriggeredAbility;
|
||||
import mage.abilities.common.DealCombatDamageControlledTriggeredAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
|
@ -34,7 +34,7 @@ public final class ThunderbladeCharge extends CardImpl {
|
|||
// Whenever one or more creatures you control deal combat damage to a player,
|
||||
// if Thunderblade Charge is in your graveyard, you may pay {2}{R}{R}{R}.
|
||||
// If you do, you may cast it without paying its mana cost.
|
||||
this.addAbility(new ControlledCreaturesDealCombatDamagePlayerTriggeredAbility(Zone.GRAVEYARD,
|
||||
this.addAbility(new DealCombatDamageControlledTriggeredAbility(Zone.GRAVEYARD,
|
||||
new DoIfCostPaid(new ThunderbladeChargeCastEffect(), new ManaCostsImpl("{2}{R}{R}{R}"))
|
||||
.setText("if {this} is in your graveyard, you may pay {2}{R}{R}{R}. "
|
||||
+ "If you do, you may cast it without paying its mana cost")));
|
||||
|
|
|
@ -65,6 +65,7 @@ public final class StreetsOfNewCapenna extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Nimble Larcenist", 321, Rarity.UNCOMMON, mage.cards.n.NimbleLarcenist.class));
|
||||
cards.add(new SetCardInfo("Obscura Charm", 208, Rarity.UNCOMMON, mage.cards.o.ObscuraCharm.class));
|
||||
cards.add(new SetCardInfo("Plains", 262, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Professional Face-Breaker", 116, Rarity.RARE, mage.cards.p.ProfessionalFaceBreaker.class));
|
||||
cards.add(new SetCardInfo("Racers' Ring", 253, Rarity.COMMON, mage.cards.r.RacersRing.class));
|
||||
cards.add(new SetCardInfo("Raffine's Tower", 254, Rarity.RARE, mage.cards.r.RaffinesTower.class));
|
||||
cards.add(new SetCardInfo("Raffine, Scheming Seer", 213, Rarity.MYTHIC, mage.cards.r.RaffineSchemingSeer.class));
|
||||
|
|
|
@ -17,39 +17,39 @@ import java.util.UUID;
|
|||
/**
|
||||
* @author LevelX2
|
||||
*/
|
||||
public class ControlledCreaturesDealCombatDamagePlayerTriggeredAbility extends TriggeredAbilityImpl {
|
||||
public class DealCombatDamageControlledTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
private final Set<UUID> damagedPlayerIds = new HashSet<>();
|
||||
private final boolean setTargetPointer;
|
||||
private final boolean onlyOpponents;
|
||||
|
||||
public ControlledCreaturesDealCombatDamagePlayerTriggeredAbility(Effect effect) {
|
||||
public DealCombatDamageControlledTriggeredAbility(Effect effect) {
|
||||
this(Zone.BATTLEFIELD, effect);
|
||||
}
|
||||
|
||||
public ControlledCreaturesDealCombatDamagePlayerTriggeredAbility(Zone zone, Effect effect) {
|
||||
public DealCombatDamageControlledTriggeredAbility(Zone zone, Effect effect) {
|
||||
this(zone, effect, false);
|
||||
}
|
||||
|
||||
public ControlledCreaturesDealCombatDamagePlayerTriggeredAbility(Zone zone, Effect effect, boolean setTargetPointer) {
|
||||
public DealCombatDamageControlledTriggeredAbility(Zone zone, Effect effect, boolean setTargetPointer) {
|
||||
this(zone, effect, setTargetPointer, false);
|
||||
}
|
||||
|
||||
public ControlledCreaturesDealCombatDamagePlayerTriggeredAbility(Zone zone, Effect effect, boolean setTargetPointer, boolean onlyOpponents) {
|
||||
public DealCombatDamageControlledTriggeredAbility(Zone zone, Effect effect, boolean setTargetPointer, boolean onlyOpponents) {
|
||||
super(zone, effect, false);
|
||||
this.setTargetPointer = setTargetPointer;
|
||||
this.onlyOpponents = onlyOpponents;
|
||||
}
|
||||
|
||||
public ControlledCreaturesDealCombatDamagePlayerTriggeredAbility(final ControlledCreaturesDealCombatDamagePlayerTriggeredAbility ability) {
|
||||
public DealCombatDamageControlledTriggeredAbility(final DealCombatDamageControlledTriggeredAbility ability) {
|
||||
super(ability);
|
||||
this.setTargetPointer = ability.setTargetPointer;
|
||||
this.onlyOpponents = ability.onlyOpponents;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ControlledCreaturesDealCombatDamagePlayerTriggeredAbility copy() {
|
||||
return new ControlledCreaturesDealCombatDamagePlayerTriggeredAbility(this);
|
||||
public DealCombatDamageControlledTriggeredAbility copy() {
|
||||
return new DealCombatDamageControlledTriggeredAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
|
@ -1,7 +1,7 @@
|
|||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.ControlledCreaturesDealCombatDamagePlayerTriggeredAbility;
|
||||
import mage.abilities.common.DealCombatDamageControlledTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.Effect;
|
||||
|
@ -25,7 +25,7 @@ public final class LolthSpiderQueenEmblem extends Emblem {
|
|||
this.setName("Emblem Lolth");
|
||||
this.setExpansionSetCodeForImage("AFR");
|
||||
this.getAbilities().add(new ConditionalInterveningIfTriggeredAbility(
|
||||
new ControlledCreaturesDealCombatDamagePlayerTriggeredAbility(
|
||||
new DealCombatDamageControlledTriggeredAbility(
|
||||
Zone.COMMAND, new LolthSpiderQueenEmblemEffect(), true, true
|
||||
), LolthSpiderQueenEmblemCondition.instance, "Whenever an opponent " +
|
||||
"is dealt combat damage by one or more creatures you control, " +
|
||||
|
|
Loading…
Add table
Reference in a new issue