diff --git a/Mage.Sets/src/mage/cards/a/Aleatory.java b/Mage.Sets/src/mage/cards/a/Aleatory.java index 625f6b4f586..eb33925b2bc 100644 --- a/Mage.Sets/src/mage/cards/a/Aleatory.java +++ b/Mage.Sets/src/mage/cards/a/Aleatory.java @@ -67,7 +67,7 @@ class AleatoryEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source)); if (controller != null && permanent != null) { - if (controller.flipCoin(game, true)) { + if (controller.flipCoin(source, game, true)) { game.addEffect(new BoostTargetEffect(1, 1, Duration.EndOfTurn), source); return true; } diff --git a/Mage.Sets/src/mage/cards/b/BottleOfSuleiman.java b/Mage.Sets/src/mage/cards/b/BottleOfSuleiman.java index 4e963915f39..9d82fd071f8 100644 --- a/Mage.Sets/src/mage/cards/b/BottleOfSuleiman.java +++ b/Mage.Sets/src/mage/cards/b/BottleOfSuleiman.java @@ -61,7 +61,7 @@ class BottleOfSuleimanEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player you = game.getPlayer(source.getControllerId()); if (you != null) { - if (you.flipCoin(game, true)) { + if (you.flipCoin(source, game, true)) { DjinnToken token = new DjinnToken(); token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); return true; diff --git a/Mage.Sets/src/mage/cards/c/ChaoticGoo.java b/Mage.Sets/src/mage/cards/c/ChaoticGoo.java index 8bb9e226763..d66c6778fea 100644 --- a/Mage.Sets/src/mage/cards/c/ChaoticGoo.java +++ b/Mage.Sets/src/mage/cards/c/ChaoticGoo.java @@ -67,7 +67,7 @@ class ChaoticGooEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); Permanent permanent = game.getPermanent(source.getSourceId()); if (controller != null && permanent != null) { - if (controller.flipCoin(game, true)) { + if (controller.flipCoin(source, game, true)) { game.informPlayers("Chaotic Goo: Won flip. Put a +1/+1 counter on Chaotic Goo."); new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)).apply(game, source); return true; diff --git a/Mage.Sets/src/mage/cards/c/ChaoticStrike.java b/Mage.Sets/src/mage/cards/c/ChaoticStrike.java index 8c66e6b08bd..2c97e2a4150 100644 --- a/Mage.Sets/src/mage/cards/c/ChaoticStrike.java +++ b/Mage.Sets/src/mage/cards/c/ChaoticStrike.java @@ -65,7 +65,7 @@ class ChaoticStrikeEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source)); if (controller != null && permanent != null) { - if (controller.flipCoin(game, true)) { + if (controller.flipCoin(source, game, true)) { game.addEffect(new BoostTargetEffect(1, 1, Duration.EndOfTurn), source); return true; } diff --git a/Mage.Sets/src/mage/cards/c/CrazedFirecat.java b/Mage.Sets/src/mage/cards/c/CrazedFirecat.java index 9b90ed3c74c..dac9cfa97ac 100644 --- a/Mage.Sets/src/mage/cards/c/CrazedFirecat.java +++ b/Mage.Sets/src/mage/cards/c/CrazedFirecat.java @@ -66,7 +66,7 @@ class CrazedFirecatEffect extends OneShotEffect { Permanent sourceObject = game.getPermanent(source.getSourceId()); if (controller != null && sourceObject != null) { int flipsWon = 0; - while (controller.flipCoin(game, true)) { + while (controller.flipCoin(source, game, true)) { flipsWon++; } sourceObject.addCounters(CounterType.P1P1.createInstance(flipsWon), source, game); diff --git a/Mage.Sets/src/mage/cards/c/CreepyDoll.java b/Mage.Sets/src/mage/cards/c/CreepyDoll.java index dc0ac6061c5..71c3056523a 100644 --- a/Mage.Sets/src/mage/cards/c/CreepyDoll.java +++ b/Mage.Sets/src/mage/cards/c/CreepyDoll.java @@ -100,7 +100,7 @@ class CreepyDollEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); if (player != null) { - if (player.flipCoin(game, true)) { + if (player.flipCoin(source, game, true)) { UUID targetId = getTargetPointer().getFirst(game, source); Permanent permanent = game.getPermanent(targetId); if (permanent != null) { diff --git a/Mage.Sets/src/mage/cards/c/CrookedScales.java b/Mage.Sets/src/mage/cards/c/CrookedScales.java index eed05c44998..0b19ce0bc44 100644 --- a/Mage.Sets/src/mage/cards/c/CrookedScales.java +++ b/Mage.Sets/src/mage/cards/c/CrookedScales.java @@ -72,7 +72,7 @@ class CrookedScalesEffect extends OneShotEffect { Cost cost; String message = "You lost the flip. Pay {3} to prevent your creature from being destroyed?"; do { - if (controller.flipCoin(game, true)) { + if (controller.flipCoin(source, game, true)) { if (theirGuy != null) { theirGuy.destroy(controller.getId(), game, false); } diff --git a/Mage.Sets/src/mage/cards/d/DesperateGambit.java b/Mage.Sets/src/mage/cards/d/DesperateGambit.java index 6bc9939e8be..80351f9dd66 100644 --- a/Mage.Sets/src/mage/cards/d/DesperateGambit.java +++ b/Mage.Sets/src/mage/cards/d/DesperateGambit.java @@ -68,7 +68,7 @@ class DesperateGambitEffect extends PreventionEffectImpl { this.target.choose(Outcome.Benefit, source.getControllerId(), source.getSourceId(), game); Player you = game.getPlayer(source.getControllerId()); if(you != null) { - wonFlip = you.flipCoin(game, true); + wonFlip = you.flipCoin(source, game, true); super.init(source, game); } } diff --git a/Mage.Sets/src/mage/cards/f/FickleEfreet.java b/Mage.Sets/src/mage/cards/f/FickleEfreet.java index 0c3e4e597ea..4e67afe38fa 100644 --- a/Mage.Sets/src/mage/cards/f/FickleEfreet.java +++ b/Mage.Sets/src/mage/cards/f/FickleEfreet.java @@ -71,7 +71,7 @@ class FickleEfreetChangeControlEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); Permanent sourcePermanent = game.getPermanent(source.getSourceId()); if (controller != null) { - if (!controller.flipCoin(game, true)) { + if (!controller.flipCoin(source, game, true)) { if (sourcePermanent != null) { Target target = new TargetOpponent(true); if (target.canChoose(source.getSourceId(), controller.getId(), game)) { diff --git a/Mage.Sets/src/mage/cards/f/FieryGambit.java b/Mage.Sets/src/mage/cards/f/FieryGambit.java index e046aab0d01..36177cf86d1 100644 --- a/Mage.Sets/src/mage/cards/f/FieryGambit.java +++ b/Mage.Sets/src/mage/cards/f/FieryGambit.java @@ -64,7 +64,7 @@ class FieryGambitEffect extends OneShotEffect { if (controller != null && sourceObject != null) { int flipsWon = 0; boolean controllerStopped = false; - while (controller.flipCoin(game, true)) { + while (controller.flipCoin(source, game, true)) { ++flipsWon; if (!controller.chooseUse(outcome, "You won " + flipsWon + (flipsWon == 1 ? " flip." : " flips.") + " Flip another coin?", source, game)) { diff --git a/Mage.Sets/src/mage/cards/f/FightingChance.java b/Mage.Sets/src/mage/cards/f/FightingChance.java index 3ecbe1daf1b..d67bef03c3d 100644 --- a/Mage.Sets/src/mage/cards/f/FightingChance.java +++ b/Mage.Sets/src/mage/cards/f/FightingChance.java @@ -61,7 +61,7 @@ class FightingChanceEffect extends OneShotEffect { Player player = game.getPlayer(source.getControllerId()); if (player != null) { for (UUID blocker : game.getCombat().getBlockers()) { - if (player.flipCoin(game, true)) { + if (player.flipCoin(source, game, true)) { PreventDamageByTargetEffect effect = new PreventDamageByTargetEffect(Duration.EndOfTurn, true); effect.setTargetPointer(new FixedTarget(blocker)); game.addEffect(effect, source); diff --git a/Mage.Sets/src/mage/cards/f/FlockOfRabidSheep.java b/Mage.Sets/src/mage/cards/f/FlockOfRabidSheep.java index a8c1a70fb19..018f5f3b239 100644 --- a/Mage.Sets/src/mage/cards/f/FlockOfRabidSheep.java +++ b/Mage.Sets/src/mage/cards/f/FlockOfRabidSheep.java @@ -59,7 +59,7 @@ class FlockOfRabidSheepEffect extends OneShotEffect { int repeat = source.getManaCostsToPay().getX(); int wonCount = 0; for (int i = 1; i <= repeat; i++) { - if (controller.flipCoin(game, true)) { + if (controller.flipCoin(source, game, true)) { wonCount++; } } diff --git a/Mage.Sets/src/mage/cards/f/FreneticEfreet.java b/Mage.Sets/src/mage/cards/f/FreneticEfreet.java index 181c9bdbbae..e5d37014a01 100644 --- a/Mage.Sets/src/mage/cards/f/FreneticEfreet.java +++ b/Mage.Sets/src/mage/cards/f/FreneticEfreet.java @@ -69,7 +69,7 @@ class FreneticEfreetEffect extends OneShotEffect { if (controller == null) { return false; } - boolean flip = controller.flipCoin(game, true); + boolean flip = controller.flipCoin(source, game, true); if (permanent == null) { return false; } diff --git a/Mage.Sets/src/mage/cards/f/FreneticSliver.java b/Mage.Sets/src/mage/cards/f/FreneticSliver.java index 44c167f64a2..e054ecb968f 100644 --- a/Mage.Sets/src/mage/cards/f/FreneticSliver.java +++ b/Mage.Sets/src/mage/cards/f/FreneticSliver.java @@ -76,7 +76,7 @@ class FreneticSliverEffect extends OneShotEffect { if (player == null || perm == null) { return false; } - if (player.flipCoin(game, true)) { + if (player.flipCoin(source, game, true)) { return new ExileReturnBattlefieldOwnerNextEndStepSourceEffect(true).apply(game, source); } else { return perm.sacrifice(source.getSourceId(), game); diff --git a/Mage.Sets/src/mage/cards/g/GameOfChaos.java b/Mage.Sets/src/mage/cards/g/GameOfChaos.java index e10ae16be9d..53010b05fa4 100644 --- a/Mage.Sets/src/mage/cards/g/GameOfChaos.java +++ b/Mage.Sets/src/mage/cards/g/GameOfChaos.java @@ -63,7 +63,7 @@ class GameOfChaosEffect extends OneShotEffect { if (you != null && targetOpponent != null) { boolean continueFlipping = true; - boolean youWonFlip = you.flipCoin(game, true); // controller flips first + boolean youWonFlip = you.flipCoin(source, game, true); // controller flips first boolean youWonLastFlip = false; // tracks if you won the flip last, negation of it means opponent won last int lifeAmount = 1; // starts stakes with 1 life @@ -88,7 +88,7 @@ class GameOfChaosEffect extends OneShotEffect { if (continueFlipping) { lifeAmount *= 2; // double the life each time - youWonFlip = youWonLastFlip ? you.flipCoin(game, true) : !targetOpponent.flipCoin(game, true); // negate the opponent's results for proper evaluation of if you won in next iteration + youWonFlip = youWonLastFlip ? you.flipCoin(source, game, true) : !targetOpponent.flipCoin(source, game, true); // negate the opponent's results for proper evaluation of if you won in next iteration } } diff --git a/Mage.Sets/src/mage/cards/g/GoblinArchaeologist.java b/Mage.Sets/src/mage/cards/g/GoblinArchaeologist.java index dd95e752971..5b04f0b8fe5 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinArchaeologist.java +++ b/Mage.Sets/src/mage/cards/g/GoblinArchaeologist.java @@ -75,7 +75,7 @@ class GoblinArchaeologistEffect extends OneShotEffect { Player player = game.getPlayer(source.getControllerId()); Permanent permanent = game.getPermanent(source.getSourceId()); if (player != null && permanent != null) { - if (!player.flipCoin(game, true)) { + if (!player.flipCoin(source, game, true)) { permanent.sacrifice(source.getSourceId(), game); }else{ Permanent targetArtifact = game.getPermanent(source.getFirstTarget()); diff --git a/Mage.Sets/src/mage/cards/g/GoblinArtisans.java b/Mage.Sets/src/mage/cards/g/GoblinArtisans.java index 0848dbfa978..876e1ee6dc8 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinArtisans.java +++ b/Mage.Sets/src/mage/cards/g/GoblinArtisans.java @@ -78,7 +78,7 @@ class GoblinArtisansEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { - if (controller.flipCoin(game, true)) { + if (controller.flipCoin(source, game, true)) { controller.drawCards(1, game); } else { List artifacts = game.getBattlefield().getActivePermanents(new FilterControlledArtifactPermanent(), source.getControllerId(), game); diff --git a/Mage.Sets/src/mage/cards/g/GoblinAssassin.java b/Mage.Sets/src/mage/cards/g/GoblinAssassin.java index 22940eab384..8a12eb73cbf 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinAssassin.java +++ b/Mage.Sets/src/mage/cards/g/GoblinAssassin.java @@ -99,7 +99,7 @@ class GoblinAssassinTriggeredEffect extends OneShotEffect { if (controller != null) { for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { Player player = game.getPlayer(playerId); - if (player != null && !player.flipCoin(game, true)) { + if (player != null && !player.flipCoin(source, game, true)) { TargetControlledCreaturePermanent target = new TargetControlledCreaturePermanent(); target.setNotTarget(true); if (target.canChoose(player.getId(), game)) { diff --git a/Mage.Sets/src/mage/cards/g/GoblinBangchuckers.java b/Mage.Sets/src/mage/cards/g/GoblinBangchuckers.java index c2d6c13bd17..ff27db96dae 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinBangchuckers.java +++ b/Mage.Sets/src/mage/cards/g/GoblinBangchuckers.java @@ -63,7 +63,7 @@ class GoblinBangchuckersEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { - if (controller.flipCoin(game, true)) { + if (controller.flipCoin(source, game, true)) { Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source)); if (permanent != null) { permanent.damage(2, source.getSourceId(), game, false, true); diff --git a/Mage.Sets/src/mage/cards/g/GoblinBomb.java b/Mage.Sets/src/mage/cards/g/GoblinBomb.java index 38414a096ed..a8ced2d7823 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinBomb.java +++ b/Mage.Sets/src/mage/cards/g/GoblinBomb.java @@ -72,7 +72,7 @@ class GoblinBombEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); Permanent permanent = game.getPermanent(source.getSourceId()); if (controller != null && permanent != null) { - if (controller.flipCoin(game, true)) { + if (controller.flipCoin(source, game, true)) { game.informPlayers("Goblin Bomb: Won flip. Put a fuse counter on Goblin Bomb."); new AddCountersSourceEffect(CounterType.FUSE.createInstance(1)).apply(game, source); return true; diff --git a/Mage.Sets/src/mage/cards/g/GoblinFestival.java b/Mage.Sets/src/mage/cards/g/GoblinFestival.java index 9caf3d1196e..e8e202928f3 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinFestival.java +++ b/Mage.Sets/src/mage/cards/g/GoblinFestival.java @@ -68,7 +68,7 @@ class GoblinFestivalChangeControlEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); Permanent sourcePermanent = game.getPermanent(source.getSourceId()); if (controller != null) { - if (!controller.flipCoin(game, true)) { + if (!controller.flipCoin(source, game, true)) { if (sourcePermanent != null) { Target target = new TargetOpponent(true); if (target.canChoose(source.getSourceId(), controller.getId(), game)) { diff --git a/Mage.Sets/src/mage/cards/g/GoblinKaboomist.java b/Mage.Sets/src/mage/cards/g/GoblinKaboomist.java index 5a03c1848ee..2df939fa0da 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinKaboomist.java +++ b/Mage.Sets/src/mage/cards/g/GoblinKaboomist.java @@ -70,7 +70,7 @@ class GoblinKaboomistFlipCoinEffect extends OneShotEffect { Player player = game.getPlayer(source.getControllerId()); Permanent permanent = game.getPermanent(source.getSourceId()); if (player != null && permanent != null) { - if (!player.flipCoin(game, true)) { + if (!player.flipCoin(source, game, true)) { String message = permanent.getLogName() + " deals 2 damage to itself"; game.informPlayers(message); permanent.damage(2, source.getSourceId(), game, false, true); diff --git a/Mage.Sets/src/mage/cards/g/GoblinKites.java b/Mage.Sets/src/mage/cards/g/GoblinKites.java index 57bf1f33ea8..cc2e03fef09 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinKites.java +++ b/Mage.Sets/src/mage/cards/g/GoblinKites.java @@ -69,7 +69,7 @@ class GoblinKitesEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); Permanent permanent = game.getPermanent(source.getSourceId()); if (controller != null && permanent != null) { - if (controller.flipCoin(game, true)) { + if (controller.flipCoin(source, game, true)) { return true; } else { new SacrificeSourceEffect().apply(game, source); diff --git a/Mage.Sets/src/mage/cards/g/GoblinLyre.java b/Mage.Sets/src/mage/cards/g/GoblinLyre.java index fb563ac981d..1626668511f 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinLyre.java +++ b/Mage.Sets/src/mage/cards/g/GoblinLyre.java @@ -65,7 +65,7 @@ class GoblinLyreEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); Player opponent = game.getPlayerOrPlaneswalkerController(getTargetPointer().getFirst(game, source)); if (controller != null) { - if (controller.flipCoin(game, true)) { + if (controller.flipCoin(source, game, true)) { int damage = new PermanentsOnBattlefieldCount(new FilterControlledCreaturePermanent()).calculate(game, source, this); if (opponent != null) { return game.damagePlayerOrPlaneswalker(source.getFirstTarget(), damage, source.getSourceId(), game, false, true) > 0; diff --git a/Mage.Sets/src/mage/cards/g/GoblinPsychopath.java b/Mage.Sets/src/mage/cards/g/GoblinPsychopath.java index 1ea03e68d76..e2499125198 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinPsychopath.java +++ b/Mage.Sets/src/mage/cards/g/GoblinPsychopath.java @@ -60,7 +60,7 @@ class GoblinPsychopathEffect extends ReplacementEffectImpl { @Override public void init(Ability source, Game game) { - this.wonFlip = game.getPlayer(source.getControllerId()).flipCoin(game, true); + this.wonFlip = game.getPlayer(source.getControllerId()).flipCoin(source, game, true); super.init(source, game); } diff --git a/Mage.Sets/src/mage/cards/i/ImpulsiveManeuvers.java b/Mage.Sets/src/mage/cards/i/ImpulsiveManeuvers.java index 90f4806306f..1e2ec98a84c 100644 --- a/Mage.Sets/src/mage/cards/i/ImpulsiveManeuvers.java +++ b/Mage.Sets/src/mage/cards/i/ImpulsiveManeuvers.java @@ -57,7 +57,7 @@ class ImpulsiveManeuversEffect extends PreventionEffectImpl { @Override public void init(Ability source, Game game) { - this.wonFlip = game.getPlayer(source.getControllerId()).flipCoin(game, true); + this.wonFlip = game.getPlayer(source.getControllerId()).flipCoin(source, game, true); super.init(source, game); } diff --git a/Mage.Sets/src/mage/cards/k/KarplusanMinotaur.java b/Mage.Sets/src/mage/cards/k/KarplusanMinotaur.java index bf1f89aacb9..36537c47bb1 100644 --- a/Mage.Sets/src/mage/cards/k/KarplusanMinotaur.java +++ b/Mage.Sets/src/mage/cards/k/KarplusanMinotaur.java @@ -155,7 +155,7 @@ class KarplusanMinotaurCost extends CostImpl { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) { Player controller = game.getPlayer(controllerId); if (controller != null) { - controller.flipCoin(game, true); + controller.flipCoin(source, game, true); this.paid = true; return true; } diff --git a/Mage.Sets/src/mage/cards/m/ManaClash.java b/Mage.Sets/src/mage/cards/m/ManaClash.java index a4d61b07bda..2b7a510f173 100644 --- a/Mage.Sets/src/mage/cards/m/ManaClash.java +++ b/Mage.Sets/src/mage/cards/m/ManaClash.java @@ -62,8 +62,8 @@ class ManaClashEffect extends OneShotEffect { if (!targetOpponent.canRespond() || !controller.canRespond()) { return false; } - boolean controllerFlip = controller.flipCoin(game, true); - boolean opponentFlip = targetOpponent.flipCoin(game, true); + boolean controllerFlip = controller.flipCoin(source, game, true); + boolean opponentFlip = targetOpponent.flipCoin(source, game, true); if (controllerFlip && opponentFlip) { bothHeads = true; } diff --git a/Mage.Sets/src/mage/cards/m/ManaCrypt.java b/Mage.Sets/src/mage/cards/m/ManaCrypt.java index 2ad6bfa478d..51c09adc938 100644 --- a/Mage.Sets/src/mage/cards/m/ManaCrypt.java +++ b/Mage.Sets/src/mage/cards/m/ManaCrypt.java @@ -58,7 +58,7 @@ class ManaCryptEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); if (player != null) { - if (!player.flipCoin(game, true)) { + if (!player.flipCoin(source, game, true)) { player.damage(3, source.getSourceId(), game, false, true); } return true; diff --git a/Mage.Sets/src/mage/cards/m/ManaScrew.java b/Mage.Sets/src/mage/cards/m/ManaScrew.java index 3f19c936463..24b3514c9ee 100644 --- a/Mage.Sets/src/mage/cards/m/ManaScrew.java +++ b/Mage.Sets/src/mage/cards/m/ManaScrew.java @@ -88,7 +88,7 @@ class ManaScrewEffect extends BasicManaEffect { @Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); - if (player != null && player.flipCoin(game, true)) { + if (player != null && player.flipCoin(source, game, true)) { player.getManaPool().addMana(getMana(game, source), game, source); } return true; diff --git a/Mage.Sets/src/mage/cards/m/MijaeDjinn.java b/Mage.Sets/src/mage/cards/m/MijaeDjinn.java index a795082e59b..6ec0f9b8d1d 100644 --- a/Mage.Sets/src/mage/cards/m/MijaeDjinn.java +++ b/Mage.Sets/src/mage/cards/m/MijaeDjinn.java @@ -57,7 +57,7 @@ class MijaeDjinnEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); Permanent creature = game.getPermanent(source.getSourceId()); if (controller != null && creature != null) { - if (controller.flipCoin(game, true)) { + if (controller.flipCoin(source, game, true)) { return true; } else { creature.removeFromCombat(game); diff --git a/Mage.Sets/src/mage/cards/m/MirrorMarch.java b/Mage.Sets/src/mage/cards/m/MirrorMarch.java index a590fc91b63..c68bf6b03ad 100644 --- a/Mage.Sets/src/mage/cards/m/MirrorMarch.java +++ b/Mage.Sets/src/mage/cards/m/MirrorMarch.java @@ -77,7 +77,7 @@ class MirrorMarchEffect extends OneShotEffect { int counter = 0; boolean wonFlip = false; do { - wonFlip = player.flipCoin(game, true); + wonFlip = player.flipCoin(source, game, true); if (wonFlip) { counter++; } diff --git a/Mage.Sets/src/mage/cards/m/MoggAssassin.java b/Mage.Sets/src/mage/cards/m/MoggAssassin.java index c9e0f7717a8..8f8f2a93526 100644 --- a/Mage.Sets/src/mage/cards/m/MoggAssassin.java +++ b/Mage.Sets/src/mage/cards/m/MoggAssassin.java @@ -110,7 +110,7 @@ class MoggAssassinEffect extends OneShotEffect { } Permanent chosenPermanent = game.getPermanent(source.getTargets().get(0).getFirstTarget()); Permanent opponentsPermanent = game.getPermanent(source.getTargets().get(1).getFirstTarget()); - if (controller.flipCoin(game, true)) { + if (controller.flipCoin(source, game, true)) { if (chosenPermanent != null) { chosenPermanent.destroy(source.getSourceId(), game, false); return true; diff --git a/Mage.Sets/src/mage/cards/m/MoltenBirth.java b/Mage.Sets/src/mage/cards/m/MoltenBirth.java index 56ae332d1c3..6fbee1801cb 100644 --- a/Mage.Sets/src/mage/cards/m/MoltenBirth.java +++ b/Mage.Sets/src/mage/cards/m/MoltenBirth.java @@ -59,7 +59,7 @@ class MoltenBirthEffect extends OneShotEffect { if (controller != null) { MoltenBirthElementalToken token = new MoltenBirthElementalToken(); token.putOntoBattlefield(2, game, source.getSourceId(), source.getControllerId()); - if (controller.flipCoin(game, true)) { + if (controller.flipCoin(source, game, true)) { Card molten = game.getCard(source.getSourceId()); if (molten != null) { molten.moveToZone(Zone.HAND, source.getSourceId(), game, true); diff --git a/Mage.Sets/src/mage/cards/m/MoltenSentry.java b/Mage.Sets/src/mage/cards/m/MoltenSentry.java index 988573aa66e..445e332bfa0 100644 --- a/Mage.Sets/src/mage/cards/m/MoltenSentry.java +++ b/Mage.Sets/src/mage/cards/m/MoltenSentry.java @@ -64,7 +64,7 @@ class MoltenSentryEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); Permanent permanent = game.getPermanentEntering(source.getSourceId()); if (controller != null && permanent != null) { - if (controller.flipCoin(game, true)) { + if (controller.flipCoin(source, game, true)) { game.informPlayers("Heads: " + permanent.getLogName() + " enters the battlefield as a 5/2 creature with haste"); permanent.getPower().modifyBaseValue(5); permanent.getToughness().modifyBaseValue(2); diff --git a/Mage.Sets/src/mage/cards/o/OddsEnds.java b/Mage.Sets/src/mage/cards/o/OddsEnds.java index 8fea0879f44..56c41e2c89b 100644 --- a/Mage.Sets/src/mage/cards/o/OddsEnds.java +++ b/Mage.Sets/src/mage/cards/o/OddsEnds.java @@ -65,7 +65,7 @@ class OddsEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { - if (controller.flipCoin(game, true)) { + if (controller.flipCoin(source, game, true)) { game.informPlayers("Odds: Spell countered"); return game.getStack().counter(getTargetPointer().getFirst(game, source), source.getSourceId(), game); diff --git a/Mage.Sets/src/mage/cards/o/OrcishCaptain.java b/Mage.Sets/src/mage/cards/o/OrcishCaptain.java index 924d14cfb84..adb37723559 100644 --- a/Mage.Sets/src/mage/cards/o/OrcishCaptain.java +++ b/Mage.Sets/src/mage/cards/o/OrcishCaptain.java @@ -69,7 +69,7 @@ class OrcishCaptainEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source)); if (controller != null && permanent != null) { - if (controller.flipCoin(game, true)) { + if (controller.flipCoin(source, game, true)) { game.informPlayers("Orcish Captain: Won flip. Target Orc creature gets +2/+0 until end of turn."); game.addEffect(new BoostTargetEffect(2, 0, Duration.EndOfTurn), source); return true; diff --git a/Mage.Sets/src/mage/cards/p/PlanarChaos.java b/Mage.Sets/src/mage/cards/p/PlanarChaos.java index b5b7ad6c29c..863a0d0d4a0 100644 --- a/Mage.Sets/src/mage/cards/p/PlanarChaos.java +++ b/Mage.Sets/src/mage/cards/p/PlanarChaos.java @@ -61,7 +61,7 @@ class PlanarChaosUpkeepEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); if (player != null) { - if (!player.flipCoin(game, true)) { + if (!player.flipCoin(source, game, true)) { Permanent perm = game.getPermanent(source.getSourceId()); if (perm != null) { perm.sacrifice(source.getSourceId(), game); @@ -104,7 +104,7 @@ class PlanarChaosCastAllEffect extends OneShotEffect { if (sourceObject != null && spell != null) { Player caster = game.getPlayer(spell.getControllerId()); if (caster != null) { - if (!caster.flipCoin(game, true)) { + if (!caster.flipCoin(source, game, true)) { game.informPlayers(sourceObject.getLogName() + ": " + spell.getLogName() + " countered"); game.getStack().counter(getTargetPointer().getFirst(game, source), source.getSourceId(), game); } diff --git a/Mage.Sets/src/mage/cards/p/PuppetsVerdict.java b/Mage.Sets/src/mage/cards/p/PuppetsVerdict.java index 99e0d5a4d8d..080d25a75cf 100644 --- a/Mage.Sets/src/mage/cards/p/PuppetsVerdict.java +++ b/Mage.Sets/src/mage/cards/p/PuppetsVerdict.java @@ -54,7 +54,7 @@ class PuppetsVerdictEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { - if (controller.flipCoin(game, true)) { + if (controller.flipCoin(source, game, true)) { FilterCreaturePermanent filterPower2OrLess = new FilterCreaturePermanent("all creatures power 2 or less"); filterPower2OrLess.add(new PowerPredicate(ComparisonType.FEWER_THAN, 3)); diff --git a/Mage.Sets/src/mage/cards/r/RakdosTheShowstopper.java b/Mage.Sets/src/mage/cards/r/RakdosTheShowstopper.java index 2792ead708f..9b3cc7222de 100644 --- a/Mage.Sets/src/mage/cards/r/RakdosTheShowstopper.java +++ b/Mage.Sets/src/mage/cards/r/RakdosTheShowstopper.java @@ -80,7 +80,7 @@ class RakdosTheShowstopperEffect extends OneShotEffect { && !permanent.hasSubtype(SubType.DEMON, game) && !permanent.hasSubtype(SubType.DEVIL, game) && !permanent.hasSubtype(SubType.IMP, game) - && !player.flipCoin(game, true)) { + && !player.flipCoin(source, game, true)) { permanent.destroy(source.getSourceId(), game, false); } } diff --git a/Mage.Sets/src/mage/cards/r/RalZarek.java b/Mage.Sets/src/mage/cards/r/RalZarek.java index b20acd54216..4fc72d4aafa 100644 --- a/Mage.Sets/src/mage/cards/r/RalZarek.java +++ b/Mage.Sets/src/mage/cards/r/RalZarek.java @@ -99,7 +99,7 @@ class RalZarekExtraTurnsEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { for (int i = 0; i < 5; i++) { - if (controller.flipCoin(game, true)) { + if (controller.flipCoin(source, game, true)) { game.getState().getTurnMods().add(new TurnMod(source.getControllerId(), false)); } } diff --git a/Mage.Sets/src/mage/cards/r/RiskyMove.java b/Mage.Sets/src/mage/cards/r/RiskyMove.java index 3e664ac40d9..b72f91ad8dc 100644 --- a/Mage.Sets/src/mage/cards/r/RiskyMove.java +++ b/Mage.Sets/src/mage/cards/r/RiskyMove.java @@ -162,7 +162,7 @@ class RiskyMoveFlipCoinEffect extends OneShotEffect { } Permanent permanent = game.getPermanent(target1.getFirstTarget()); Player chosenOpponent = game.getPlayer(target2.getFirstTarget()); - if (!controller.flipCoin(game, true)) { + if (!controller.flipCoin(source, game, true)) { if (permanent != null && chosenOpponent != null) { ContinuousEffect effect = new RiskyMoveCreatureGainControlEffect(Duration.Custom, chosenOpponent.getId()); effect.setTargetPointer(new FixedTarget(permanent.getId())); diff --git a/Mage.Sets/src/mage/cards/s/SabaccGame.java b/Mage.Sets/src/mage/cards/s/SabaccGame.java index b02fdd9ae6f..4cfd1b6b467 100644 --- a/Mage.Sets/src/mage/cards/s/SabaccGame.java +++ b/Mage.Sets/src/mage/cards/s/SabaccGame.java @@ -88,7 +88,7 @@ class SabaccGameEffect extends OneShotEffect { if (target.chooseTarget(outcome, opponent.getId(), source, game)) { chosenPermanent = game.getPermanent(target.getFirstTarget()); } - boolean flipWin = controller.flipCoin(game, true); + boolean flipWin = controller.flipCoin(source, game, true); if (flipWin) { ContinuousEffect effect = new GainControlTargetEffect(Duration.Custom, true, controller.getId()); effect.setTargetPointer(new FixedTarget(targetPermanent, game)); diff --git a/Mage.Sets/src/mage/cards/s/ScoriaWurm.java b/Mage.Sets/src/mage/cards/s/ScoriaWurm.java index 84b05b13318..5f02aba6f93 100644 --- a/Mage.Sets/src/mage/cards/s/ScoriaWurm.java +++ b/Mage.Sets/src/mage/cards/s/ScoriaWurm.java @@ -60,7 +60,7 @@ class ScoriaWurmEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); Permanent permanent = game.getPermanent(source.getSourceId()); if (controller != null && permanent != null) { - if (controller.flipCoin(game, true)) { + if (controller.flipCoin(source, game, true)) { return true; } else { new ReturnToHandSourceEffect().apply(game, source); diff --git a/Mage.Sets/src/mage/cards/s/SkittishValesk.java b/Mage.Sets/src/mage/cards/s/SkittishValesk.java index da9d4835376..604f9a2e6d0 100644 --- a/Mage.Sets/src/mage/cards/s/SkittishValesk.java +++ b/Mage.Sets/src/mage/cards/s/SkittishValesk.java @@ -63,7 +63,7 @@ class SkittishValeskEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); Permanent permanent = game.getPermanent(source.getSourceId()); - if (controller != null && permanent != null && !controller.flipCoin(game, true)) { + if (controller != null && permanent != null && !controller.flipCoin(source, game, true)) { return permanent.turnFaceDown(game, source.getControllerId()); } return false; diff --git a/Mage.Sets/src/mage/cards/s/SkyclawThrash.java b/Mage.Sets/src/mage/cards/s/SkyclawThrash.java index c64d1e9f853..b0a9e3f91b4 100644 --- a/Mage.Sets/src/mage/cards/s/SkyclawThrash.java +++ b/Mage.Sets/src/mage/cards/s/SkyclawThrash.java @@ -70,7 +70,7 @@ class SkyclawThrashEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { Permanent sourcePermanent = game.getPermanent(source.getSourceId()); - if (controller.flipCoin(game, true) && sourcePermanent != null) { + if (controller.flipCoin(source, game, true) && sourcePermanent != null) { ContinuousEffect effect = new BoostTargetEffect(1, 1, Duration.EndOfTurn); effect.setTargetPointer(new FixedTarget(sourcePermanent, game)); game.addEffect(effect, source); diff --git a/Mage.Sets/src/mage/cards/s/SqueesRevenge.java b/Mage.Sets/src/mage/cards/s/SqueesRevenge.java index dc3b8ba3b8f..f30ec04673e 100644 --- a/Mage.Sets/src/mage/cards/s/SqueesRevenge.java +++ b/Mage.Sets/src/mage/cards/s/SqueesRevenge.java @@ -56,7 +56,7 @@ class SqueesRevengeEffect extends OneShotEffect { int number = player.announceXMana(0, Integer.MAX_VALUE, "Choose how many times to flip a coin", game, source); game.informPlayers(player.getLogName() + " chooses " + number + '.'); for(int i = 0; i < number; i++) { - if(!player.flipCoin(game, true)) { + if(!player.flipCoin(source, game, true)) { return true; } } diff --git a/Mage.Sets/src/mage/cards/s/StitchInTime.java b/Mage.Sets/src/mage/cards/s/StitchInTime.java index d2428e68a76..c1dc506c43c 100644 --- a/Mage.Sets/src/mage/cards/s/StitchInTime.java +++ b/Mage.Sets/src/mage/cards/s/StitchInTime.java @@ -52,7 +52,7 @@ class StitchInTimeEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); if (player != null) { - if (player.flipCoin(game, true)) { + if (player.flipCoin(source, game, true)) { game.getState().getTurnMods().add(new TurnMod(player.getId(), false)); return true; } diff --git a/Mage.Sets/src/mage/cards/t/TavernSwindler.java b/Mage.Sets/src/mage/cards/t/TavernSwindler.java index 7ba36b1def8..e816947ea23 100644 --- a/Mage.Sets/src/mage/cards/t/TavernSwindler.java +++ b/Mage.Sets/src/mage/cards/t/TavernSwindler.java @@ -62,7 +62,7 @@ class TavernSwindlerEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { - if (controller.flipCoin(game, true)) { + if (controller.flipCoin(source, game, true)) { game.informPlayers(controller.getLogName() + " got " + controller.gainLife(6, game, source)+ " live"); } } diff --git a/Mage.Sets/src/mage/cards/t/TideOfWar.java b/Mage.Sets/src/mage/cards/t/TideOfWar.java index ec2b4d554dc..6c48d0af6bf 100644 --- a/Mage.Sets/src/mage/cards/t/TideOfWar.java +++ b/Mage.Sets/src/mage/cards/t/TideOfWar.java @@ -101,7 +101,7 @@ class TideOfWarEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { Set toSacrifice = new HashSet<>(); - if (controller.flipCoin(game, true)) { + if (controller.flipCoin(source, game, true)) { // each blocking creature is sacrificed by its controller for (CombatGroup combatGroup: game.getCombat().getGroups()) { for (UUID blockerId: combatGroup.getBlockers()) { diff --git a/Mage.Sets/src/mage/cards/t/TwoHeadedGiant.java b/Mage.Sets/src/mage/cards/t/TwoHeadedGiant.java index 8febc80d29d..495a3d91d89 100644 --- a/Mage.Sets/src/mage/cards/t/TwoHeadedGiant.java +++ b/Mage.Sets/src/mage/cards/t/TwoHeadedGiant.java @@ -69,8 +69,8 @@ class TwoHeadedGiantEffect extends OneShotEffect { if (player == null) { return false; } - boolean head1 = player.flipCoin(game, true); - boolean head2 = player.flipCoin(game, true); + boolean head1 = player.flipCoin(source, game, true); + boolean head2 = player.flipCoin(source, game, true); if (head1 == head2) { if (head1) { game.addEffect(new GainAbilitySourceEffect(DoubleStrikeAbility.getInstance(), Duration.EndOfTurn), source); diff --git a/Mage.Sets/src/mage/cards/v/ViashinoSandswimmer.java b/Mage.Sets/src/mage/cards/v/ViashinoSandswimmer.java index 3f6e9e65b4e..bed9581368d 100644 --- a/Mage.Sets/src/mage/cards/v/ViashinoSandswimmer.java +++ b/Mage.Sets/src/mage/cards/v/ViashinoSandswimmer.java @@ -61,7 +61,7 @@ class ViashinoSandswimmerEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); Permanent permanent = game.getPermanent(source.getSourceId()); if (controller != null && permanent != null) { - if (controller.flipCoin(game, true)) { + if (controller.flipCoin(source, game, true)) { new ReturnToHandSourceEffect().apply(game, source); return true; } else { diff --git a/Mage.Sets/src/mage/cards/v/VolatileRig.java b/Mage.Sets/src/mage/cards/v/VolatileRig.java index 4f17fd3f1e8..ec5ba97d616 100644 --- a/Mage.Sets/src/mage/cards/v/VolatileRig.java +++ b/Mage.Sets/src/mage/cards/v/VolatileRig.java @@ -130,7 +130,7 @@ class VolatileRigEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); if (player != null) { - if (!player.flipCoin(game, true)) { + if (!player.flipCoin(source, game, true)) { Permanent permanent = game.getPermanent(source.getSourceId()); if (permanent != null) { return permanent.sacrifice(source.getSourceId(), game); @@ -161,7 +161,7 @@ class VolatileRigEffect2 extends OneShotEffect { public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); if (player != null) { - if (!player.flipCoin(game, true)) { + if (!player.flipCoin(source, game, true)) { List permanents = game.getBattlefield().getActivePermanents(StaticFilters.FILTER_PERMANENT_CREATURE, source.getControllerId(), game); for (Permanent permanent : permanents) { diff --git a/Mage.Sets/src/mage/cards/w/WildWurm.java b/Mage.Sets/src/mage/cards/w/WildWurm.java index 5fd29d1e5ce..c56dee1803b 100644 --- a/Mage.Sets/src/mage/cards/w/WildWurm.java +++ b/Mage.Sets/src/mage/cards/w/WildWurm.java @@ -58,7 +58,7 @@ class WildWurmEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); Permanent permanent = game.getPermanent(source.getSourceId()); if (controller != null && permanent != null) { - if (controller.flipCoin(game, true)) { + if (controller.flipCoin(source, game, true)) { return true; } else { new ReturnToHandSourceEffect().apply(game, source); diff --git a/Mage.Sets/src/mage/cards/w/WinterSky.java b/Mage.Sets/src/mage/cards/w/WinterSky.java index b08222b9b04..6f728a84087 100644 --- a/Mage.Sets/src/mage/cards/w/WinterSky.java +++ b/Mage.Sets/src/mage/cards/w/WinterSky.java @@ -52,7 +52,7 @@ class WinterSkyEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { - if (controller.flipCoin(game, true)) { + if (controller.flipCoin(source, game, true)) { new DamageEverythingEffect(1).apply(game, source); return true; } else { diff --git a/Mage.Sets/src/mage/cards/y/YdwenEfreet.java b/Mage.Sets/src/mage/cards/y/YdwenEfreet.java index 4298b895227..8f038cb3a2f 100644 --- a/Mage.Sets/src/mage/cards/y/YdwenEfreet.java +++ b/Mage.Sets/src/mage/cards/y/YdwenEfreet.java @@ -60,7 +60,7 @@ class YdwenEfreetEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); Permanent creature = game.getPermanent(source.getSourceId()); if (controller != null && creature != null) { - if (!controller.flipCoin(game, true)) { + if (!controller.flipCoin(source, game, true)) { creature.removeFromCombat(game); creature.setMaxBlocks(0); diff --git a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java index 53199956079..4842c49e6d2 100644 --- a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java +++ b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java @@ -2609,13 +2609,13 @@ public class TestPlayer implements Player { } @Override - public boolean flipCoin(Game game, boolean winnable) { - return computerPlayer.flipCoin(game, true); + public boolean flipCoin(Ability source, Game game, boolean winnable) { + return computerPlayer.flipCoin(source, game, true); } @Override - public boolean flipCoin(Game game, boolean winnable, ArrayList appliedEffects) { - return computerPlayer.flipCoin(game, true, appliedEffects); + public boolean flipCoin(Ability source, Game game, boolean winnable, ArrayList appliedEffects) { + return computerPlayer.flipCoin(source, game, true, appliedEffects); } @Override diff --git a/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java b/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java index 60373727586..384d89c21f1 100644 --- a/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java +++ b/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java @@ -642,12 +642,12 @@ public class PlayerStub implements Player { } @Override - public boolean flipCoin(Game game, boolean winnable) { + public boolean flipCoin(Ability source, Game game, boolean winnable) { return false; } @Override - public boolean flipCoin(Game game, boolean winnable, ArrayList appliedEffects) { + public boolean flipCoin(Ability source, Game game, boolean winnable, ArrayList appliedEffects) { return false; } diff --git a/Mage/src/main/java/mage/abilities/effects/common/FlipCoinEffect.java b/Mage/src/main/java/mage/abilities/effects/common/FlipCoinEffect.java index 8f9f0ebd638..32b1b7940db 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/FlipCoinEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/FlipCoinEffect.java @@ -60,7 +60,7 @@ public class FlipCoinEffect extends OneShotEffect { MageObject mageObject = game.getObject(source.getSourceId()); if (controller != null && mageObject != null) { boolean result = true; - for (Effect effect : controller.flipCoin(game, true) ? executingEffectsWon : executingEffectsLost) { + for (Effect effect : controller.flipCoin(source, game, true) ? executingEffectsWon : executingEffectsLost) { effect.setTargetPointer(this.targetPointer); if (effect instanceof OneShotEffect) { result &= effect.apply(game, source); diff --git a/Mage/src/main/java/mage/abilities/effects/common/FlipUntilLoseEffect.java b/Mage/src/main/java/mage/abilities/effects/common/FlipUntilLoseEffect.java index d7588ae3604..6d1abe14fdd 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/FlipUntilLoseEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/FlipUntilLoseEffect.java @@ -34,7 +34,7 @@ public class FlipUntilLoseEffect extends OneShotEffect { return false; } while (true) { - if (!player.flipCoin(game, true)) { + if (!player.flipCoin(source, game, true)) { return true; } } diff --git a/Mage/src/main/java/mage/game/events/CoinFlippedEvent.java b/Mage/src/main/java/mage/game/events/CoinFlippedEvent.java new file mode 100644 index 00000000000..6281c3175cf --- /dev/null +++ b/Mage/src/main/java/mage/game/events/CoinFlippedEvent.java @@ -0,0 +1,28 @@ +package mage.game.events; + +import java.util.UUID; + +public class CoinFlippedEvent extends GameEvent { + private final boolean result; + private final boolean chosen; + private final boolean winnable; + + CoinFlippedEvent(UUID playerId, UUID sourceId, boolean result, boolean chosen, boolean winnable) { + super(EventType.FLIP_COIN, playerId, sourceId, playerId); + this.result = result; + this.chosen = chosen; + this.winnable = winnable; + } + + public boolean getResult() { + return result; + } + + public boolean getChosen() { + return chosen; + } + + public boolean isWinnable() { + return winnable; + } +} diff --git a/Mage/src/main/java/mage/game/events/FlipCoinEvent.java b/Mage/src/main/java/mage/game/events/FlipCoinEvent.java new file mode 100644 index 00000000000..6a4b16fa637 --- /dev/null +++ b/Mage/src/main/java/mage/game/events/FlipCoinEvent.java @@ -0,0 +1,36 @@ +package mage.game.events; + +import java.util.UUID; + +public class FlipCoinEvent extends GameEvent { + private boolean result; + private final boolean chosen; + private final boolean winnable; + + public FlipCoinEvent(UUID playerId, UUID sourceId, boolean result, boolean chosen, boolean winnable) { + super(EventType.FLIP_COIN, playerId, sourceId, playerId); + this.result = result; + this.chosen = chosen; + this.winnable = winnable; + } + + public boolean getResult() { + return result; + } + + public void setResult(boolean result) { + this.result = result; + } + + public boolean getChosen() { + return chosen; + } + + public boolean isWinnable() { + return winnable; + } + + public CoinFlippedEvent getFlippedEvent() { + return new CoinFlippedEvent(playerId, sourceId, result, chosen, winnable); + } +} diff --git a/Mage/src/main/java/mage/players/Player.java b/Mage/src/main/java/mage/players/Player.java index 96e022b5d06..0686edb5f4d 100644 --- a/Mage/src/main/java/mage/players/Player.java +++ b/Mage/src/main/java/mage/players/Player.java @@ -395,9 +395,9 @@ public interface Player extends MageItem, Copyable { boolean hasProtectionFrom(MageObject source, Game game); - boolean flipCoin(Game game, boolean winnable); + boolean flipCoin(Ability source, Game game, boolean winnable); - boolean flipCoin(Game game, boolean winnable, ArrayList appliedEffects); + boolean flipCoin(Ability source, Game game, boolean winnable, ArrayList appliedEffects); int rollDice(Game game, int numSides); diff --git a/Mage/src/main/java/mage/players/PlayerImpl.java b/Mage/src/main/java/mage/players/PlayerImpl.java index 7776ccdddfb..95e7e60fbca 100644 --- a/Mage/src/main/java/mage/players/PlayerImpl.java +++ b/Mage/src/main/java/mage/players/PlayerImpl.java @@ -42,11 +42,8 @@ import mage.filter.predicate.permanent.PermanentIdPredicate; import mage.game.*; import mage.game.combat.CombatGroup; import mage.game.command.CommandObject; -import mage.game.events.DamagePlayerEvent; -import mage.game.events.DamagedPlayerEvent; -import mage.game.events.GameEvent; +import mage.game.events.*; import mage.game.events.GameEvent.EventType; -import mage.game.events.ZoneChangeEvent; import mage.game.match.MatchPlayer; import mage.game.permanent.Permanent; import mage.game.permanent.PermanentCard; @@ -2560,28 +2557,38 @@ public abstract class PlayerImpl implements Player, Serializable { } @Override - public boolean flipCoin(Game game, boolean winnable) { - return this.flipCoin(game, true, null); + public boolean flipCoin(Ability source, Game game, boolean winnable) { + return this.flipCoin(source, game, true, null); } /** + * @param source * @param game * @param winnable * @param appliedEffects - * @return true if player won the toss + * @return if winnable, true if player won the toss, if not winnable, true for heads and false for tails */ @Override - public boolean flipCoin(Game game, boolean winnable, ArrayList appliedEffects) { + public boolean flipCoin(Ability source, Game game, boolean winnable, ArrayList appliedEffects) { + boolean chosen = false; + if (winnable) { + chosen = this.chooseUse(Outcome.Benefit, "Heads or tails?", "", "Heads", "Tails", source, game); + game.informPlayers(getLogName() + " chose " + (chosen ? "heads." : "tails.")); + } boolean result = RandomUtil.nextBoolean(); - if (!game.isSimulation()) { - game.informPlayers("[Flip a coin] " + getLogName() + (result ? " won (head)." : " lost (tail).")); + FlipCoinEvent event = new FlipCoinEvent(playerId, source.getSourceId(), result, chosen, winnable); + event.addAppliedEffects(appliedEffects); + game.replaceEvent(event); + game.informPlayers(getLogName() + " got " + (event.getResult() ? "heads" : "tails")); + if (event.isWinnable()) { + game.informPlayers(getLogName() + " " + (event.getResult() == event.getChosen() ? "won" : "lost") + " the flip"); } - GameEvent event = new GameEvent(GameEvent.EventType.FLIP_COIN, playerId, null, playerId, 0, result); event.setAppliedEffects(appliedEffects); - if (!game.replaceEvent(event)) { - game.fireEvent(new GameEvent(GameEvent.EventType.COIN_FLIPPED, playerId, null, playerId, 0, event.getFlag())); + game.fireEvent(event.getFlippedEvent()); + if (event.isWinnable()) { + return event.getResult() == event.getChosen(); } - return event.getFlag(); + return event.getResult(); } @Override @@ -2599,7 +2606,7 @@ public abstract class PlayerImpl implements Player, Serializable { public int rollDice(Game game, ArrayList appliedEffects, int numSides) { int result = RandomUtil.nextInt(numSides) + 1; if (!game.isSimulation()) { - game.informPlayers("[Roll a die] " + getLogName() + " rolled a " + result + " on a " + numSides + " sided dice"); + game.informPlayers("[Roll a die] " + getLogName() + " rolled a " + result + " on a " + numSides + " sided die"); } GameEvent event = new GameEvent(GameEvent.EventType.ROLL_DICE, playerId, null, playerId, result, true); event.setAppliedEffects(appliedEffects);