1
0
Fork 0
mirror of https://github.com/correl/mage.git synced 2025-04-02 11:25:59 -09:00

Added possibility to check kind of cost to pay for conditional mana use.

This commit is contained in:
LevelX2 2016-01-10 12:01:58 +01:00
parent d63f6d7d27
commit c8f82b49ff
208 changed files with 770 additions and 571 deletions
Mage.Server.Plugins
Mage.Player.AI/src/main/java/mage/player/ai
Mage.Player.Human/src/mage/player/human
Mage.Sets/src/mage/sets
alarareborn
alliances
avacynrestored
battleforzendikar
betrayersofkamigawa
bornofthegods
championsofkamigawa
coldsnap
commander
commander2013
conspiracy
darkascension
darksteel
dragonsoftarkir
eventide
exodus
fallenempires
fifthdawn
fourthedition
futuresight
guildpact
iceage
innistrad
journeyintonyx
judgment
legends
limitedalpha
lorwyn
magic2011
magic2015
masterseditionii
masterseditioniii
masterseditioniv
mercadianmasques
mirage
mirrodin
modernmasters
nemesis
newphyrexia
oathofthegatewatch
odyssey
planarchaos
planechase
planeshift
prophecy
ravnica
returntoravnica
saviorsofkamigawa
scarsofmirrodin

View file

@ -1195,7 +1195,7 @@ public class ComputerPlayer extends PlayerImpl implements Player {
} }
// pay phyrexian life costs // pay phyrexian life costs
if (cost instanceof PhyrexianManaCost) { if (cost instanceof PhyrexianManaCost) {
if (cost.pay(null, game, null, playerId, false) || spendAnyMana) { if (cost.pay(null, game, null, playerId, false, null) || spendAnyMana) {
return true; return true;
} }
} }

View file

