FamilyTree.java 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package com.gmail.nossr50.skills.child;
  2. import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
  3. import com.gmail.nossr50.util.skills.SkillTools;
  4. import java.util.Collections;
  5. import java.util.EnumSet;
  6. import java.util.HashMap;
  7. import java.util.Set;
  8. public class FamilyTree {
  9. private static final HashMap<PrimarySkillType, Set<PrimarySkillType>> tree = new HashMap<>();
  10. public static Set<PrimarySkillType> getParents(PrimarySkillType childSkill) {
  11. enforceChildSkill(childSkill);
  12. // We do not check if we have the child skill in question, as not having it would mean we did something wrong, and an NPE is desired.
  13. return tree.get(childSkill);
  14. }
  15. protected static void registerParent(PrimarySkillType childSkill, PrimarySkillType parentSkill) {
  16. enforceChildSkill(childSkill);
  17. enforceNotChildSkill(parentSkill);
  18. if (!tree.containsKey(childSkill)) {
  19. tree.put(childSkill, EnumSet.noneOf(PrimarySkillType.class));
  20. }
  21. tree.get(childSkill).add(parentSkill);
  22. }
  23. protected static void closeRegistration() {
  24. for (PrimarySkillType childSkill : tree.keySet()) {
  25. Set<PrimarySkillType> immutableSet = Collections.unmodifiableSet(tree.get(childSkill));
  26. tree.put(childSkill, immutableSet);
  27. }
  28. }
  29. protected static void clearRegistrations() {
  30. tree.clear();
  31. }
  32. protected static void enforceChildSkill(PrimarySkillType skill) {
  33. if (!SkillTools.isChildSkill(skill)) {
  34. throw new IllegalArgumentException(skill.name() + " is not a child skill!");
  35. }
  36. }
  37. protected static void enforceNotChildSkill(PrimarySkillType skill) {
  38. if (SkillTools.isChildSkill(skill)) {
  39. throw new IllegalArgumentException(skill.name() + " is a child skill!");
  40. }
  41. }
  42. }