diff --git a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java index 64f8178018d..19a705eff3e 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java @@ -22,6 +22,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.TreeMap; import org.apache.commons.lang.StringUtils; @@ -3145,13 +3146,14 @@ public class CardFactoryUtil { return evokedSpell; } + private static final Map emptyMap = new TreeMap(); public static void setupETBReplacementAbility(SpellAbility sa) { SpellAbility tailend = sa; while (tailend.getSubAbility() != null) { tailend = tailend.getSubAbility(); } - tailend.setSubAbility(new AbilitySub(ApiType.InternalEtbReplacement, sa.getSourceCard(), null, null)); + tailend.setSubAbility(new AbilitySub(ApiType.InternalEtbReplacement, sa.getSourceCard(), null, emptyMap)); // ETBReplacementMove(sa.getSourceCard(), null)); } diff --git a/src/main/java/forge/game/GameActionUtil.java b/src/main/java/forge/game/GameActionUtil.java index e8c33119a98..ad61307bfc5 100644 --- a/src/main/java/forge/game/GameActionUtil.java +++ b/src/main/java/forge/game/GameActionUtil.java @@ -50,6 +50,7 @@ import forge.card.cost.CostPayLife; import forge.card.cost.CostPutCounter; import forge.card.cost.CostRemoveCounter; import forge.card.cost.CostReturn; +import forge.card.cost.CostReveal; import forge.card.cost.CostSacrifice; import forge.card.cost.CostTapType; import forge.card.cost.CostUtil; @@ -515,30 +516,29 @@ public final class GameActionUtil { else if (part instanceof CostSacrifice) { int amount = Integer.parseInt(((CostSacrifice)part).getAmount()); - List list = CardLists.getValidCards(p.getCardsIn(ZoneType.Battlefield), part.getType().split(";"), p, source); - boolean hasPaid = payCostPart(sourceAbility, (CostPartWithList)part, amount, list, "sacrifice"); + List list = CardLists.getValidCards(p.getCardsIn(ZoneType.Battlefield), part.getType(), p, source); + boolean hasPaid = payCostPart(sourceAbility, (CostPartWithList)part, amount, list, "sacrifice." + orString); if(!hasPaid) return false; - } - - else if (part instanceof CostReturn) { - List list = CardLists.getValidCards(p.getCardsIn(ZoneType.Battlefield), part.getType().split(";"), p, source); + } else if (part instanceof CostReturn) { + List list = CardLists.getValidCards(p.getCardsIn(ZoneType.Battlefield), part.getType(), p, source); int amount = getAmountFromPartX(part, source, sourceAbility); - boolean hasPaid = payCostPart(sourceAbility, (CostPartWithList)part, amount, list, "return to hand"); + boolean hasPaid = payCostPart(sourceAbility, (CostPartWithList)part, amount, list, "return to hand." + orString); if(!hasPaid) return false; - } - - else if (part instanceof CostDiscard) { - List list = CardLists.getValidCards(p.getCardsIn(ZoneType.Hand), part.getType().split(";"), p, source); + } else if (part instanceof CostDiscard) { + List list = CardLists.getValidCards(p.getCardsIn(ZoneType.Hand), part.getType(), p, source); int amount = getAmountFromPartX(part, source, sourceAbility); - boolean hasPaid = payCostPart(sourceAbility, (CostPartWithList)part, amount, list, "discard"); + boolean hasPaid = payCostPart(sourceAbility, (CostPartWithList)part, amount, list, "discard." + orString); if(!hasPaid) return false; - } - - else if (part instanceof CostTapType) { - List list = CardLists.getValidCards(p.getCardsIn(ZoneType.Battlefield), part.getType().split(";"), p, source); + } else if (part instanceof CostReveal) { + List list = CardLists.getValidCards(p.getCardsIn(ZoneType.Hand), part.getType(), p, source); + int amount = getAmountFromPartX(part, source, sourceAbility); + boolean hasPaid = payCostPart(sourceAbility, (CostPartWithList)part, amount, list, "reveal." + orString); + if(!hasPaid) return false; + } else if (part instanceof CostTapType) { + List list = CardLists.getValidCards(p.getCardsIn(ZoneType.Battlefield), part.getType(), p, source); list = CardLists.filter(list, Presets.UNTAPPED); int amount = getAmountFromPartX(part, source, sourceAbility); - boolean hasPaid = payCostPart(sourceAbility, (CostPartWithList)part, amount, list, "tap"); + boolean hasPaid = payCostPart(sourceAbility, (CostPartWithList)part, amount, list, "tap." + orString); if(!hasPaid) return false; }