Merge branch 'vine_gecko' into 'master'

ZNR: add vine_gecko with OnlyFirstSpell

See merge request core-developers/forge!3165
This commit is contained in:
Sol
2020-09-22 18:25:46 +00:00
5 changed files with 52 additions and 14 deletions

View File

@@ -456,6 +456,19 @@ public final class CardPredicates {
};
}
public static final Predicate<Card> castSA(final Predicate<SpellAbility> predSA) {
return new Predicate<Card>() {
@Override
public boolean apply(final Card c)
{
if (c.getCastSA() == null) {
return false;
}
return predSA.apply(c.getCastSA());
}
};
}
public static class Presets {
/**

View File

@@ -173,23 +173,12 @@ public final class CardUtil {
}
public static List<Card> getThisTurnCast(final String valid, final Card src) {
List<Card> res = Lists.newArrayList();
final Game game = src.getGame();
res.addAll(game.getStack().getSpellsCastThisTurn());
res = CardLists.getValidCardsAsList(res, valid, src.getController(), src);
return res;
return CardLists.getValidCardsAsList(src.getGame().getStack().getSpellsCastThisTurn(), valid, src.getController(), src);
}
public static List<Card> getLastTurnCast(final String valid, final Card src) {
List<Card> res = Lists.newArrayList();
final Game game = src.getGame();
res.addAll(game.getStack().getSpellsCastLastTurn());
return CardLists.getValidCardsAsList(src.getGame().getStack().getSpellsCastLastTurn(), valid, src.getController(), src);
res = CardLists.getValidCardsAsList(res, valid, src.getController(), src);
return res;
}
/**

View File

@@ -14,6 +14,7 @@ import forge.game.mana.ManaCostBeingPaid;
import forge.game.player.Player;
import forge.game.spellability.AbilityActivated;
import forge.game.spellability.SpellAbility;
import forge.game.spellability.SpellAbilityPredicates;
import forge.game.spellability.TargetChoices;
import forge.game.staticability.StaticAbility;
import forge.game.zone.Zone;
@@ -423,6 +424,7 @@ public class CostAdjustment {
final Player controller = hostCard.getController();
final Player activator = sa.getActivatingPlayer();
final Card card = sa.getHostCard();
final Game game = hostCard.getGame();
if (st.hasParam("ValidCard")
&& !card.isValid(st.getParam("ValidCard").split(","), controller, hostCard, sa)) {
@@ -452,7 +454,19 @@ public class CostAdjustment {
if (activator == null ) {
return false;
}
List<Card> list = CardUtil.getThisTurnCast(st.getParam("ValidCard"), hostCard);
List<Card> list;
if (st.hasParam("ValidCard")) {
list = CardUtil.getThisTurnCast(st.getParam("ValidCard"), hostCard);
} else {
list = game.getStack().getSpellsCastThisTurn();
}
if (st.hasParam("ValidSpell")) {
list = CardLists.filterAsList(list, CardPredicates.castSA(
SpellAbilityPredicates.isValid(st.getParam("ValidSpell").split(","), controller, hostCard, sa))
);
}
if (CardLists.filterControlledBy(list, activator).size() > 0) {
return false;
}

View File

@@ -4,6 +4,8 @@ import com.google.common.base.Predicate;
import forge.game.CardTraitPredicates;
import forge.game.ability.ApiType;
import forge.game.card.Card;
import forge.game.player.Player;
public final class SpellAbilityPredicates extends CardTraitPredicates {
public static final Predicate<SpellAbility> isApi(final ApiType type) {
@@ -59,4 +61,13 @@ public final class SpellAbilityPredicates extends CardTraitPredicates {
}
};
}
public static final Predicate<SpellAbility> isValid(String[] restrictions, Player sourceController, Card source, SpellAbility spellAbility) {
return new Predicate<SpellAbility>() {
@Override
public boolean apply(final SpellAbility sa) {
return sa.isValid(restrictions, sourceController, source, spellAbility);
}
};
}
}

View File

@@ -0,0 +1,11 @@
Name:Vine Gecko
ManaCost:1 G
Types:Creature Elemental Lizard
PT:2/2
S:Mode$ ReduceCost | OnlyFirstSpell$ True | Type$ Spell | ValidSpell$ Spell.Kicked | Activator$ You | Amount$ 1 | Description$ The first kicked spell you cast each turn costs {1} less to cast.
T:Mode$ SpellCast | ValidCard$ Card.kicked+YouCtrl | Execute$ TrigPutCounter | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast a kicked spell, put a +1/+1 counter on CARDNAME.
SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1
SVar:BuffedBy:Card.withKicker,Card.withMultikicker
DeckHas:Ability$Counters
Oracle:The first kicked spell you cast each turn costs {1} less to cast.\nWhenever you cast a kicked spell, put a +1/+1 counter on Vine Gecko.