From 6f8a5071ee0e80843b510865304eafa2ca66963a Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Fri, 22 Oct 2021 10:45:35 +0200 Subject: [PATCH] Control changing effects should not overwrite default controller --- forge-game/src/main/java/forge/game/Game.java | 5 +++++ .../forge/game/ability/effects/ControlExchangeEffect.java | 4 ++-- .../game/ability/effects/ControlExchangeVariantEffect.java | 4 ++-- .../java/forge/game/ability/effects/ControlGainEffect.java | 6 +----- .../game/ability/effects/ControlGainVariantEffect.java | 2 +- .../java/forge/game/ability/effects/ControlSpellEffect.java | 4 ++-- .../java/forge/game/ability/effects/PermanentEffect.java | 2 -- .../src/main/java/forge/game/cost/CostGainControl.java | 2 +- 8 files changed, 14 insertions(+), 15 deletions(-) diff --git a/forge-game/src/main/java/forge/game/Game.java b/forge-game/src/main/java/forge/game/Game.java index 116b142f979..8015ed28220 100644 --- a/forge-game/src/main/java/forge/game/Game.java +++ b/forge-game/src/main/java/forge/game/Game.java @@ -828,6 +828,11 @@ public class Game { getAction().controllerChangeZoneCorrection(c); } c.removeTempController(p); + // return stolen spells + if (c.isInZone(ZoneType.Stack)) { + SpellAbilityStackInstance si = getStack().getInstanceFromSpellAbility(c.getCastSA()); + si.setActivatingPlayer(c.getController()); + } if (c.getController().equals(p)) { getAction().exile(c, null); } diff --git a/forge-game/src/main/java/forge/game/ability/effects/ControlExchangeEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ControlExchangeEffect.java index 05c4098b789..5baaa31d8ad 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ControlExchangeEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ControlExchangeEffect.java @@ -96,8 +96,8 @@ public class ControlExchangeEffect extends SpellAbilityEffect { } final long tStamp = game.getNextTimestamp(); - object2.setController(player1, tStamp); - object1.setController(player2, tStamp); + object2.addTempController(player1, tStamp); + object1.addTempController(player2, tStamp); if (sa.hasParam("RememberExchanged")) { host.addRemembered(object1); host.addRemembered(object2); diff --git a/forge-game/src/main/java/forge/game/ability/effects/ControlExchangeVariantEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ControlExchangeVariantEffect.java index 898354f047b..bd56f3c191b 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ControlExchangeVariantEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ControlExchangeVariantEffect.java @@ -53,10 +53,10 @@ public class ControlExchangeVariantEffect extends SpellAbilityEffect { // set new controller final long tStamp = sa.getActivatingPlayer().getGame().getNextTimestamp(); for (final Card c : chosen1) { - c.setController(player2, tStamp); + c.addTempController(player2, tStamp); } for (final Card c : chosen2) { - c.setController(player1, tStamp); + c.addTempController(player1, tStamp); } } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/ControlGainEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ControlGainEffect.java index 5cc1ecddaeb..a7f8585bea9 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ControlGainEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ControlGainEffect.java @@ -145,11 +145,7 @@ public class ControlGainEffect extends SpellAbilityEffect { } long tStamp = game.getNextTimestamp(); - if (lose != null) { - tgtC.addTempController(newController, tStamp); - } else { - tgtC.setController(newController, tStamp); - } + tgtC.addTempController(newController, tStamp); if (bUntap) { tgtC.untap(true); diff --git a/forge-game/src/main/java/forge/game/ability/effects/ControlGainVariantEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ControlGainVariantEffect.java index f4118e23a37..9f32effdf4f 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ControlGainVariantEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ControlGainVariantEffect.java @@ -90,7 +90,7 @@ public class ControlGainVariantEffect extends SpellAbilityEffect { if (!tgtC.isInPlay() || !tgtC.canBeControlledBy(newController)) { continue; } - tgtC.setController(newController, tStamp); + tgtC.addTempController(newController, tStamp); } } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/ControlSpellEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ControlSpellEffect.java index f18b046b1f3..5911a1b2fc7 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ControlSpellEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ControlSpellEffect.java @@ -87,7 +87,7 @@ public class ControlSpellEffect extends SpellAbilityEffect { if (remember) { source.addRemembered(c); } - c.setController(si.getActivatingPlayer(), tStamp); + c.addTempController(si.getActivatingPlayer(), tStamp); } } @@ -98,7 +98,7 @@ public class ControlSpellEffect extends SpellAbilityEffect { if (remember) { source.addRemembered(tgtC); } - tgtC.setController(newController, tStamp); + tgtC.addTempController(newController, tStamp); si.setActivatingPlayer(newController); } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/PermanentEffect.java b/forge-game/src/main/java/forge/game/ability/effects/PermanentEffect.java index 85276e6a297..dfd2c41b680 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/PermanentEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/PermanentEffect.java @@ -30,8 +30,6 @@ public class PermanentEffect extends SpellAbilityEffect { CardZoneTable table = new CardZoneTable(); ZoneType previousZone = host.getZone().getZoneType(); - host.setController(sa.getActivatingPlayer(), 0); - CardCollectionView lastStateBattlefield = game.copyLastStateBattlefield(); CardCollectionView lastStateGraveyard = game.copyLastStateGraveyard(); diff --git a/forge-game/src/main/java/forge/game/cost/CostGainControl.java b/forge-game/src/main/java/forge/game/cost/CostGainControl.java index 28940a73060..94a410776d4 100644 --- a/forge-game/src/main/java/forge/game/cost/CostGainControl.java +++ b/forge-game/src/main/java/forge/game/cost/CostGainControl.java @@ -91,7 +91,7 @@ public class CostGainControl extends CostPartWithList { */ @Override protected Card doPayment(SpellAbility ability, Card targetCard) { - targetCard.setController(ability.getActivatingPlayer(), ability.getActivatingPlayer().getGame().getNextTimestamp()); + targetCard.addTempController(ability.getActivatingPlayer(), ability.getActivatingPlayer().getGame().getNextTimestamp()); return targetCard; }