mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 18:58:00 +00:00
- Further steps towards the player keyword "Spells and abilities your opponents control can't cause you to sacrifice permanents."
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user