From 15a4bc13049714457cf7c20dda2a4877673ad367 Mon Sep 17 00:00:00 2001 From: Sloth Date: Sun, 29 Apr 2012 10:48:00 +0000 Subject: [PATCH] - Further steps towards the player keyword "Spells and abilities your opponents control can't cause you to sacrifice permanents." --- .../card/abilityfactory/AbilityFactorySacrifice.java | 4 ++-- src/main/java/forge/game/phase/CombatUtil.java | 8 +++++--- src/main/java/forge/game/player/ComputerUtil.java | 7 +++++-- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactorySacrifice.java b/src/main/java/forge/card/abilityfactory/AbilityFactorySacrifice.java index 65a02885610..da3388716b2 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactorySacrifice.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactorySacrifice.java @@ -497,7 +497,7 @@ public class AbilityFactorySacrifice { final boolean destroy) { CardList battlefield = p.getCardsIn(ZoneType.Battlefield); CardList sacList = AbilityFactory.filterListByType(battlefield, valid, sa); - sacList = ComputerUtil.sacrificePermanents(amount, sacList, destroy); + sacList = ComputerUtil.sacrificePermanents(amount, sacList, destroy, sa); return sacList; } @@ -518,7 +518,7 @@ public class AbilityFactorySacrifice { * @param message * a {@link java.lang.String} object. */ - private static CardList sacrificeHuman(final Player p, final int amount, final String valid, final SpellAbility sa, + public static CardList sacrificeHuman(final Player p, final int amount, final String valid, final SpellAbility sa, final boolean destroy, final boolean optional) { CardList battlefield = p.getCardsIn(ZoneType.Battlefield); CardList list = AbilityFactory.filterListByType(battlefield, valid, sa); diff --git a/src/main/java/forge/game/phase/CombatUtil.java b/src/main/java/forge/game/phase/CombatUtil.java index 0a331fd14e8..62eec4b4d38 100644 --- a/src/main/java/forge/game/phase/CombatUtil.java +++ b/src/main/java/forge/game/phase/CombatUtil.java @@ -41,6 +41,7 @@ import forge.GameEntity; import forge.Singletons; import forge.card.TriggerReplacementBase; import forge.card.abilityfactory.AbilityFactory; +import forge.card.abilityfactory.AbilityFactorySacrifice; import forge.card.cardfactory.CardFactoryUtil; import forge.card.spellability.Ability; import forge.card.staticability.StaticAbility; @@ -50,7 +51,6 @@ import forge.card.trigger.TriggerType; import forge.control.input.InputPayManaCostAbility; import forge.game.player.ComputerUtil; import forge.game.player.Player; -import forge.game.player.PlayerUtil; import forge.game.zone.PlayerZone; import forge.game.zone.ZoneType; import forge.gui.GuiUtils; @@ -2548,9 +2548,10 @@ public class CombatUtil { public void resolve() { if (crd.getController().isHuman()) { final CardList list = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield); - ComputerUtil.sacrificePermanents(a, list, false); + ComputerUtil.sacrificePermanents(a, list, false, this); } else { - AllZone.getInputControl().setInput(PlayerUtil.inputSacrificePermanents(a)); + AbilityFactorySacrifice.sacrificeHuman(AllZone.getHumanPlayer(), a, "Permanent", this, + false, false); } } @@ -2559,6 +2560,7 @@ public class CombatUtil { sb.append("Annihilator - Defending player sacrifices ").append(a).append(" permanents."); ability.setStackDescription(sb.toString()); ability.setDescription(sb.toString()); + ability.setActivatingPlayer(c.getController()); AllZone.getStack().add(ability); } // find diff --git a/src/main/java/forge/game/player/ComputerUtil.java b/src/main/java/forge/game/player/ComputerUtil.java index ae01d93a5d2..c7a04e6b893 100644 --- a/src/main/java/forge/game/player/ComputerUtil.java +++ b/src/main/java/forge/game/player/ComputerUtil.java @@ -1713,9 +1713,12 @@ public class ComputerUtil { * a {@link forge.CardList} object. * @param destroy * the destroy + * @param source + * the source SpellAbility * @return the card list */ - public static CardList sacrificePermanents(final int amount, final CardList list, final boolean destroy) { + public static CardList sacrificePermanents(final int amount, final CardList list, final boolean destroy, + SpellAbility source) { final CardList sacList = new CardList(); // used in Annihilator and AF_Sacrifice int max = list.size(); @@ -1762,7 +1765,7 @@ public class ComputerUtil { continue; } } else { - if (!Singletons.getModel().getGameAction().sacrifice(c, null)) { + if (!Singletons.getModel().getGameAction().sacrifice(c, source)) { continue; } }