mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 02:38:02 +00:00
Merge branch 'vine_gecko' into 'master'
ZNR: add vine_gecko with OnlyFirstSpell See merge request core-developers/forge!3165
This commit is contained in:
@@ -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 {
|
||||
|
||||
/**
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
11
forge-gui/res/cardsfolder/upcoming/ZNR/vine_gecko.txt
Normal file
11
forge-gui/res/cardsfolder/upcoming/ZNR/vine_gecko.txt
Normal 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.
|
||||
|
||||
Reference in New Issue
Block a user