DDClass.java 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package org.leumasjaffe.charsheet.model;
  2. import java.io.File;
  3. import java.util.Collection;
  4. import java.util.Collections;
  5. import java.util.HashMap;
  6. import java.util.List;
  7. import java.util.Map;
  8. import java.util.Optional;
  9. import java.util.Set;
  10. import org.leumasjaffe.charsheet.model.features.DDFeature;
  11. import org.leumasjaffe.charsheet.model.magic.DDSpell;
  12. import org.leumasjaffe.charsheet.model.magic.DDSpellList;
  13. import org.leumasjaffe.charsheet.model.magic.DDSpellList.SpellList;
  14. import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
  15. import com.fasterxml.jackson.databind.ObjectMapper;
  16. import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
  17. import lombok.AccessLevel;
  18. import lombok.Data;
  19. import lombok.Getter;
  20. import lombok.NonNull;
  21. import lombok.SneakyThrows;
  22. import lombok.experimental.FieldDefaults;
  23. @Data
  24. @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
  25. @JsonIgnoreProperties(ignoreUnknown=true)
  26. public class DDClass {
  27. @NonNull String name;
  28. int skillPoints;
  29. @NonNull AttackQuality bab;
  30. @NonNull SaveQuality fort;
  31. @NonNull SaveQuality ref;
  32. @NonNull SaveQuality will;
  33. @Getter(AccessLevel.NONE) @NonNull List<List<DDFeature>> features;
  34. @NonNull Set<String> skills;
  35. @NonNull Optional<DDSpellList> spells;
  36. static Map<String, DDClass> store = new HashMap<>();
  37. @SneakyThrows
  38. public static DDClass getFromResource(final String name) {
  39. if (!store.containsKey(name)) {
  40. final ObjectMapper mapper = new ObjectMapper();
  41. mapper.registerModule(new Jdk8Module());
  42. store.put(name, mapper.readValue(new File("resources/classes/" + name + ".json"), DDClass.class));
  43. }
  44. return store.get(name);
  45. }
  46. public Collection<DDSpell> getSpellList( int level ) {
  47. List<SpellList> list = spells.get().getSpellList();
  48. return list.size() <= level ? Collections.emptySet() : list.get( level ).getSpellList();
  49. }
  50. public boolean isClassSkill(final String skillName) {
  51. if (skillName.contains("(")) {
  52. return skills.contains(skillName) || skills.contains(skillName.replaceFirst("\\(.*\\)", "(*)"));
  53. }
  54. return skills.contains(skillName);
  55. }
  56. }