@ -805,7 +805,7 @@ public class HumanPlayer extends PlayerImpl {
if (cost instanceof PhyrexianManaCost) { if (cost instanceof PhyrexianManaCost) {
PhyrexianManaCost ph = (PhyrexianManaCost) cost; PhyrexianManaCost ph = (PhyrexianManaCost) cost;
if (ph.canPay(null, null, playerId, game)) { if (ph.canPay(null, null, playerId, game)) {
((PhyrexianManaCost) cost).pay(null, game, null, playerId, false); ((PhyrexianManaCost) cost).pay(null, game, null, playerId, false, null);
} }
break; break;
} }

View file

@ -105,7 +105,7 @@ class VectisDominatorEffect extends OneShotEffect {
cost.clearPaid(); cost.clearPaid();
final StringBuilder sb = new StringBuilder("Pay 2 life? (Otherwise ").append(targetCreature.getName()).append(" will be tapped)"); final StringBuilder sb = new StringBuilder("Pay 2 life? (Otherwise ").append(targetCreature.getName()).append(" will be tapped)");
if (player.chooseUse(Outcome.Benefit, sb.toString(), source, game)) { if (player.chooseUse(Outcome.Benefit, sb.toString(), source, game)) {
cost.pay(source, game, targetCreature.getControllerId(), targetCreature.getControllerId(), true); cost.pay(source, game, targetCreature.getControllerId(), targetCreature.getControllerId(), true, null);
} }
if (!cost.isPaid()) { if (!cost.isPaid()) {
return targetCreature.tap(game); return targetCreature.tap(game);

View file

@ -31,6 +31,7 @@ import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.Mana; import mage.Mana;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.effects.common.BasicManaEffect; import mage.abilities.effects.common.BasicManaEffect;
import mage.abilities.mana.SimpleManaAbility; import mage.abilities.mana.SimpleManaAbility;
@ -83,7 +84,7 @@ class ExileSourceFromHandCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
Card card = game.getCard(sourceId); Card card = game.getCard(sourceId);
Player player = game.getPlayer(controllerId); Player player = game.getPlayer(controllerId);
if (player != null && player.getHand().contains(sourceId) && card != null) { if (player != null && player.getHand().contains(sourceId) && card != null) {

View file

@ -160,7 +160,7 @@ class ExileTopCardLibraryCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
Player controller = game.getPlayer(controllerId); Player controller = game.getPlayer(controllerId);
if (controller != null) { if (controller != null) {
card = controller.getLibrary().getFromTop(game); card = controller.getLibrary().getFromTop(game);

View file

@ -36,6 +36,7 @@ import mage.Mana;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.AsEntersBattlefieldAbility; import mage.abilities.common.AsEntersBattlefieldAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
import mage.abilities.effects.common.ChooseCreatureTypeEffect; import mage.abilities.effects.common.ChooseCreatureTypeEffect;
@ -136,7 +137,7 @@ class CavernOfSoulsManaCondition extends CreatureCastManaCondition {
} }
@Override @Override
public boolean apply(Game game, Ability source, UUID manaProducer) { public boolean apply(Game game, Ability source, UUID originalId, Cost costToPay) {
// check: ... to cast a creature spell // check: ... to cast a creature spell
if (super.apply(game, source)) { if (super.apply(game, source)) {
// check: ... of the chosen type // check: ... of the chosen type

View file

@ -95,7 +95,7 @@ class GrovetenderDruidsEffect extends OneShotEffect {
if(player != null) { if(player != null) {
if(player.chooseUse(Outcome.BoostCreature, "Do you want to to pay {1}?", source, game)) { if(player.chooseUse(Outcome.BoostCreature, "Do you want to to pay {1}?", source, game)) {
Cost cost = new ManaCostsImpl("{1}"); Cost cost = new ManaCostsImpl("{1}");
if(cost.pay(source, game, source.getSourceId(), source.getControllerId(), false)) { if(cost.pay(source, game, source.getSourceId(), source.getControllerId(), false, null)) {
new CreateTokenEffect(new GrovetenderDruidsPlantToken()).apply(game, source); new CreateTokenEffect(new GrovetenderDruidsPlantToken()).apply(game, source);
} }
return true; return true;

View file

@ -31,6 +31,7 @@ import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.Effect; import mage.abilities.effects.Effect;
@ -92,7 +93,7 @@ class BlindingPowderUnattachCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
Permanent permanent = game.getPermanent(sourceId); Permanent permanent = game.getPermanent(sourceId);
if (permanent != null) { if (permanent != null) {
for (UUID attachmentId : permanent.getAttachments()) { for (UUID attachmentId : permanent.getAttachments()) {

View file

@ -100,7 +100,7 @@ class OgreMarauderEffect extends OneShotEffect {
Cost cost = new SacrificeTargetCost(new TargetControlledCreaturePermanent()); Cost cost = new SacrificeTargetCost(new TargetControlledCreaturePermanent());
if (cost.canPay(source, source.getSourceId(), defendingPlayerId, game) && if (cost.canPay(source, source.getSourceId(), defendingPlayerId, game) &&
defender.chooseUse(Outcome.LoseAbility, "Sacrifice a creature to prevent that " + sourceObject.getLogName() + " can't be blocked?", source, game)) { defender.chooseUse(Outcome.LoseAbility, "Sacrifice a creature to prevent that " + sourceObject.getLogName() + " can't be blocked?", source, game)) {
if (!cost.pay(source, game, source.getSourceId(), defendingPlayerId, false)) { if (!cost.pay(source, game, source.getSourceId(), defendingPlayerId, false, null)) {
// cost was not payed - so source can't be blocked // cost was not payed - so source can't be blocked
ContinuousEffect effect = new CantBeBlockedSourceEffect(Duration.EndOfTurn); ContinuousEffect effect = new CantBeBlockedSourceEffect(Duration.EndOfTurn);
game.addEffect(effect, source); game.addEffect(effect, source);

View file

@ -138,7 +138,7 @@ class ShurikenUnattachCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
Permanent permanent = game.getPermanent(sourceId); Permanent permanent = game.getPermanent(sourceId);
if (permanent != null) { if (permanent != null) {
for (UUID attachmentId :permanent.getAttachments()) { for (UUID attachmentId :permanent.getAttachments()) {

View file

@ -109,7 +109,7 @@ class FloodtideSerpentReplacementEffect extends ReplacementEffectImpl {
ReturnToHandChosenControlledPermanentCost attackCost = new ReturnToHandChosenControlledPermanentCost(new TargetControlledPermanent(filter)); ReturnToHandChosenControlledPermanentCost attackCost = new ReturnToHandChosenControlledPermanentCost(new TargetControlledPermanent(filter));
if (attackCost.canPay(source, source.getSourceId(), event.getPlayerId(), game) if (attackCost.canPay(source, source.getSourceId(), event.getPlayerId(), game)
&& player.chooseUse(Outcome.Neutral, "Return an enchantment you control to hand to attack?", source, game)) { && player.chooseUse(Outcome.Neutral, "Return an enchantment you control to hand to attack?", source, game)) {
if (attackCost.pay(source, game, source.getSourceId(), event.getPlayerId(), true)) { if (attackCost.pay(source, game, source.getSourceId(), event.getPlayerId(), true, null)) {
return false; return false;
} }
} }

View file

@ -98,7 +98,7 @@ class HeroOfLeinaTowerEffect extends OneShotEffect {
if (you != null && you.chooseUse(Outcome.BoostCreature, "Do you want to to pay {X}?", source, game)) { if (you != null && you.chooseUse(Outcome.BoostCreature, "Do you want to to pay {X}?", source, game)) {
int costX = you.announceXMana(0, Integer.MAX_VALUE, "Announce the value for {X}", game, source); int costX = you.announceXMana(0, Integer.MAX_VALUE, "Announce the value for {X}", game, source);
cost.add(new GenericManaCost(costX)); cost.add(new GenericManaCost(costX));
if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false)) { if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false, null)) {
Permanent sourcePermanent = game.getPermanent(source.getSourceId()); Permanent sourcePermanent = game.getPermanent(source.getSourceId());
if (sourcePermanent != null) { if (sourcePermanent != null) {
return new AddCountersSourceEffect(CounterType.P1P1.createInstance(costX), true).apply(game, source); return new AddCountersSourceEffect(CounterType.P1P1.createInstance(costX), true).apply(game, source);

View file

@ -130,7 +130,7 @@ class DoUnlessTargetPaysCost extends OneShotEffect {
message = CardUtil.replaceSourceName(message, mageObject.getLogName()); message = CardUtil.replaceSourceName(message, mageObject.getLogName());
cost.clearPaid(); cost.clearPaid();
if (cost.canPay(source, source.getSourceId(), player.getId(), game) && player.chooseUse(executingEffect.getOutcome(), message, source, game)) { if (cost.canPay(source, source.getSourceId(), player.getId(), game) && player.chooseUse(executingEffect.getOutcome(), message, source, game)) {
cost.pay(source, game, source.getSourceId(), player.getId(), false); cost.pay(source, game, source.getSourceId(), player.getId(), false, null);
} }
if (!cost.isPaid()) { if (!cost.isPaid()) {
executingEffect.setTargetPointer(this.targetPointer); executingEffect.setTargetPointer(this.targetPointer);

View file

@ -98,7 +98,7 @@ class CutTheTethersEffect extends OneShotEffect {
boolean paid = false; boolean paid = false;
if (player.chooseUse(outcome, new StringBuilder("Pay {3} to keep ").append(creature.getName()).append(" on the battlefield?").toString(), source, game)) { if (player.chooseUse(outcome, new StringBuilder("Pay {3} to keep ").append(creature.getName()).append(" on the battlefield?").toString(), source, game)) {
Cost cost = new GenericManaCost(3); Cost cost = new GenericManaCost(3);
if (!cost.pay(source, game, source.getSourceId(), creature.getControllerId(), false)) { if (!cost.pay(source, game, source.getSourceId(), creature.getControllerId(), false, null)) {
paid = true; paid = true;
} }
if (!paid) { if (!paid) {

View file

@ -36,6 +36,7 @@ import mage.constants.Zone;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
@ -184,7 +185,7 @@ class HankyuCountersSourceCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
Permanent equipment = game.getPermanent(this.effectGivingEquipmentId); Permanent equipment = game.getPermanent(this.effectGivingEquipmentId);
if (equipment != null ) { if (equipment != null ) {
this.removedCounters = equipment.getCounters().getCount(CounterType.AIM); this.removedCounters = equipment.getCounters().getCount(CounterType.AIM);

View file

@ -36,6 +36,7 @@ import mage.constants.Rarity;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
@ -98,7 +99,7 @@ class HisokaMinamoSenseiDiscardTargetCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
if (targets.choose(Outcome.Discard, controllerId, sourceId, game)) { if (targets.choose(Outcome.Discard, controllerId, sourceId, game)) {
Player player = game.getPlayer(controllerId); Player player = game.getPlayer(controllerId);
for (UUID targetId: targets.get(0).getTargets()) { for (UUID targetId: targets.get(0).getTargets()) {

View file

@ -35,6 +35,7 @@ import mage.abilities.Ability;
import mage.abilities.SpellAbility; import mage.abilities.SpellAbility;
import mage.abilities.common.EntersBattlefieldTappedAbility; import mage.abilities.common.EntersBattlefieldTappedAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.Condition;
import mage.abilities.costs.Cost;
import mage.abilities.costs.common.PayLifeCost; import mage.abilities.costs.common.PayLifeCost;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.mana.ConditionalColorlessManaAbility; import mage.abilities.mana.ConditionalColorlessManaAbility;
@ -62,7 +63,7 @@ public class UntaidakeTheCloudKeeper extends CardImpl {
Ability ability = new ConditionalColorlessManaAbility(new TapSourceCost(), 2, new LegendarySpellManaBuilder()); Ability ability = new ConditionalColorlessManaAbility(new TapSourceCost(), 2, new LegendarySpellManaBuilder());
ability.addCost(new PayLifeCost(2)); ability.addCost(new PayLifeCost(2));
this.addAbility(ability); this.addAbility(ability);
} }
public UntaidakeTheCloudKeeper(final UntaidakeTheCloudKeeper card) { public UntaidakeTheCloudKeeper(final UntaidakeTheCloudKeeper card) {
@ -76,6 +77,7 @@ public class UntaidakeTheCloudKeeper extends CardImpl {
} }
class LegendarySpellManaBuilder extends ConditionalManaBuilder { class LegendarySpellManaBuilder extends ConditionalManaBuilder {
@Override @Override
public ConditionalMana build(Object... options) { public ConditionalMana build(Object... options) {
return new LegendaryCastConditionalMana(this.mana); return new LegendaryCastConditionalMana(this.mana);
@ -97,6 +99,7 @@ class LegendaryCastConditionalMana extends ConditionalMana {
} }
class LegendaryCastManaCondition extends ManaCondition implements Condition { class LegendaryCastManaCondition extends ManaCondition implements Condition {
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
if (source instanceof SpellAbility) { if (source instanceof SpellAbility) {
@ -109,7 +112,7 @@ class LegendaryCastManaCondition extends ManaCondition implements Condition {
} }
@Override @Override
public boolean apply(Game game, Ability source, UUID originalId) { public boolean apply(Game game, Ability source, UUID originalId, Cost costsToPay) {
return apply(game, source); return apply(game, source);
} }
} }

View file

@ -30,6 +30,7 @@ package mage.sets.coldsnap;
import java.util.UUID; import java.util.UUID;
import mage.Mana; import mage.Mana;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.keyword.CumulativeUpkeepAbility; import mage.abilities.keyword.CumulativeUpkeepAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -73,7 +74,7 @@ class BraidOfFireCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
Player player = game.getPlayer(controllerId); Player player = game.getPlayer(controllerId);
player.getManaPool().addMana(Mana.RedMana(1), game, ability); player.getManaPool().addMana(Mana.RedMana(1), game, ability);
paid = true; paid = true;

View file

@ -30,6 +30,7 @@ package mage.sets.coldsnap;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.keyword.CumulativeUpkeepAbility; import mage.abilities.keyword.CumulativeUpkeepAbility;
import mage.cards.Card; import mage.cards.Card;
@ -84,7 +85,7 @@ class JotunGruntCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
Player controller = game.getPlayer(controllerId); Player controller = game.getPlayer(controllerId);
if (controller != null) { if (controller != null) {
if (targets.choose(Outcome.Removal, controllerId, sourceId, game)) { if (targets.choose(Outcome.Removal, controllerId, sourceId, game)) {

View file

@ -30,6 +30,7 @@ package mage.sets.coldsnap;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.keyword.CumulativeUpkeepAbility; import mage.abilities.keyword.CumulativeUpkeepAbility;
import mage.abilities.keyword.TrampleAbility; import mage.abilities.keyword.TrampleAbility;
@ -89,7 +90,7 @@ class ShelteringAncientCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
Player controller = game.getPlayer(controllerId); Player controller = game.getPlayer(controllerId);
if (controller != null) { if (controller != null) {
Target target = new TargetCreaturePermanent(1, 1, filter, true); Target target = new TargetCreaturePermanent(1, 1, filter, true);

View file

@ -121,7 +121,7 @@ class AllianceOfArmsEffect extends OneShotEffect {
xValue = player.announceXMana(0, Integer.MAX_VALUE, "How much mana will you pay?", game, source); xValue = player.announceXMana(0, Integer.MAX_VALUE, "How much mana will you pay?", game, source);
if (xValue > 0) { if (xValue > 0) {
Cost cost = new GenericManaCost(xValue); Cost cost = new GenericManaCost(xValue);
payed = cost.pay(source, game, source.getSourceId(), player.getId(), false); payed = cost.pay(source, game, source.getSourceId(), player.getId(), false, null);
} else { } else {
payed = true; payed = true;
} }

View file

@ -147,7 +147,7 @@ class ChorusOfTheConclaveReplacementEffect extends ReplacementEffectImpl {
xValue = player.announceXMana(0, Integer.MAX_VALUE, "How much mana will you pay?", game, source); xValue = player.announceXMana(0, Integer.MAX_VALUE, "How much mana will you pay?", game, source);
if (xValue > 0) { if (xValue > 0) {
Cost cost = new GenericManaCost(xValue); Cost cost = new GenericManaCost(xValue);
payed = cost.pay(source, game, source.getSourceId(), player.getId(), false); payed = cost.pay(source, game, source.getSourceId(), player.getId(), false, null);
} else { } else {
payed = true; payed = true;
} }

View file

@ -130,7 +130,7 @@ class CollectiveVoyageEffect extends OneShotEffect {
xValue = player.announceXMana(0, Integer.MAX_VALUE, "How much mana will you pay?", game, source); xValue = player.announceXMana(0, Integer.MAX_VALUE, "How much mana will you pay?", game, source);
if (xValue > 0) { if (xValue > 0) {
Cost cost = new GenericManaCost(xValue); Cost cost = new GenericManaCost(xValue);
payed = cost.pay(source, game, source.getSourceId(), player.getId(), false); payed = cost.pay(source, game, source.getSourceId(), player.getId(), false, null);
} else { } else {
payed = true; payed = true;
} }

View file

@ -100,7 +100,7 @@ class ManaChargedDragonEffect extends OneShotEffect {
xValue = player.announceXMana(0, Integer.MAX_VALUE, "How much mana will you pay?", game, source); xValue = player.announceXMana(0, Integer.MAX_VALUE, "How much mana will you pay?", game, source);
if (xValue > 0) { if (xValue > 0) {
Cost cost = new GenericManaCost(xValue); Cost cost = new GenericManaCost(xValue);
payed = cost.pay(source, game, source.getSourceId(), player.getId(), false); payed = cost.pay(source, game, source.getSourceId(), player.getId(), false, null);
} else { } else {
payed = true; payed = true;
} }

View file

@ -119,7 +119,7 @@ class MindsAglowEffect extends OneShotEffect {
xValue = player.announceXMana(0, Integer.MAX_VALUE, "How much mana will you pay?", game, source); xValue = player.announceXMana(0, Integer.MAX_VALUE, "How much mana will you pay?", game, source);
if (xValue > 0) { if (xValue > 0) {
Cost cost = new GenericManaCost(xValue); Cost cost = new GenericManaCost(xValue);
payed = cost.pay(source, game, source.getSourceId(), player.getId(), false); payed = cost.pay(source, game, source.getSourceId(), player.getId(), false, null);
} else { } else {
payed = true; payed = true;
} }

View file

@ -120,7 +120,7 @@ class SharedTraumaEffect extends OneShotEffect {
xValue = player.announceXMana(0, Integer.MAX_VALUE, "How much mana will you pay?", game, source); xValue = player.announceXMana(0, Integer.MAX_VALUE, "How much mana will you pay?", game, source);
if (xValue > 0) { if (xValue > 0) {
Cost cost = new GenericManaCost(xValue); Cost cost = new GenericManaCost(xValue);
payed = cost.pay(source, game, source.getSourceId(), player.getId(), false); payed = cost.pay(source, game, source.getSourceId(), player.getId(), false, null);
} else { } else {
payed = true; payed = true;
} }

View file

@ -120,7 +120,7 @@ class VishKalBloodArbiterCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
Permanent permanent = game.getPermanent(sourceId); Permanent permanent = game.getPermanent(sourceId);
if (permanent != null) { if (permanent != null) {
this.amount = permanent.getCounters().getCount(name); this.amount = permanent.getCounters().getCount(name);

View file

@ -57,6 +57,7 @@ import mage.target.common.TargetCreatureOrPlayer;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID; import java.util.UUID;
import mage.abilities.costs.Cost;
/** /**
* *
@ -200,7 +201,7 @@ class MarathWillOfTheWildRemoveCountersCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
int amount = new ManacostVariableValue().calculate(game, ability, null); int amount = new ManacostVariableValue().calculate(game, ability, null);
Permanent permanent = game.getPermanent(sourceId); Permanent permanent = game.getPermanent(sourceId);
if (permanent != null && permanent.getCounters().getCount(CounterType.P1P1) >= amount) { if (permanent != null && permanent.getCounters().getCount(CounterType.P1P1) >= amount) {

View file

@ -90,7 +90,7 @@ class VictimizeEffect extends OneShotEffect {
Player controller = game.getPlayer(source.getControllerId()); Player controller = game.getPlayer(source.getControllerId());
if (controller != null) { if (controller != null) {
SacrificeTargetCost cost = new SacrificeTargetCost(new TargetControlledCreaturePermanent(new FilterControlledCreaturePermanent("a creature"))); SacrificeTargetCost cost = new SacrificeTargetCost(new TargetControlledCreaturePermanent(new FilterControlledCreaturePermanent("a creature")));
if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false)) { if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false, null)) {
controller.moveCards(new CardsImpl(getTargetPointer().getTargets(game, source)).getCards(game), controller.moveCards(new CardsImpl(getTargetPointer().getTargets(game, source)).getCards(game),
Zone.BATTLEFIELD, source, game, true, false, false, null); Zone.BATTLEFIELD, source, game, true, false, false, null);
} }

View file

@ -145,7 +145,7 @@ class JarOfEyeballsCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
Permanent permanent = game.getPermanent(ability.getSourceId()); Permanent permanent = game.getPermanent(ability.getSourceId());
if (permanent != null) { if (permanent != null) {
this.removedCounters = permanent.getCounters().getCount(CounterType.EYEBALL); this.removedCounters = permanent.getCounters().getCount(CounterType.EYEBALL);

View file

@ -33,6 +33,7 @@ import mage.constants.*;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
@ -90,7 +91,7 @@ class UnattachCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
Permanent permanent = game.getPermanent(sourceId); Permanent permanent = game.getPermanent(sourceId);
if (permanent != null) { if (permanent != null) {
Permanent attachment = game.getPermanent(attachmentid); Permanent attachment = game.getPermanent(attachmentid);

View file

@ -31,6 +31,7 @@ import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
@ -104,7 +105,7 @@ class SurestrikeTridentUnattachCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
Permanent permanent = game.getPermanent(sourceId); Permanent permanent = game.getPermanent(sourceId);
if (permanent != null) { if (permanent != null) {
for (UUID attachmentId : permanent.getAttachments()) { for (UUID attachmentId : permanent.getAttachments()) {

View file

@ -33,6 +33,7 @@ import mage.MageObject;
import mage.Mana; import mage.Mana;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
@ -120,7 +121,7 @@ class HavenOfTheSpiritConditionalMana extends ConditionalMana {
class HavenOfTheSpiritManaCondition extends CreatureCastManaCondition { class HavenOfTheSpiritManaCondition extends CreatureCastManaCondition {
@Override @Override
public boolean apply(Game game, Ability source, UUID manaProducer) { public boolean apply(Game game, Ability source, UUID manaProducer, Cost costToPay) {
if (super.apply(game, source)) { if (super.apply(game, source)) {
MageObject object = game.getObject(source.getSourceId()); MageObject object = game.getObject(source.getSourceId());
if (object.hasSubtype("Dragon") if (object.hasSubtype("Dragon")

View file

@ -95,7 +95,7 @@ class MysticMeditationEffect extends OneShotEffect {
&& controller.chooseUse(Outcome.Discard, "Do you want to discard a creature card? If you don't, you must discard 2 cards", source, game)) { && controller.chooseUse(Outcome.Discard, "Do you want to discard a creature card? If you don't, you must discard 2 cards", source, game)) {
Cost cost = new DiscardTargetCost(new TargetCardInHand(filter)); Cost cost = new DiscardTargetCost(new TargetCardInHand(filter));
if (cost.canPay(source, source.getSourceId(), controller.getId(), game)) { if (cost.canPay(source, source.getSourceId(), controller.getId(), game)) {
if (cost.pay(source, game, source.getSourceId(), controller.getId(), false)) { if (cost.pay(source, game, source.getSourceId(), controller.getId(), false, null)) {
return true; return true;
} }
} }

View file

@ -31,6 +31,7 @@ import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
@ -101,7 +102,7 @@ class HatchetBullyCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
Permanent permanent = game.getPermanent(ability.getTargets().get(1).getFirstTarget()); Permanent permanent = game.getPermanent(ability.getTargets().get(1).getFirstTarget());
if (permanent != null) { if (permanent != null) {
permanent.addCounters(CounterType.M1M1.createInstance(), game); permanent.addCounters(CounterType.M1M1.createInstance(), game);

View file

@ -34,6 +34,7 @@ import mage.ObjectColor;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.effects.Effect; import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
@ -111,7 +112,7 @@ class ImpelledGiantCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
if (target.choose(Outcome.Tap, controllerId, sourceId, game)) { if (target.choose(Outcome.Tap, controllerId, sourceId, game)) {
for (UUID targetId: (List<UUID>)target.getTargets()) { for (UUID targetId: (List<UUID>)target.getTargets()) {
Permanent permanent = game.getPermanent(targetId); Permanent permanent = game.getPermanent(targetId);

View file

@ -119,7 +119,7 @@ class RiseOfTheHobgoblinsEffect extends OneShotEffect {
if (you != null && you.chooseUse(Outcome.Neutral, "Do you want to to pay {X}?", source, game)) { if (you != null && you.chooseUse(Outcome.Neutral, "Do you want to to pay {X}?", source, game)) {
int costX = you.announceXMana(0, Integer.MAX_VALUE, "Announce the value for {X}", game, source); int costX = you.announceXMana(0, Integer.MAX_VALUE, "Announce the value for {X}", game, source);
cost.add(new GenericManaCost(costX)); cost.add(new GenericManaCost(costX));
if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false)) { if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false, null)) {
Token token = new GoblinSoldierToken(); Token token = new GoblinSoldierToken();
return token.putOntoBattlefield(costX, game, source.getSourceId(), source.getControllerId()); return token.putOntoBattlefield(costX, game, source.getSourceId(), source.getControllerId());
} }

View file

@ -103,7 +103,7 @@ class ErraticPortalEffect extends OneShotEffect {
if (player != null) { if (player != null) {
cost.clearPaid(); cost.clearPaid();
if (player.chooseUse(Outcome.Benefit, "Pay {1}? (Otherwise " + targetCreature.getLogName() +" will be returned to its owner's hand)", source, game)) { if (player.chooseUse(Outcome.Benefit, "Pay {1}? (Otherwise " + targetCreature.getLogName() +" will be returned to its owner's hand)", source, game)) {
cost.pay(source, game, targetCreature.getControllerId(), targetCreature.getControllerId(), false); cost.pay(source, game, targetCreature.getControllerId(), targetCreature.getControllerId(), false, null);
} }
if (!cost.isPaid()) { if (!cost.isPaid()) {
controller.moveCards(targetCreature, Zone.BATTLEFIELD, Zone.HAND, source, game); controller.moveCards(targetCreature, Zone.BATTLEFIELD, Zone.HAND, source, game);

View file

@ -35,6 +35,7 @@ import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.SourceHasCounterCondition; import mage.abilities.condition.common.SourceHasCounterCondition;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.dynamicvalue.common.CountersCount; import mage.abilities.dynamicvalue.common.CountersCount;
@ -127,7 +128,7 @@ class TidalInfluenceCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
this.paid = true; this.paid = true;
return paid; return paid;
} }

View file

@ -112,7 +112,7 @@ class DisruptionAuraEffect extends OneShotEffect {
Cost cost = permanent.getManaCost().copy(); Cost cost = permanent.getManaCost().copy();
if (player.chooseUse(Outcome.Benefit, message, source, game)) { if (player.chooseUse(Outcome.Benefit, message, source, game)) {
cost.clearPaid(); cost.clearPaid();
if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false)) { if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false, null)) {
return true; return true;
} }
} }

View file

@ -148,7 +148,7 @@ class PlungeIntoDarknessSearchEffect extends OneShotEffect {
if (player != null) { if (player != null) {
VariableCost cost = new PayVariableLifeCost(); VariableCost cost = new PayVariableLifeCost();
int xValue = cost.announceXValue(source, game); int xValue = cost.announceXValue(source, game);
cost.getFixedCostsFromAnnouncedValue(xValue).pay(source, game, source.getSourceId(), source.getControllerId(), false); cost.getFixedCostsFromAnnouncedValue(xValue).pay(source, game, source.getSourceId(), source.getControllerId(), false, null);
Cards cards = new CardsImpl(); Cards cards = new CardsImpl();
int count = Math.min(player.getLibrary().size(), xValue); int count = Math.min(player.getLibrary().size(), xValue);

View file

@ -130,11 +130,11 @@ class PossessedPortalEffect extends OneShotEffect {
Cost discardCost = new DiscardCardCost(); Cost discardCost = new DiscardCardCost();
if (discardCost.canPay(source, source.getSourceId(), playerId, game) if (discardCost.canPay(source, source.getSourceId(), playerId, game)
&& player.chooseUse(Outcome.Discard, "Discard a card? (Otherwise sacrifice a permanent)", source, game)) { && player.chooseUse(Outcome.Discard, "Discard a card? (Otherwise sacrifice a permanent)", source, game)) {
discardCost.pay(source, game, source.getSourceId(), playerId, true); discardCost.pay(source, game, source.getSourceId(), playerId, true, null);
} }
else { else {
Cost sacrificeCost = new SacrificeTargetCost(new TargetControlledPermanent()); Cost sacrificeCost = new SacrificeTargetCost(new TargetControlledPermanent());
sacrificeCost.pay(source, game, source.getSourceId(), playerId, true); sacrificeCost.pay(source, game, source.getSourceId(), playerId, true, null);
} }
} }
return true; return true;

View file

@ -97,7 +97,7 @@ class ForceOfNatureEffect extends OneShotEffect {
Cost cost = new ManaCostsImpl("{G}{G}{G}{G}"); Cost cost = new ManaCostsImpl("{G}{G}{G}{G}");
String message = "Would you like to pay {G}{G}{G}{G} to prevent taking 8 damage from {this}?"; String message = "Would you like to pay {G}{G}{G}{G} to prevent taking 8 damage from {this}?";
if (!(controller.chooseUse(Outcome.Benefit, message, source, game) if (!(controller.chooseUse(Outcome.Benefit, message, source, game)
&& cost.pay(source, game, source.getSourceId(), controller.getId(), false))) { && cost.pay(source, game, source.getSourceId(), controller.getId(), false, null))) {
controller.damage(8, source.getSourceId(), game, false, true); controller.damage(8, source.getSourceId(), game, false, true);
} }
return true; return true;

View file

@ -31,6 +31,7 @@ import java.util.UUID;
import mage.Mana; import mage.Mana;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.common.BasicManaEffect; import mage.abilities.effects.common.BasicManaEffect;
@ -114,7 +115,7 @@ class FilterPermanentCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
this.paid = true; this.paid = true;
return paid; return paid;
} }

View file

@ -92,7 +92,7 @@ class LeylineOfLightningEffect extends DamageTargetEffect {
Player player = game.getPlayer(source.getControllerId()); Player player = game.getPlayer(source.getControllerId());
if (player != null) { if (player != null) {
Cost cost = new GenericManaCost(1); Cost cost = new GenericManaCost(1);
if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false)) { if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false, null)) {
super.apply(game, source); super.apply(game, source);
} }
return true; return true;

View file

@ -145,7 +145,7 @@ class MysticRemoraTriggeredAbility extends TriggeredAbilityImpl {
if (controller != null && opponent != null && sourceObject != null) { if (controller != null && opponent != null && sourceObject != null) {
Cost cost = new GenericManaCost(4); Cost cost = new GenericManaCost(4);
String message = "Would you like to pay {4} to prevent the opponent to draw a card?"; String message = "Would you like to pay {4} to prevent the opponent to draw a card?";
if (!(opponent.chooseUse(Outcome.Benefit, message, source, game) && cost.pay(source, game, source.getSourceId(), opponent.getId(), false))) { if (!(opponent.chooseUse(Outcome.Benefit, message, source, game) && cost.pay(source, game, source.getSourceId(), opponent.getId(), false, null))) {
if(controller.chooseUse(Outcome.DrawCard, "Draw a card (" + sourceObject.getLogName() +")", source, game)) { if(controller.chooseUse(Outcome.DrawCard, "Draw a card (" + sourceObject.getLogName() +")", source, game)) {
controller.drawCards(1, game); controller.drawCards(1, game);
} }

View file

@ -109,7 +109,7 @@ class SeizuresEffect extends OneShotEffect {
if(cost.canPay(source, source.getSourceId(), player.getId(), game) if(cost.canPay(source, source.getSourceId(), player.getId(), game)
&& player.chooseUse(Outcome.Benefit, "Pay " + cost.getText() + " to avoid damage?", source, game)) { && player.chooseUse(Outcome.Benefit, "Pay " + cost.getText() + " to avoid damage?", source, game)) {
cost.clearPaid(); cost.clearPaid();
if(cost.pay(source, game, source.getSourceId(), player.getId(), false)) { if(cost.pay(source, game, source.getSourceId(), player.getId(), false, null)) {
return true; return true;
} }
} }

View file

@ -30,6 +30,7 @@ package mage.sets.innistrad;
import java.util.UUID; import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateAsSorceryActivatedAbility; import mage.abilities.common.ActivateAsSorceryActivatedAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.effects.Effect; import mage.abilities.effects.Effect;
import mage.abilities.effects.common.PutTokenOntoBattlefieldCopyTargetEffect; import mage.abilities.effects.common.PutTokenOntoBattlefieldCopyTargetEffect;
@ -97,7 +98,7 @@ class BackFromTheBrinkCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
if (targets.choose(Outcome.Exile, controllerId, sourceId, game)) { if (targets.choose(Outcome.Exile, controllerId, sourceId, game)) {
Player controller = game.getPlayer(controllerId); Player controller = game.getPlayer(controllerId);
if (controller != null) { if (controller != null) {

View file

@ -95,7 +95,7 @@ class FrightfulDelusionEffect extends OneShotEffect {
game.getPlayer(spell.getControllerId()).discard( game.getPlayer(spell.getControllerId()).discard(
1, false, source, game); 1, false, source, game);
if (!cost.pay(source, game, spell.getControllerId(), if (!cost.pay(source, game, spell.getControllerId(),
spell.getControllerId(), false)) { spell.getControllerId(), false, null)) {
return game.getStack().counter(source.getFirstTarget(), return game.getStack().counter(source.getFirstTarget(),
source.getSourceId(), game); source.getSourceId(), game);
} }

View file

@ -133,7 +133,7 @@ class ScreechingBatTransformSourceEffect extends OneShotEffect {
Permanent permanent = game.getPermanent(source.getSourceId()); Permanent permanent = game.getPermanent(source.getSourceId());
if (permanent != null) { if (permanent != null) {
Cost cost = new ManaCostsImpl("{2}{B}{B}"); Cost cost = new ManaCostsImpl("{2}{B}{B}");
if (cost.pay(source, game, permanent.getControllerId(), permanent.getControllerId(), false)) { if (cost.pay(source, game, permanent.getControllerId(), permanent.getControllerId(), false, null)) {
if (permanent.canTransform()) { if (permanent.canTransform()) {
permanent.setTransformed(!permanent.isTransformed()); permanent.setTransformed(!permanent.isTransformed());
} }

View file

@ -131,7 +131,7 @@ class AthreosGodOfPassageReturnEffect extends OneShotEffect {
Cost cost = new PayLifeCost(3); Cost cost = new PayLifeCost(3);
if (cost.canPay(source, source.getSourceId(), opponent.getId(), game) if (cost.canPay(source, source.getSourceId(), opponent.getId(), game)
&& opponent.chooseUse(outcome, new StringBuilder("Pay 3 live to prevent that ").append(creature.getLogName()).append(" returns to ").append(controller.getLogName()).append("'s hand?").toString(), source, game)) { && opponent.chooseUse(outcome, new StringBuilder("Pay 3 live to prevent that ").append(creature.getLogName()).append(" returns to ").append(controller.getLogName()).append("'s hand?").toString(), source, game)) {
if (cost.pay(source, game, source.getSourceId(), opponent.getId(), false)) { if (cost.pay(source, game, source.getSourceId(), opponent.getId(), false, null)) {
paid = true; paid = true;
} }
} }

View file

@ -105,7 +105,7 @@ class DiscipleOfDeceitEffect extends OneShotEffect {
String message = "Discard a nonland card to search your library?"; String message = "Discard a nonland card to search your library?";
if (cost.canPay(source, source.getSourceId(), source.getControllerId(), game) if (cost.canPay(source, source.getSourceId(), source.getControllerId(), game)
&& player.chooseUse(Outcome.Detriment, message, source, game)) { && player.chooseUse(Outcome.Detriment, message, source, game)) {
if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false)) { if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false, null)) {
Card card = game.getCard(cost.getTargets().getFirstTarget()); Card card = game.getCard(cost.getTargets().getFirstTarget());
if (card == null) { if (card == null) {
return false; return false;

View file

@ -101,7 +101,7 @@ class SageOfHoursCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
Permanent permanent = game.getPermanent(ability.getSourceId()); Permanent permanent = game.getPermanent(ability.getSourceId());
if (permanent != null) { if (permanent != null) {
this.removedCounters = permanent.getCounters().getCount(CounterType.P1P1); this.removedCounters = permanent.getCounters().getCount(CounterType.P1P1);

View file

@ -33,6 +33,7 @@ import mage.MageObject;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.LeavesBattlefieldTriggeredAbility; import mage.abilities.common.LeavesBattlefieldTriggeredAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.effects.common.ReturnFromExileForSourceEffect; import mage.abilities.effects.common.ReturnFromExileForSourceEffect;
import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect; import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect;
@ -103,7 +104,7 @@ class WormfangDrakeExileCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
Player controller = game.getPlayer(controllerId); Player controller = game.getPlayer(controllerId);
MageObject sourceObject = ability.getSourceObject(game); MageObject sourceObject = ability.getSourceObject(game);
if (controller != null && sourceObject != null) { if (controller != null && sourceObject != null) {

View file

@ -105,7 +105,7 @@ class ChainLightningEffect extends OneShotEffect {
if (affectedPlayer != null) { if (affectedPlayer != null) {
if (affectedPlayer.chooseUse(Outcome.Copy, "Pay {R}{R} to copy the spell?", source, game)) { if (affectedPlayer.chooseUse(Outcome.Copy, "Pay {R}{R} to copy the spell?", source, game)) {
Cost cost = new ManaCostsImpl("{R}{R}"); Cost cost = new ManaCostsImpl("{R}{R}");
if (cost.pay(source, game, source.getSourceId(), affectedPlayer.getId(), false)) { if (cost.pay(source, game, source.getSourceId(), affectedPlayer.getId(), false, null)) {
Spell spell = game.getStack().getSpell(source.getSourceId()); Spell spell = game.getStack().getSpell(source.getSourceId());
if (spell != null) { if (spell != null) {
Spell copy = spell.copySpell(); Spell copy = spell.copySpell();

View file

@ -100,7 +100,7 @@ class CosmicHorrorEffect extends OneShotEffect {
} }
if (controller.chooseUse(Outcome.Benefit, sb.toString(), source, game)) { if (controller.chooseUse(Outcome.Benefit, sb.toString(), source, game)) {
cost.clearPaid(); cost.clearPaid();
if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false)) { if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false, null)) {
return true; return true;
} }
} }

View file

@ -91,7 +91,7 @@ class DestroySourceUnlessPaysEffect extends OneShotEffect {
if (player != null && permanent != null) { if (player != null && permanent != null) {
if (player.chooseUse(Outcome.Benefit, "Pay " + cost.getText() + "?", source, game)) { if (player.chooseUse(Outcome.Benefit, "Pay " + cost.getText() + "?", source, game)) {
cost.clearPaid(); cost.clearPaid();
if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false)) { if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false, null)) {
return true; return true;
} }
} }

View file

@ -111,7 +111,7 @@ class DemonicHordesEffect extends OneShotEffect {
} }
if (controller.chooseUse(Outcome.Benefit, sb.toString(), source, game)) { if (controller.chooseUse(Outcome.Benefit, sb.toString(), source, game)) {
cost.clearPaid(); cost.clearPaid();
if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false)) { if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false, null)) {
return true; return true;
} }
} }

View file

@ -120,7 +120,7 @@ class BrokenAmbitionsEffect extends OneShotEffect {
message = costToPay.getText() + " to prevent counter effect?"; message = costToPay.getText() + " to prevent counter effect?";
} }
costToPay.clearPaid(); costToPay.clearPaid();
if (!(controller.chooseUse(Outcome.Benefit, message, source, game) && costToPay.pay(source, game, spell.getSourceId(), spell.getControllerId(), false))) { if (!(controller.chooseUse(Outcome.Benefit, message, source, game) && costToPay.pay(source, game, spell.getSourceId(), spell.getControllerId(), false, null))) {
game.getStack().counter(spell.getId(), source.getSourceId(), game); game.getStack().counter(spell.getId(), source.getSourceId(), game);
} }
if (ClashEffect.getInstance().apply(game, source)) { if (ClashEffect.getInstance().apply(game, source)) {

View file

@ -131,7 +131,7 @@ class RingsOfBrighthearthEffect extends OneShotEffect {
ManaCostsImpl cost = new ManaCostsImpl("{2}"); ManaCostsImpl cost = new ManaCostsImpl("{2}");
if (player != null) { if (player != null) {
if (player.chooseUse(Outcome.Benefit, "Pay " + cost.getText() + "? If you do, copy that ability. You may choose new targets for the copy.", source, game)) { if (player.chooseUse(Outcome.Benefit, "Pay " + cost.getText() + "? If you do, copy that ability. You may choose new targets for the copy.", source, game)) {
if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false)) { if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false, null)) {
Ability ability = (Ability) getValue("stackAbility"); Ability ability = (Ability) getValue("stackAbility");
Player controller = game.getPlayer(source.getControllerId()); Player controller = game.getPlayer(source.getControllerId());
Permanent sourcePermanent = game.getPermanent(source.getSourceId()); Permanent sourcePermanent = game.getPermanent(source.getSourceId());

View file

@ -31,6 +31,7 @@ import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
@ -96,7 +97,7 @@ class SilvergillAdeptCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
Player player = game.getPlayer(controllerId); Player player = game.getPlayer(controllerId);
if (player == null) { if (player == null) {

View file

@ -36,6 +36,7 @@ import mage.constants.Zone;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.ActivatedAbilityImpl; import mage.abilities.ActivatedAbilityImpl;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.costs.mana.ColoredManaCost; import mage.abilities.costs.mana.ColoredManaCost;
import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.DamageTargetEffect;
@ -137,7 +138,7 @@ class AncientHellkiteCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
this.paid = true; this.paid = true;
return paid; return paid;
} }

View file

@ -102,14 +102,14 @@ class IndulgentTormentorEffect extends OneShotEffect {
Cost cost = new SacrificeTargetCost(new TargetControlledCreaturePermanent()); Cost cost = new SacrificeTargetCost(new TargetControlledCreaturePermanent());
if (cost.canPay(source, source.getSourceId(), opponent.getId(), game) if (cost.canPay(source, source.getSourceId(), opponent.getId(), game)
&& opponent.chooseUse(outcome, "Sacrifice a creature to prevent the card draw?", source, game)) { && opponent.chooseUse(outcome, "Sacrifice a creature to prevent the card draw?", source, game)) {
if (cost.pay(source, game, source.getSourceId(), opponent.getId(), false)) { if (cost.pay(source, game, source.getSourceId(), opponent.getId(), false, null)) {
return true; return true;
} }
} }
cost = new PayLifeCost(3); cost = new PayLifeCost(3);
if (cost.canPay(source, source.getSourceId(), opponent.getId(), game) if (cost.canPay(source, source.getSourceId(), opponent.getId(), game)
&& opponent.chooseUse(outcome, "Pay 3 life to prevent the card draw?", source, game)) { && opponent.chooseUse(outcome, "Pay 3 life to prevent the card draw?", source, game)) {
if (cost.pay(source, game, source.getSourceId(), opponent.getId(), false)) { if (cost.pay(source, game, source.getSourceId(), opponent.getId(), false, null)) {
return true; return true;
} }
} }

View file

@ -30,6 +30,7 @@ package mage.sets.magic2015;
import java.util.UUID; import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
@ -92,7 +93,7 @@ class NecromancersStockpileDiscardTargetCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
if (targets.choose(Outcome.Discard, controllerId, sourceId, game)) { if (targets.choose(Outcome.Discard, controllerId, sourceId, game)) {
Player player = game.getPlayer(controllerId); Player player = game.getPlayer(controllerId);
for (UUID targetId : targets.get(0).getTargets()) { for (UUID targetId : targets.get(0).getTargets()) {

View file

@ -29,11 +29,11 @@ package mage.sets.magic2015;
import java.util.UUID; import java.util.UUID;
import mage.ConditionalMana; import mage.ConditionalMana;
import mage.MageInt;
import mage.MageObject; import mage.MageObject;
import mage.Mana; import mage.Mana;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.Cost;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.decorator.ConditionalActivatedAbility; import mage.abilities.decorator.ConditionalActivatedAbility;
@ -124,7 +124,7 @@ class SliverHiveConditionalMana extends ConditionalMana {
class SliverHiveManaCondition extends CreatureCastManaCondition { class SliverHiveManaCondition extends CreatureCastManaCondition {
@Override @Override
public boolean apply(Game game, Ability source, UUID manaProducer) { public boolean apply(Game game, Ability source, UUID manaProducer, Cost costToPay) {
if (super.apply(game, source)) { if (super.apply(game, source)) {
MageObject object = game.getObject(source.getSourceId()); MageObject object = game.getObject(source.getSourceId());
if (object.hasSubtype("Sliver")) { if (object.hasSubtype("Sliver")) {

View file

@ -117,7 +117,7 @@ class ForgottenLoreEffect extends OneShotEffect {
if(!done) { if(!done) {
if(cost.canPay(source, source.getSourceId(), you.getId(), game) && you.chooseUse(Outcome.Benefit, "Pay {G} to choose a different card ?", source, game)) { if(cost.canPay(source, source.getSourceId(), you.getId(), game) && you.chooseUse(Outcome.Benefit, "Pay {G} to choose a different card ?", source, game)) {
cost.clearPaid(); cost.clearPaid();
if(!cost.pay(source, game, source.getSourceId(), you.getId(), false)) { if(!cost.pay(source, game, source.getSourceId(), you.getId(), false, null)) {
done = true; done = true;
} }
} }

View file

@ -113,7 +113,7 @@ class CounterSourceEffect extends OneShotEffect {
Player controller = game.getPlayer(source.getControllerId()); Player controller = game.getPlayer(source.getControllerId());
if(controller.chooseUse(Outcome.Detriment, "Sacrifice a land to not counter " + spell.getName() + "?", source, game)){ if(controller.chooseUse(Outcome.Detriment, "Sacrifice a land to not counter " + spell.getName() + "?", source, game)){
SacrificeTargetCost cost = new SacrificeTargetCost(new TargetControlledPermanent(new FilterControlledLandPermanent())); SacrificeTargetCost cost = new SacrificeTargetCost(new TargetControlledPermanent(new FilterControlledLandPermanent()));
if(cost.pay(source, game, source.getSourceId(), source.getControllerId(), false)){ if(cost.pay(source, game, source.getSourceId(), source.getControllerId(), false, null)){
game.informPlayers(controller.getLogName() + " sacrifices a land to not counter " + spell.getName() + "."); game.informPlayers(controller.getLogName() + " sacrifices a land to not counter " + spell.getName() + ".");
return true; return true;
} }

View file

@ -31,6 +31,7 @@ import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.costs.common.PayLifeCost; import mage.abilities.costs.common.PayLifeCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
@ -124,7 +125,7 @@ class WanderingMageCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
Permanent permanent = game.getPermanent(ability.getTargets().get(1).getFirstTarget()); Permanent permanent = game.getPermanent(ability.getTargets().get(1).getFirstTarget());
if (permanent != null) { if (permanent != null) {
permanent.addCounters(CounterType.M1M1.createInstance(), game); permanent.addCounters(CounterType.M1M1.createInstance(), game);

View file

@ -92,7 +92,7 @@ class HasranOgressEffect extends OneShotEffect {
Cost cost = new ManaCostsImpl("{2}"); Cost cost = new ManaCostsImpl("{2}");
String message = "Would you like to pay {2} to prevent taking 3 damage from Hasran Ogress?"; String message = "Would you like to pay {2} to prevent taking 3 damage from Hasran Ogress?";
if (!(controller.chooseUse(Outcome.Benefit, message, source, game) if (!(controller.chooseUse(Outcome.Benefit, message, source, game)
&& cost.pay(source, game, source.getSourceId(), controller.getId(), false))) { && cost.pay(source, game, source.getSourceId(), controller.getId(), false, null))) {
controller.damage(3, source.getSourceId(), game, false, true); controller.damage(3, source.getSourceId(), game, false, true);
} }
return true; return true;

View file

@ -34,6 +34,7 @@ import mage.MageObject;
import mage.Mana; import mage.Mana;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.condition.Condition; import mage.abilities.condition.Condition;
import mage.abilities.costs.Cost;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.mana.ConditionalColorlessManaAbility; import mage.abilities.mana.ConditionalColorlessManaAbility;
import mage.abilities.mana.builder.ConditionalManaBuilder; import mage.abilities.mana.builder.ConditionalManaBuilder;
@ -109,7 +110,7 @@ class ArtifactAbilityManaCondition extends ManaCondition implements Condition {
} }
@Override @Override
public boolean apply(Game game, Ability source, UUID originalId) { public boolean apply(Game game, Ability source, UUID originalId, Cost costsToPay) {
return apply(game, source); return apply(game, source);
} }
} }

View file

@ -94,7 +94,7 @@ class HornOfPlentyEffect extends OneShotEffect {
if (caster != null) { if (caster != null) {
if (caster.chooseUse(Outcome.DrawCard, "Pay {1} to draw a card at the beginning of the next end step?", source, game)) { if (caster.chooseUse(Outcome.DrawCard, "Pay {1} to draw a card at the beginning of the next end step?", source, game)) {
Cost cost = new ManaCostsImpl("{1}"); Cost cost = new ManaCostsImpl("{1}");
if (cost.pay(source, game, source.getSourceId(), caster.getId(), false)) { if (cost.pay(source, game, source.getSourceId(), caster.getId(), false, null)) {
Effect effect = new DrawCardTargetEffect(1); Effect effect = new DrawCardTargetEffect(1);
effect.setTargetPointer(new FixedTarget(caster.getId())); effect.setTargetPointer(new FixedTarget(caster.getId()));
return new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect, TargetController.ANY)).apply(game, source); return new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect, TargetController.ANY)).apply(game, source);

View file

@ -31,6 +31,7 @@ import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.condition.Condition; import mage.abilities.condition.Condition;
import mage.abilities.costs.AlternativeCostSourceAbility; import mage.abilities.costs.AlternativeCostSourceAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect; import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -105,7 +106,7 @@ class LandGrantReavealCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
Player player = game.getPlayer(controllerId); Player player = game.getPlayer(controllerId);
if (player != null) { if (player != null) {
player.revealCards("Land Grant", player.getHand(), game); player.revealCards("Land Grant", player.getHand(), game);

View file

@ -105,7 +105,7 @@ class FlashEffect extends OneShotEffect {
StringBuilder sb = new StringBuilder("Pay ").append(reducedCost.getText()).append("?"); StringBuilder sb = new StringBuilder("Pay ").append(reducedCost.getText()).append("?");
if (player.chooseUse(Outcome.Benefit, sb.toString(), source, game)) { if (player.chooseUse(Outcome.Benefit, sb.toString(), source, game)) {
reducedCost.clearPaid(); reducedCost.clearPaid();
if (reducedCost.pay(source, game, source.getSourceId(), source.getControllerId(), false)) { if (reducedCost.pay(source, game, source.getSourceId(), source.getControllerId(), false, null)) {
return true; return true;
} }
} }

View file

@ -31,6 +31,7 @@ import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect; import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect;
import mage.abilities.keyword.TrampleAbility; import mage.abilities.keyword.TrampleAbility;
@ -94,7 +95,7 @@ class PhyrexianDreadnoughtSacrificeCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
int sumPower = 0; int sumPower = 0;
if (targets.choose(Outcome.Sacrifice, controllerId, sourceId, game)) { if (targets.choose(Outcome.Sacrifice, controllerId, sourceId, game)) {
for (UUID targetId: targets.get(0).getTargets()) { for (UUID targetId: targets.get(0).getTargets()) {

View file

@ -98,7 +98,7 @@ class VaporousDjinnEffect extends OneShotEffect {
Cost cost = new ManaCostsImpl("{U}{U}"); Cost cost = new ManaCostsImpl("{U}{U}");
String message = "Would you like to pay {U}{U} to prevent {this} from phasing out?"; String message = "Would you like to pay {U}{U} to prevent {this} from phasing out?";
if (!(controller.chooseUse(Outcome.Benefit, message, source, game) if (!(controller.chooseUse(Outcome.Benefit, message, source, game)
&& cost.pay(source, game, source.getSourceId(), controller.getId(), false))) { && cost.pay(source, game, source.getSourceId(), controller.getId(), false, null))) {
permanent.phaseOut(game); permanent.phaseOut(game);
} }
return true; return true;

View file

@ -107,7 +107,7 @@ class CrystalShardEffect extends OneShotEffect {
cost.clearPaid(); cost.clearPaid();
final StringBuilder sb = new StringBuilder("Pay {1}? (Otherwise ").append(targetCreature.getName()).append(" will be returned to its owner's hand)"); final StringBuilder sb = new StringBuilder("Pay {1}? (Otherwise ").append(targetCreature.getName()).append(" will be returned to its owner's hand)");
if (player.chooseUse(Outcome.Benefit, sb.toString(), source, game)) { if (player.chooseUse(Outcome.Benefit, sb.toString(), source, game)) {
cost.pay(source, game, targetCreature.getControllerId(), targetCreature.getControllerId(), false); cost.pay(source, game, targetCreature.getControllerId(), targetCreature.getControllerId(), false, null);
} }
if (!cost.isPaid()) { if (!cost.isPaid()) {
controller.moveCards(targetCreature, Zone.BATTLEFIELD, Zone.HAND, source, game); controller.moveCards(targetCreature, Zone.BATTLEFIELD, Zone.HAND, source, game);

View file

@ -97,7 +97,7 @@ class TajNarSwordsmithEffect extends OneShotEffect {
if (player != null && player.chooseUse(Outcome.BoostCreature, "Do you want to to pay {X}?", source, game)) { if (player != null && player.chooseUse(Outcome.BoostCreature, "Do you want to to pay {X}?", source, game)) {
int costX = player.announceXMana(0, Integer.MAX_VALUE, "Announce the value for {X}", game, source); int costX = player.announceXMana(0, Integer.MAX_VALUE, "Announce the value for {X}", game, source);
Cost cost = new GenericManaCost(costX); Cost cost = new GenericManaCost(costX);
if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false)) { if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false, null)) {
FilterCard filter = new FilterCard("Equipment card with converted mana cost " + costX + " or less"); FilterCard filter = new FilterCard("Equipment card with converted mana cost " + costX + " or less");
filter.add(new SubtypePredicate("Equipment")); filter.add(new SubtypePredicate("Equipment"));
filter.add(new ConvertedManaCostPredicate(ComparisonType.LessThan, costX + 1)); filter.add(new ConvertedManaCostPredicate(ComparisonType.LessThan, costX + 1));

View file

@ -35,6 +35,7 @@ import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.ActivatedAbility; import mage.abilities.ActivatedAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.costs.common.RemoveCounterCost; import mage.abilities.costs.common.RemoveCounterCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
@ -141,7 +142,7 @@ class RemoveCounterFromCardCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
paid = false; paid = false;
Player controller = game.getPlayer(controllerId); Player controller = game.getPlayer(controllerId);
if (target.choose(Outcome.UnboostCreature, controllerId, sourceId, game)) { if (target.choose(Outcome.UnboostCreature, controllerId, sourceId, game)) {

View file

@ -99,7 +99,7 @@ class RootwaterThiefEffect extends OneShotEffect {
} }
String message = "Pay {2} to exile a card from damaged player's library?"; String message = "Pay {2} to exile a card from damaged player's library?";
Cost cost = new ManaCostsImpl("{2}"); Cost cost = new ManaCostsImpl("{2}");
if(controller.chooseUse(Outcome.Benefit, message, source, game) && cost.pay(source, game, source.getSourceId(), controller.getId(), false)) if(controller.chooseUse(Outcome.Benefit, message, source, game) && cost.pay(source, game, source.getSourceId(), controller.getId(), false, null))
{ {
TargetCardInLibrary target = new TargetCardInLibrary(); TargetCardInLibrary target = new TargetCardInLibrary();
if (controller.searchLibrary(target, game, damagedPlayer.getId())) { if (controller.searchLibrary(target, game, damagedPlayer.getId())) {

View file

@ -35,6 +35,7 @@ import mage.constants.Rarity;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect;
@ -102,7 +103,7 @@ class GreenhiltTraineeCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
this.paid = true; this.paid = true;
return paid; return paid;
} }

View file

@ -40,6 +40,8 @@ import mage.cards.CardImpl;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Rarity; import mage.constants.Rarity;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.AnotherPredicate;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -48,6 +50,12 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public class GravityNegator extends CardImpl { public class GravityNegator extends CardImpl {
private final static FilterCreaturePermanent filter = new FilterCreaturePermanent("another target creature");
static {
filter.add(new AnotherPredicate());
}
public GravityNegator(UUID ownerId) { public GravityNegator(UUID ownerId) {
super(ownerId, 45, "Gravity Negator", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{U}"); super(ownerId, 45, "Gravity Negator", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{U}");
this.expansionSetCode = "OGW"; this.expansionSetCode = "OGW";
@ -65,7 +73,7 @@ public class GravityNegator extends CardImpl {
// Whenenever Gravity Negator attacks, you may pay {C}. If you do, another target creature gains flying until end of turn. // Whenenever Gravity Negator attacks, you may pay {C}. If you do, another target creature gains flying until end of turn.
Ability ability = new AttacksTriggeredAbility(new DoIfCostPaid(new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{C}")), false, Ability ability = new AttacksTriggeredAbility(new DoIfCostPaid(new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{C}")), false,
"Whenever {this} attacks you may pay {C}. If you do, another target creature gains flying until end of turn."); "Whenever {this} attacks you may pay {C}. If you do, another target creature gains flying until end of turn.");
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent(filter));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -34,6 +34,7 @@ import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.common.CardsInHandCondition; import mage.abilities.condition.common.CardsInHandCondition;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.decorator.ConditionalTriggeredAbility; import mage.abilities.decorator.ConditionalTriggeredAbility;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
@ -133,7 +134,7 @@ class KozilekDiscardCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
Spell targetSpell = game.getStack().getSpell(ability.getFirstTarget()); Spell targetSpell = game.getStack().getSpell(ability.getFirstTarget());
if (targetSpell == null) { if (targetSpell == null) {
return false; return false;

View file

@ -175,7 +175,7 @@ class DecayingSoilEffect extends OneShotEffect {
if (player != null) { if (player != null) {
if (player.chooseUse(Outcome.Benefit, " - Pay " + cost.getText() + "?", source, game)) { if (player.chooseUse(Outcome.Benefit, " - Pay " + cost.getText() + "?", source, game)) {
cost.clearPaid(); cost.clearPaid();
if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false)) { if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false, null)) {
UUID target = this.getTargetPointer().getFirst(game, source); UUID target = this.getTargetPointer().getFirst(game, source);
if (target != null) { if (target != null) {
Card card = game.getCard(target); Card card = game.getCard(target);

View file

@ -139,7 +139,7 @@ class DelayingShieldUpkeepEffect extends OneShotEffect {
for (int i = numCounters; i > 0; i--) { for (int i = numCounters; i > 0; i--) {
if (controller.chooseUse(Outcome.Benefit, "Pay {1}{W}? (" + i + " counters left to pay)", source, game)) { if (controller.chooseUse(Outcome.Benefit, "Pay {1}{W}? (" + i + " counters left to pay)", source, game)) {
Cost cost = new ManaCostsImpl<>("{1}{W}"); Cost cost = new ManaCostsImpl<>("{1}{W}");
if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false)) { if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false, null)) {
continue; continue;
} }
} }

View file

@ -92,7 +92,7 @@ class DivertEffect extends OneShotEffect {
if (player != null) { if (player != null) {
cost.clearPaid(); cost.clearPaid();
if (!cost.pay(source, game, spell.getControllerId(), if (!cost.pay(source, game, spell.getControllerId(),
spell.getControllerId(), false)) { spell.getControllerId(), false, null)) {
return spell.chooseNewTargets(game, source.getControllerId(), true, true, null); return spell.chooseNewTargets(game, source.getControllerId(), true, true, null);
} }
} }

View file

@ -95,7 +95,7 @@ class UnifyingTheoryEffect extends OneShotEffect {
if (caster != null) { if (caster != null) {
if (caster.chooseUse(Outcome.DrawCard, "Pay {2} to draw a card?", source, game)) { if (caster.chooseUse(Outcome.DrawCard, "Pay {2} to draw a card?", source, game)) {
Cost cost = new ManaCostsImpl("{2}"); Cost cost = new ManaCostsImpl("{2}");
if (cost.pay(source, game, source.getSourceId(), caster.getId(), false)) { if (cost.pay(source, game, source.getSourceId(), caster.getId(), false, null)) {
caster.drawCards(1, game); caster.drawCards(1, game);
} }
} }

View file

@ -101,7 +101,7 @@ class BrainGorgersCounterSourceEffect extends OneShotEffect {
Player player = game.getPlayer(playerId); Player player = game.getPlayer(playerId);
if (cost.canPay(source, source.getSourceId(), player.getId(), game) if (cost.canPay(source, source.getSourceId(), player.getId(), game)
&& player.chooseUse(outcome, "Sacrifice a creature to counter " + sourceObject.getIdName() + "?", source, game)) { && player.chooseUse(outcome, "Sacrifice a creature to counter " + sourceObject.getIdName() + "?", source, game)) {
if (cost.pay(source, game, source.getSourceId(), player.getId(), false)) { if (cost.pay(source, game, source.getSourceId(), player.getId(), false, null)) {
game.informPlayers(player.getLogName() + " sacrifices a creature to counter " + sourceObject.getIdName() + "."); game.informPlayers(player.getLogName() + " sacrifices a creature to counter " + sourceObject.getIdName() + ".");
Spell spell = game.getStack().getSpell(source.getSourceId()); Spell spell = game.getStack().getSpell(source.getSourceId());
if (spell != null) { if (spell != null) {

View file

@ -97,7 +97,7 @@ class DashHopesCounterSourceEffect extends OneShotEffect {
cost.clearPaid(); cost.clearPaid();
if (cost.canPay(source, source.getSourceId(), player.getId(), game) if (cost.canPay(source, source.getSourceId(), player.getId(), game)
&& player.chooseUse(outcome, "Pay 5 life to counter " + sourceObject.getIdName() + "?", source, game)) { && player.chooseUse(outcome, "Pay 5 life to counter " + sourceObject.getIdName() + "?", source, game)) {
if (cost.pay(source, game, source.getSourceId(), player.getId(), false)) { if (cost.pay(source, game, source.getSourceId(), player.getId(), false, null)) {
game.informPlayers(player.getLogName() + " pays 5 life to counter " + sourceObject.getIdName() + "."); game.informPlayers(player.getLogName() + " pays 5 life to counter " + sourceObject.getIdName() + ".");
Spell spell = game.getStack().getSpell(source.getSourceId()); Spell spell = game.getStack().getSpell(source.getSourceId());
if (spell != null) { if (spell != null) {

View file

@ -103,7 +103,7 @@ class CounterSourceEffect extends OneShotEffect {
cost.clearPaid(); cost.clearPaid();
if (cost.canPay(source, source.getSourceId(), player.getId(), game) if (cost.canPay(source, source.getSourceId(), player.getId(), game)
&& player.chooseUse(outcome, "Discard three cards to counter " + sourceObject.getIdName() + "?", source, game)) { && player.chooseUse(outcome, "Discard three cards to counter " + sourceObject.getIdName() + "?", source, game)) {
if (cost.pay(source, game, source.getSourceId(), playerId, false)) { if (cost.pay(source, game, source.getSourceId(), playerId, false, null)) {
game.informPlayers(player.getLogName() + " discards 3 cards to counter " + sourceObject.getIdName() + "."); game.informPlayers(player.getLogName() + " discards 3 cards to counter " + sourceObject.getIdName() + ".");
Spell spell = game.getStack().getSpell(source.getSourceId()); Spell spell = game.getStack().getSpell(source.getSourceId());
if (spell != null) { if (spell != null) {

View file

@ -101,7 +101,7 @@ class ShivanWumpusEffect extends PutOnLibrarySourceEffect {
if (player != null if (player != null
&& cost.canPay(source, source.getSourceId(), playerId, game) && cost.canPay(source, source.getSourceId(), playerId, game)
&& player.chooseUse(Outcome.Sacrifice, "Sacrifice a land?", source, game) && player.chooseUse(Outcome.Sacrifice, "Sacrifice a land?", source, game)
&& cost.pay(source, game, source.getSourceId(), playerId, true)) { && cost.pay(source, game, source.getSourceId(), playerId, true, null)) {
costPaid = true; costPaid = true;
} }
} }

View file

@ -118,7 +118,7 @@ class ShroudedLoreEffect extends OneShotEffect {
if(!done) { if(!done) {
if(cost.canPay(source, source.getSourceId(), you.getId(), game) && you.chooseUse(Outcome.Benefit, "Pay {B} to choose a different card ?", source, game)) { if(cost.canPay(source, source.getSourceId(), you.getId(), game) && you.chooseUse(Outcome.Benefit, "Pay {B} to choose a different card ?", source, game)) {
cost.clearPaid(); cost.clearPaid();
if(!cost.pay(source, game, source.getSourceId(), you.getId(), false)) { if(!cost.pay(source, game, source.getSourceId(), you.getId(), false, null)) {
done = true; done = true;
} }
} }

View file

@ -34,6 +34,7 @@ import mage.constants.Rarity;
import mage.MageInt; import mage.MageInt;
import mage.Mana; import mage.Mana;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.effects.common.BasicManaEffect; import mage.abilities.effects.common.BasicManaEffect;
import mage.abilities.mana.SimpleManaAbility; import mage.abilities.mana.SimpleManaAbility;
@ -84,7 +85,7 @@ class ExileSourceFromHandCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
Card card = game.getCard(sourceId); Card card = game.getCard(sourceId);
Player player = game.getPlayer(controllerId); Player player = game.getPlayer(controllerId);
if (player != null && player.getHand().contains(sourceId) && card != null) { if (player != null && player.getHand().contains(sourceId) && card != null) {

View file

@ -96,7 +96,7 @@ class ThirstforKnowledgeEffect extends OneShotEffect {
&& you.chooseUse(Outcome.Discard, "Do you want to discard an artifact? If you don't, you must discard 2 cards", source, game)) { && you.chooseUse(Outcome.Discard, "Do you want to discard an artifact? If you don't, you must discard 2 cards", source, game)) {
Cost cost = new DiscardTargetCost(new TargetCardInHand(filter)); Cost cost = new DiscardTargetCost(new TargetCardInHand(filter));
if (cost.canPay(source, source.getSourceId(), you.getId(), game)) { if (cost.canPay(source, source.getSourceId(), you.getId(), game)) {
if (cost.pay(source, game, source.getSourceId(), you.getId(), false)) { if (cost.pay(source, game, source.getSourceId(), you.getId(), false, null)) {
return true; return true;
} }
} }

View file

@ -127,7 +127,7 @@ class PhyrexianTyrannyEffect extends OneShotEffect {
Player player = game.getPlayer(targetPointer.getFirst(game, source)); Player player = game.getPlayer(targetPointer.getFirst(game, source));
if (player != null) { if (player != null) {
Cost cost = new GenericManaCost(2); Cost cost = new GenericManaCost(2);
if (!cost.pay(source, game, player.getId(), player.getId(), false)) { if (!cost.pay(source, game, player.getId(), player.getId(), false, null)) {
player.damage(2, source.getSourceId(), game, false, true); player.damage(2, source.getSourceId(), game, false, true);
} }
return true; return true;

View file

@ -92,7 +92,7 @@ class RhysticStudyDrawEffect extends OneShotEffect {
if (controller != null && opponent != null && sourceObject != null) { if (controller != null && opponent != null && sourceObject != null) {
Cost cost = new GenericManaCost(1); Cost cost = new GenericManaCost(1);
String message = "Would you like to pay {1} to prevent the opponent to draw a card?"; String message = "Would you like to pay {1} to prevent the opponent to draw a card?";
if (!(opponent.chooseUse(Outcome.Benefit, message, source, game) && cost.pay(source, game, source.getSourceId(), opponent.getId(), false))) { if (!(opponent.chooseUse(Outcome.Benefit, message, source, game) && cost.pay(source, game, source.getSourceId(), opponent.getId(), false, null))) {
if(controller.chooseUse(Outcome.DrawCard, "Draw a card (" + sourceObject.getLogName() +")", source, game)) { if(controller.chooseUse(Outcome.DrawCard, "Draw a card (" + sourceObject.getLogName() +")", source, game)) {
controller.drawCards(1, game); controller.drawCards(1, game);
} }

View file

@ -32,6 +32,7 @@ import mage.ObjectColor;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
@ -149,7 +150,7 @@ class UnattachSourceCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
Permanent attachment = game.getPermanent(sourceId); Permanent attachment = game.getPermanent(sourceId);
Permanent permanent = game.getPermanent(attachment.getAttachedTo()); Permanent permanent = game.getPermanent(attachment.getAttachedTo());
if (permanent != null) { if (permanent != null) {

View file

@ -111,7 +111,7 @@ class SoulTitheEffect extends OneShotEffect {
int cmc = permanent.getManaCost().convertedManaCost(); int cmc = permanent.getManaCost().convertedManaCost();
if (player.chooseUse(Outcome.Benefit, "Pay {" + cmc + "} for " + permanent.getName() + "? (otherwise you sacrifice it)", source, game)) { if (player.chooseUse(Outcome.Benefit, "Pay {" + cmc + "} for " + permanent.getName() + "? (otherwise you sacrifice it)", source, game)) {
Cost cost = new GenericManaCost(cmc); Cost cost = new GenericManaCost(cmc);
if (cost.pay(source, game, source.getSourceId(), player.getId(), false)) { if (cost.pay(source, game, source.getSourceId(), player.getId(), false, null)) {
return true; return true;
} }
} }

View file

@ -35,6 +35,7 @@ import mage.MageInt;
import mage.ObjectColor; import mage.ObjectColor;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
@ -93,7 +94,7 @@ class SacrificeAllLandCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
for(Permanent permanent : game.getBattlefield().getActivePermanents(new FilterControlledLandPermanent(), ability.getControllerId(), game)){ for(Permanent permanent : game.getBattlefield().getActivePermanents(new FilterControlledLandPermanent(), ability.getControllerId(), game)){
paid |= permanent.sacrifice(sourceId, game); paid |= permanent.sacrifice(sourceId, game);
} }

View file

@ -34,6 +34,7 @@ import mage.constants.Zone;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl; import mage.abilities.costs.CostImpl;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.DamageTargetEffect;
@ -100,7 +101,7 @@ class BloodshotTraineeCost extends CostImpl {
} }
@Override @Override
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
this.paid = true; this.paid = true;
return paid; return paid;
} }

View file

@ -88,7 +88,7 @@ class EmbersmithEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
Cost cost = new GenericManaCost(1); Cost cost = new GenericManaCost(1);
cost.clearPaid(); cost.clearPaid();
if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false)) { if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false, null)) {
Permanent permanent = game.getPermanent(source.getFirstTarget()); Permanent permanent = game.getPermanent(source.getFirstTarget());
if (permanent != null) { if (permanent != null) {
permanent.damage(1, source.getSourceId(), game, false, true); permanent.damage(1, source.getSourceId(), game, false, true);

Some files were not shown because too many files have changed in this diff Show more