mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 03:08:02 +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) {
|
final boolean destroy) {
|
||||||
CardList battlefield = p.getCardsIn(ZoneType.Battlefield);
|
CardList battlefield = p.getCardsIn(ZoneType.Battlefield);
|
||||||
CardList sacList = AbilityFactory.filterListByType(battlefield, valid, sa);
|
CardList sacList = AbilityFactory.filterListByType(battlefield, valid, sa);
|
||||||
sacList = ComputerUtil.sacrificePermanents(amount, sacList, destroy);
|
sacList = ComputerUtil.sacrificePermanents(amount, sacList, destroy, sa);
|
||||||
|
|
||||||
return sacList;
|
return sacList;
|
||||||
}
|
}
|
||||||
@@ -518,7 +518,7 @@ public class AbilityFactorySacrifice {
|
|||||||
* @param message
|
* @param message
|
||||||
* a {@link java.lang.String} object.
|
* 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) {
|
final boolean destroy, final boolean optional) {
|
||||||
CardList battlefield = p.getCardsIn(ZoneType.Battlefield);
|
CardList battlefield = p.getCardsIn(ZoneType.Battlefield);
|
||||||
CardList list = AbilityFactory.filterListByType(battlefield, valid, sa);
|
CardList list = AbilityFactory.filterListByType(battlefield, valid, sa);
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ import forge.GameEntity;
|
|||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.card.TriggerReplacementBase;
|
import forge.card.TriggerReplacementBase;
|
||||||
import forge.card.abilityfactory.AbilityFactory;
|
import forge.card.abilityfactory.AbilityFactory;
|
||||||
|
import forge.card.abilityfactory.AbilityFactorySacrifice;
|
||||||
import forge.card.cardfactory.CardFactoryUtil;
|
import forge.card.cardfactory.CardFactoryUtil;
|
||||||
import forge.card.spellability.Ability;
|
import forge.card.spellability.Ability;
|
||||||
import forge.card.staticability.StaticAbility;
|
import forge.card.staticability.StaticAbility;
|
||||||
@@ -50,7 +51,6 @@ import forge.card.trigger.TriggerType;
|
|||||||
import forge.control.input.InputPayManaCostAbility;
|
import forge.control.input.InputPayManaCostAbility;
|
||||||
import forge.game.player.ComputerUtil;
|
import forge.game.player.ComputerUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.player.PlayerUtil;
|
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
@@ -2548,9 +2548,10 @@ public class CombatUtil {
|
|||||||
public void resolve() {
|
public void resolve() {
|
||||||
if (crd.getController().isHuman()) {
|
if (crd.getController().isHuman()) {
|
||||||
final CardList list = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield);
|
final CardList list = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield);
|
||||||
ComputerUtil.sacrificePermanents(a, list, false);
|
ComputerUtil.sacrificePermanents(a, list, false, this);
|
||||||
} else {
|
} 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.");
|
sb.append("Annihilator - Defending player sacrifices ").append(a).append(" permanents.");
|
||||||
ability.setStackDescription(sb.toString());
|
ability.setStackDescription(sb.toString());
|
||||||
ability.setDescription(sb.toString());
|
ability.setDescription(sb.toString());
|
||||||
|
ability.setActivatingPlayer(c.getController());
|
||||||
|
|
||||||
AllZone.getStack().add(ability);
|
AllZone.getStack().add(ability);
|
||||||
} // find
|
} // find
|
||||||
|
|||||||
@@ -1713,9 +1713,12 @@ public class ComputerUtil {
|
|||||||
* a {@link forge.CardList} object.
|
* a {@link forge.CardList} object.
|
||||||
* @param destroy
|
* @param destroy
|
||||||
* the destroy
|
* the destroy
|
||||||
|
* @param source
|
||||||
|
* the source SpellAbility
|
||||||
* @return the card list
|
* @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();
|
final CardList sacList = new CardList();
|
||||||
// used in Annihilator and AF_Sacrifice
|
// used in Annihilator and AF_Sacrifice
|
||||||
int max = list.size();
|
int max = list.size();
|
||||||
@@ -1762,7 +1765,7 @@ public class ComputerUtil {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!Singletons.getModel().getGameAction().sacrifice(c, null)) {
|
if (!Singletons.getModel().getGameAction().sacrifice(c, source)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user