mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 04:08:01 +00:00
CardFacePredicate: use new valid Predicate
This commit is contained in:
@@ -76,6 +76,51 @@ public final class CardFacePredicates {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static class ValidPredicate implements Predicate<ICardFace> {
|
||||||
|
private String valid;
|
||||||
|
|
||||||
|
public ValidPredicate(final String valid) {
|
||||||
|
this.valid = valid;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(ICardFace input) {
|
||||||
|
String k[] = valid.split("\\.", 2);
|
||||||
|
|
||||||
|
if ("Card".equals(k[0])) {
|
||||||
|
// okay
|
||||||
|
} else if ("Permanent".equals(k[0])) {
|
||||||
|
if (input.getType().isInstant() || input.getType().isSorcery()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!input.getType().hasStringType(k[0])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (k.length > 1) {
|
||||||
|
for (final String m : k[1].split("\\+")) {
|
||||||
|
if (!hasProperty(input, m)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static protected boolean hasProperty(ICardFace input, final String v) {
|
||||||
|
if (v.startsWith("non")) {
|
||||||
|
return !hasProperty(input, v.substring(3));
|
||||||
|
} else if (!input.getType().hasStringType(v)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Predicate<ICardFace> valid(final String val) {
|
||||||
|
return new ValidPredicate(val);
|
||||||
|
}
|
||||||
|
|
||||||
public static class Presets {
|
public static class Presets {
|
||||||
/** The Constant isBasicLand. */
|
/** The Constant isBasicLand. */
|
||||||
public static final Predicate<ICardFace> IS_BASIC_LAND = new Predicate<ICardFace>() {
|
public static final Predicate<ICardFace> IS_BASIC_LAND = new Predicate<ICardFace>() {
|
||||||
|
|||||||
@@ -105,17 +105,8 @@ public class ChooseCardNameEffect extends SpellAbilityEffect {
|
|||||||
final String message = validDesc.equals("card") ? "Name a card" : "Name a " + validDesc + " card.";
|
final String message = validDesc.equals("card") ? "Name a card" : "Name a " + validDesc + " card.";
|
||||||
|
|
||||||
Predicate<ICardFace> cpp = Predicates.alwaysTrue();
|
Predicate<ICardFace> cpp = Predicates.alwaysTrue();
|
||||||
if ( StringUtils.containsIgnoreCase(valid, "nonland") ) {
|
if (sa.hasParam("ValidCards")) {
|
||||||
cpp = CardFacePredicates.Presets.IS_NON_LAND;
|
cpp = CardFacePredicates.valid(valid);
|
||||||
}
|
|
||||||
if ( StringUtils.containsIgnoreCase(valid, "nonbasic") ) {
|
|
||||||
cpp = Predicates.not(CardFacePredicates.Presets.IS_BASIC_LAND);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( StringUtils.containsIgnoreCase(valid, "noncreature") ) {
|
|
||||||
cpp = Predicates.not(CardFacePredicates.Presets.IS_CREATURE);
|
|
||||||
} else if ( StringUtils.containsIgnoreCase(valid, "creature") ) {
|
|
||||||
cpp = CardFacePredicates.Presets.IS_CREATURE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
chosen = p.getController().chooseCardName(sa, cpp, valid, message);
|
chosen = p.getController().chooseCardName(sa, cpp, valid, message);
|
||||||
|
|||||||
Reference in New Issue
Block a user