subtypes part 2

This commit is contained in:
igoudt 2017-05-18 09:59:30 +02:00
parent c44c301f5b
commit 19db21c672
651 changed files with 1538 additions and 1255 deletions

View file

@ -83,7 +83,7 @@ public class FetchLandActivatedAbility extends ActivatedAbilityImpl {
private String subTypeNames(Set<SubType> subTypes) {
StringBuilder sb = new StringBuilder();
for (SubType subType: subTypes) {
sb.append(subType).append(" or ");
sb.append(subType.getDescription()).append(" or ");
}
return sb.substring(0, sb.length() - 4);
}

View file

@ -6,92 +6,133 @@ import java.util.Set;
import java.util.stream.Collectors;
public enum SubType {
ARCANE("Arcane", SubTypeSet.SpellType),
TRAP("Trap", SubTypeSet.SpellType),
ARCANE("Arcane", SubTypeSet.SpellType, false),
TRAP("Trap", SubTypeSet.SpellType, false),
FOREST("Forest", SubTypeSet.BasicLandType),
ISLAND("Island", SubTypeSet.BasicLandType),
MOUNTAIN("Mountain", SubTypeSet.BasicLandType),
PLAINS("Plains", SubTypeSet.BasicLandType),
SWAMP("Swamp", SubTypeSet.BasicLandType),
DESERT("Desert", SubTypeSet.NonBasicLandType),
GATE("Gate", SubTypeSet.NonBasicLandType),
LOCUS("Locus", SubTypeSet.NonBasicLandType),
URZAS("Urza's", SubTypeSet.NonBasicLandType),
MINE("Mine", SubTypeSet.NonBasicLandType),
POWER_PLANT("Power-Plant", SubTypeSet.NonBasicLandType),
TOWER("Tower", SubTypeSet.NonBasicLandType),
FOREST("Forest", SubTypeSet.BasicLandType, false),
ISLAND("Island", SubTypeSet.BasicLandType, false),
MOUNTAIN("Mountain", SubTypeSet.BasicLandType, false),
PLAINS("Plains", SubTypeSet.BasicLandType, false),
SWAMP("Swamp", SubTypeSet.BasicLandType, false),
DESERT("Desert", SubTypeSet.NonBasicLandType, false),
GATE("Gate", SubTypeSet.NonBasicLandType, false),
LAIR("Lair", SubTypeSet.NonBasicLandType, false),
LOCUS("Locus", SubTypeSet.NonBasicLandType, false),
URZAS("Urza's", SubTypeSet.NonBasicLandType, false),
MINE("Mine", SubTypeSet.NonBasicLandType, false),
POWER_PLANT("Power-Plant", SubTypeSet.NonBasicLandType, false),
TOWER("Tower", SubTypeSet.NonBasicLandType, false),
AURA("Aura", SubTypeSet.EchanemtType),
CARTOUCHE("Cartouche", SubTypeSet.EchanemtType),
SHRINE("Shrine", SubTypeSet.EchanemtType),
AURA("Aura", SubTypeSet.EnchantmentType, false),
CARTOUCHE("Cartouche", SubTypeSet.EnchantmentType, false),
CURSE("Curse", SubTypeSet.EnchantmentType, false),
SHRINE("Shrine", SubTypeSet.EnchantmentType, false),
EQUIPMENT("Equipment", SubTypeSet.ArtifactType),
FORTIFICATION("Fortification", SubTypeSet.ArtifactType),
VEHICLE("Vehicle", SubTypeSet.ArtifactType),
CLUE("Clue", SubTypeSet.ArtifactType, false),
EQUIPMENT("Equipment", SubTypeSet.ArtifactType, false),
FORTIFICATION("Fortification", SubTypeSet.ArtifactType, false),
VEHICLE("Vehicle", SubTypeSet.ArtifactType, false),
ALLY("Ally", SubTypeSet.CreatureType),
ARTIFICER("Artificer", SubTypeSet.CreatureType),
ASSASSIN("Assassin", SubTypeSet.CreatureType),
BARBARION("Barbarian", SubTypeSet.CreatureType),
BEAST("Beast", SubTypeSet.CreatureType),
BERSERKER("Berserker", SubTypeSet.CreatureType),
BIRD("Bird", SubTypeSet.CreatureType),
CAT("Cat", SubTypeSet.CreatureType),
CEPHALID("Cephalid", SubTypeSet.CreatureType),
CLERIC("Cleric", SubTypeSet.CreatureType),
DEMON("Demon", SubTypeSet.CreatureType),
DRAGON("Dragon", SubTypeSet.CreatureType),
DROID("Droid", SubTypeSet.CreatureType),
DWARF("Dwarf", SubTypeSet.CreatureType),
ELDRAZI("Eldrazi", SubTypeSet.CreatureType),
ELEMENTAL("Elemental", SubTypeSet.CreatureType),
ELF("Elf", SubTypeSet.CreatureType),
FAERIE("Faerie", SubTypeSet.CreatureType),
FOX("Fox", SubTypeSet.CreatureType),
FUNGUS("Fungus", SubTypeSet.CreatureType),
GIANT("Giant", SubTypeSet.CreatureType),
GOAT("Goat", SubTypeSet.CreatureType),
GOBLIN("Goblin", SubTypeSet.CreatureType),
GORGON("Gorgon", SubTypeSet.CreatureType),
HUMAN("Human", SubTypeSet.CreatureType),
KITHKIN("Kithkin", SubTypeSet.CreatureType),
KNIGHT("Knight", SubTypeSet.CreatureType),
KOBOLD("Kobold", SubTypeSet.CreatureType),
GOLEM("Golem", SubTypeSet.CreatureType),
KAVU("Kavu", SubTypeSet.CreatureType),
MERCENARY("Mercenary", SubTypeSet.CreatureType),
MERFOLK("Merfolk", SubTypeSet.CreatureType),
MINION("Minion", SubTypeSet.CreatureType),
MYR("Myr", SubTypeSet.CreatureType),
NINJA("Ninja",SubTypeSet.CreatureType),
OGRE("Ogre", SubTypeSet.CreatureType),
ORC("Orc", SubTypeSet.CreatureType),
PENTAVITE("Pentavite", SubTypeSet.CreatureType),
PRISM("Prism", SubTypeSet.CreatureType),
RAT("Rat", SubTypeSet.CreatureType),
REBEL("Rebel", SubTypeSet.CreatureType),
SAPROLING("Saproling", SubTypeSet.CreatureType),
SCION("Scion", SubTypeSet.CreatureType),
SERVO("Servo", SubTypeSet.CreatureType),
SHAMAN("Shaman", SubTypeSet.CreatureType),
SKELETON("Skeleton", SubTypeSet.CreatureType),
SLIVER("Sliver", SubTypeSet.CreatureType),
SNAKE("Snake", SubTypeSet.CreatureType),
SOLDIER("Soldier", SubTypeSet.CreatureType),
SPIRIT("Spirit", SubTypeSet.CreatureType),
SQUIRREL("Squirrel", SubTypeSet.CreatureType),
THOPTER("Thopter", SubTypeSet.CreatureType),
THRULL("Thrull", SubTypeSet.CreatureType),
TREEFOLK("Treefolk", SubTypeSet.CreatureType),
TROOPER("Trooper", SubTypeSet.CreatureType),
VAMPIRE("Vampire", SubTypeSet.CreatureType),
WALL("Wall", SubTypeSet.CreatureType),
WARRIOR("Warrior", SubTypeSet.CreatureType),
WEREWOLF("Werewolf", SubTypeSet.CreatureType),
WIZARD("Wizard", SubTypeSet.CreatureType),
WOLF("Wolf", SubTypeSet.CreatureType),
ZOMBIE("Zombie", SubTypeSet.CreatureType);
ALLY("Ally", SubTypeSet.CreatureType, false),
ANGEL("Angel", SubTypeSet.CreatureType, false),
ARTIFICER("Artificer", SubTypeSet.CreatureType, false),
ASSEMBLY_WORKER("Assembly-Worker", SubTypeSet.CreatureType, false),
ASSASSIN("Assassin", SubTypeSet.CreatureType, false),
ATOG("Atog", SubTypeSet.CreatureType, false),
AUROCHS("Aurochs", SubTypeSet.CreatureType, false),
BARBARIAN("Barbarian", SubTypeSet.CreatureType, false),
BAT("Bat", SubTypeSet.CreatureType, false),
BEAST("Beast", SubTypeSet.CreatureType, false),
BERSERKER("Berserker", SubTypeSet.CreatureType, false),
BIRD("Bird", SubTypeSet.CreatureType, false),
BLINKMOTH("Blinkmoth", SubTypeSet.CreatureType, false),
CARIBOU("Caribou", SubTypeSet.CreatureType, false),
CAT("Cat", SubTypeSet.CreatureType, false),
CEPHALID("Cephalid", SubTypeSet.CreatureType, false),
CENTAUR("Centaur" ,SubTypeSet.CreatureType, false),
CLERIC("Cleric", SubTypeSet.CreatureType, false),
DEMON("Demon", SubTypeSet.CreatureType, false),
DRAGON("Dragon", SubTypeSet.CreatureType, false),
DRUID("Druid", SubTypeSet.CreatureType, false),
DROID("Droid", SubTypeSet.CreatureType, true),
DWARF("Dwarf", SubTypeSet.CreatureType, false),
ELDRAZI("Eldrazi", SubTypeSet.CreatureType, false),
ELEMENTAL("Elemental", SubTypeSet.CreatureType, false),
ELEPHANT("Elephant", SubTypeSet.CreatureType, false),
ELF("Elf", SubTypeSet.CreatureType, false),
FAERIE("Faerie", SubTypeSet.CreatureType, false),
FLAGBEARER("Flagbearer", SubTypeSet.CreatureType, false),
FOX("Fox", SubTypeSet.CreatureType, false),
FUNGUS("Fungus", SubTypeSet.CreatureType, false),
GIANT("Giant", SubTypeSet.CreatureType, false),
GOAT("Goat", SubTypeSet.CreatureType, false),
GOBLIN("Goblin", SubTypeSet.CreatureType, false),
GORGON("Gorgon", SubTypeSet.CreatureType, false),
GRIFFIN("Griffin", SubTypeSet.CreatureType, false),
HOMUNCULUS("Homunculus", SubTypeSet.CreatureType, false),
HORROR("Horror", SubTypeSet.CreatureType, false),
HUMAN("Human", SubTypeSet.CreatureType, false),
HUNTER("Hunter", SubTypeSet.CreatureType, false),
INSECT("Insect", SubTypeSet.CreatureType, false),
JEDI("Jedi", SubTypeSet.CreatureType, true),
KITHKIN("Kithkin", SubTypeSet.CreatureType, false),
KNIGHT("Knight", SubTypeSet.CreatureType, false),
KOBOLD("Kobold", SubTypeSet.CreatureType, false),
KOR("Kor", SubTypeSet.CreatureType, false),
GOLEM("Golem", SubTypeSet.CreatureType, false),
KAVU("Kavu", SubTypeSet.CreatureType, false),
MERCENARY("Mercenary", SubTypeSet.CreatureType, false),
MERFOLK("Merfolk", SubTypeSet.CreatureType, false),
MINION("Minion", SubTypeSet.CreatureType, false),
MINOTAUR("Minotaur", SubTypeSet.CreatureType, false),
MOONFOLK("Moonfolk", SubTypeSet.CreatureType, false),
MYR("Myr", SubTypeSet.CreatureType, false),
NINJA("Ninja", SubTypeSet.CreatureType, false),
OGRE("Ogre", SubTypeSet.CreatureType, false),
ORC("Orc", SubTypeSet.CreatureType, false),
PENTAVITE("Pentavite", SubTypeSet.CreatureType, false),
PLANT("Plant", SubTypeSet.CreatureType, false),
PRISM("Prism", SubTypeSet.CreatureType, false),
RAT("Rat", SubTypeSet.CreatureType, false),
REBEL("Rebel", SubTypeSet.CreatureType, false),
ROGUE("Rogue", SubTypeSet.CreatureType, false),
SAPROLING("Saproling", SubTypeSet.CreatureType, false),
SAMURAI("Samurai", SubTypeSet.CreatureType, false),
SCARECROW("Scarecrow", SubTypeSet.CreatureType, false),
SCION("Scion", SubTypeSet.CreatureType, false),
SERF("Serf", SubTypeSet.CreatureType, false),
SERVO("Servo", SubTypeSet.CreatureType, false),
SHAMAN("Shaman", SubTypeSet.CreatureType, false),
SKELETON("Skeleton", SubTypeSet.CreatureType, false),
SLIVER("Sliver", SubTypeSet.CreatureType, false),
SNAKE("Snake", SubTypeSet.CreatureType, false),
SOLDIER("Soldier", SubTypeSet.CreatureType, false),
SPIDER("Spider", SubTypeSet.CreatureType, false),
SPIRIT("Spirit", SubTypeSet.CreatureType, false),
SQUIRREL("Squirrel", SubTypeSet.CreatureType, false),
STARSHIP("Starship", SubTypeSet.CreatureType, true),
THOPTER("Thopter", SubTypeSet.CreatureType, false),
THRULL("Thrull", SubTypeSet.CreatureType, false),
TREEFOLK("Treefolk", SubTypeSet.CreatureType, false),
TROOPER("Trooper", SubTypeSet.CreatureType, true),
VAMPIRE("Vampire", SubTypeSet.CreatureType, false),
WALL("Wall", SubTypeSet.CreatureType, false),
WARRIOR("Warrior", SubTypeSet.CreatureType, false),
WEREWOLF("Werewolf", SubTypeSet.CreatureType, false),
WIZARD("Wizard", SubTypeSet.CreatureType, false),
WOLF("Wolf", SubTypeSet.CreatureType, false),
ZOMBIE("Zombie", SubTypeSet.CreatureType, false),
AJANI("Ajani", SubTypeSet.PlaneswalkerType, false),
CHANDRA("Chandra", SubTypeSet.PlaneswalkerType, false),
GIDEON("Gideon", SubTypeSet.PlaneswalkerType, false),
JACE("Jace", SubTypeSet.PlaneswalkerType, false),
KARN("Karn", SubTypeSet.PlaneswalkerType, false),
LILIANA("Liliana", SubTypeSet.PlaneswalkerType, false),
NISSA("Nissa", SubTypeSet.PlaneswalkerType, false),
TAMIYO("Tamiyo", SubTypeSet.PlaneswalkerType, false),
TEZZERET("Tezzeret", SubTypeSet.PlaneswalkerType, false),
UGIN("Ugin", SubTypeSet.PlaneswalkerType, false);
private final SubTypeSet subTypeSet;
@ -101,27 +142,34 @@ public enum SubType {
private final String description;
SubType(String description, SubTypeSet subTypeSet) {
private final boolean customSet;
SubType(String description, SubTypeSet subTypeSet, boolean customSet) {
this.description = description;
this.subTypeSet = subTypeSet;
this.customSet = customSet;
}
public static SubType byDescription(String subtype) {
public static SubType byDescription(String subType) {
for (SubType s : values()) {
if (s.getDescription().equals(subtype)) {
if (s.getDescription().equals(subType)) {
return s;
}
}
throw new IllegalArgumentException("no subtype for " + subtype + " exists");
throw new IllegalArgumentException("no subtype for " + subType + " exists");
}
public SubTypeSet getSubTypeSet() {
return subTypeSet;
}
public static Set<String> getCreatureTypes() {
public static Set<String> getCreatureTypes(boolean customSet) {
return Arrays.stream(values()).filter(p -> p.getSubTypeSet() == SubTypeSet.CreatureType).map(SubType::getDescription).collect(Collectors.toSet());
return Arrays.stream(values()).filter(s -> s.customSet == customSet).filter(p -> p.getSubTypeSet() == SubTypeSet.CreatureType).map(SubType::getDescription).collect(Collectors.toSet());
}
public static Set<String> getBasicLands(boolean customSet) {
return Arrays.stream(values()).filter(s->s.customSet == customSet).filter(p->p.getSubTypeSet() == SubTypeSet.BasicLandType).map(SubType::getDescription).collect(Collectors.toSet());
}
}

View file

@ -5,6 +5,7 @@ public enum SubTypeSet {
SpellType,
BasicLandType,
NonBasicLandType,
EchanemtType,
ArtifactType
EnchantmentType,
ArtifactType,
PlaneswalkerType
}

View file

@ -44,6 +44,10 @@ public class SubtypePredicate implements Predicate<MageObject> {
this.subtype = subtype;
}
public SubtypePredicate(String subtype){
this.subtype = SubType.byDescription(subtype);
}
@Override
public boolean apply(MageObject input, Game game) {
return input.hasSubtype(subtype.getDescription(), game);