|
@@ -10,6 +10,7 @@ import com.gmail.nossr50.locale.LocaleLoader;
|
|
import com.gmail.nossr50.mcMMO;
|
|
import com.gmail.nossr50.mcMMO;
|
|
import com.gmail.nossr50.util.Permissions;
|
|
import com.gmail.nossr50.util.Permissions;
|
|
import com.gmail.nossr50.util.text.StringUtils;
|
|
import com.gmail.nossr50.util.text.StringUtils;
|
|
|
|
+import com.google.common.annotations.VisibleForTesting;
|
|
import com.google.common.collect.ImmutableList;
|
|
import com.google.common.collect.ImmutableList;
|
|
import com.google.common.collect.ImmutableMap;
|
|
import com.google.common.collect.ImmutableMap;
|
|
import com.google.common.collect.ImmutableSet;
|
|
import com.google.common.collect.ImmutableSet;
|
|
@@ -23,57 +24,70 @@ import java.util.*;
|
|
public class SkillTools {
|
|
public class SkillTools {
|
|
private final mcMMO pluginRef;
|
|
private final mcMMO pluginRef;
|
|
|
|
|
|
- //TODO: Should these be hash sets instead of lists?
|
|
|
|
//TODO: Figure out which ones we don't need, this was copy pasted from a diff branch
|
|
//TODO: Figure out which ones we don't need, this was copy pasted from a diff branch
|
|
- public final ImmutableList<String> LOCALIZED_SKILL_NAMES;
|
|
|
|
- public final ImmutableList<String> FORMATTED_SUBSKILL_NAMES;
|
|
|
|
- public final ImmutableSet<String> EXACT_SUBSKILL_NAMES;
|
|
|
|
- public final ImmutableList<PrimarySkillType> CHILD_SKILLS;
|
|
|
|
- public final ImmutableList<PrimarySkillType> NON_CHILD_SKILLS;
|
|
|
|
- public final ImmutableList<PrimarySkillType> COMBAT_SKILLS;
|
|
|
|
- public final ImmutableList<PrimarySkillType> GATHERING_SKILLS;
|
|
|
|
- public final ImmutableList<PrimarySkillType> MISC_SKILLS;
|
|
|
|
-
|
|
|
|
- private ImmutableMap<SubSkillType, PrimarySkillType> subSkillParentRelationshipMap;
|
|
|
|
- private ImmutableMap<SuperAbilityType, PrimarySkillType> superAbilityParentRelationshipMap;
|
|
|
|
- private ImmutableMap<PrimarySkillType, Set<SubSkillType>> primarySkillChildrenMap;
|
|
|
|
|
|
+ public final @NotNull ImmutableList<String> LOCALIZED_SKILL_NAMES;
|
|
|
|
+ public final @NotNull ImmutableList<String> FORMATTED_SUBSKILL_NAMES;
|
|
|
|
+ public final @NotNull ImmutableSet<String> EXACT_SUBSKILL_NAMES;
|
|
|
|
+ public final @NotNull ImmutableList<PrimarySkillType> CHILD_SKILLS;
|
|
|
|
+ public final @NotNull ImmutableList<PrimarySkillType> NON_CHILD_SKILLS;
|
|
|
|
+ public final @NotNull ImmutableList<PrimarySkillType> COMBAT_SKILLS;
|
|
|
|
+ public final @NotNull ImmutableList<PrimarySkillType> GATHERING_SKILLS;
|
|
|
|
+ public final @NotNull ImmutableList<PrimarySkillType> MISC_SKILLS;
|
|
|
|
+
|
|
|
|
+ private final @NotNull ImmutableMap<SubSkillType, PrimarySkillType> subSkillParentRelationshipMap;
|
|
|
|
+ private final @NotNull ImmutableMap<SuperAbilityType, PrimarySkillType> superAbilityParentRelationshipMap;
|
|
|
|
+ private final @NotNull ImmutableMap<PrimarySkillType, Set<SubSkillType>> primarySkillChildrenMap;
|
|
|
|
|
|
// The map below is for the super abilities which require readying a tool, its everything except blast mining
|
|
// The map below is for the super abilities which require readying a tool, its everything except blast mining
|
|
- private ImmutableMap<PrimarySkillType, SuperAbilityType> mainActivatedAbilityChildMap;
|
|
|
|
- private ImmutableMap<PrimarySkillType, ToolType> primarySkillToolMap;
|
|
|
|
|
|
+ private final ImmutableMap<PrimarySkillType, SuperAbilityType> mainActivatedAbilityChildMap;
|
|
|
|
+ private final ImmutableMap<PrimarySkillType, ToolType> primarySkillToolMap;
|
|
|
|
|
|
public SkillTools(@NotNull mcMMO pluginRef) {
|
|
public SkillTools(@NotNull mcMMO pluginRef) {
|
|
this.pluginRef = pluginRef;
|
|
this.pluginRef = pluginRef;
|
|
|
|
|
|
- initSubSkillRelationshipMap();
|
|
|
|
- initPrimaryChildMap();
|
|
|
|
- initPrimaryToolMap();
|
|
|
|
- initSuperAbilityParentRelationships();
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Setup subskill -> parent relationship map
|
|
|
|
+ */
|
|
|
|
+ EnumMap<SubSkillType, PrimarySkillType> tempSubParentMap = new EnumMap<SubSkillType, PrimarySkillType>(SubSkillType.class);
|
|
|
|
|
|
- List<PrimarySkillType> childSkills = new ArrayList<>();
|
|
|
|
- List<PrimarySkillType> nonChildSkills = new ArrayList<>();
|
|
|
|
|
|
+ //Super hacky and disgusting
|
|
|
|
+ for(PrimarySkillType primarySkillType1 : PrimarySkillType.values()) {
|
|
|
|
+ for(SubSkillType subSkillType : SubSkillType.values()) {
|
|
|
|
+ String[] splitSubSkillName = subSkillType.toString().split("_");
|
|
|
|
|
|
- for (PrimarySkillType primarySkillType : PrimarySkillType.values()) {
|
|
|
|
- if (isChildSkill(primarySkillType)) {
|
|
|
|
- childSkills.add(primarySkillType);
|
|
|
|
- } else {
|
|
|
|
- nonChildSkills.add(primarySkillType);
|
|
|
|
|
|
+ if(primarySkillType1.toString().equalsIgnoreCase(splitSubSkillName[0])) {
|
|
|
|
+ //Parent Skill Found
|
|
|
|
+ tempSubParentMap.put(subSkillType, primarySkillType1);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- COMBAT_SKILLS = ImmutableList.of(PrimarySkillType.ARCHERY, PrimarySkillType.AXES, PrimarySkillType.SWORDS, PrimarySkillType.TAMING, PrimarySkillType.UNARMED);
|
|
|
|
- GATHERING_SKILLS = ImmutableList.of(PrimarySkillType.EXCAVATION, PrimarySkillType.FISHING, PrimarySkillType.HERBALISM, PrimarySkillType.MINING, PrimarySkillType.WOODCUTTING);
|
|
|
|
- MISC_SKILLS = ImmutableList.of(PrimarySkillType.ACROBATICS, PrimarySkillType.ALCHEMY, PrimarySkillType.REPAIR, PrimarySkillType.SALVAGE, PrimarySkillType.SMELTING);
|
|
|
|
|
|
+ subSkillParentRelationshipMap = ImmutableMap.copyOf(tempSubParentMap);
|
|
|
|
|
|
- LOCALIZED_SKILL_NAMES = ImmutableList.copyOf(buildLocalizedPrimarySkillNames());
|
|
|
|
- FORMATTED_SUBSKILL_NAMES = ImmutableList.copyOf(buildFormattedSubSkillNameList());
|
|
|
|
- EXACT_SUBSKILL_NAMES = ImmutableSet.copyOf(buildExactSubSkillNameList());
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Setup primary -> (collection) subskill map
|
|
|
|
+ */
|
|
|
|
|
|
- CHILD_SKILLS = ImmutableList.copyOf(childSkills);
|
|
|
|
- NON_CHILD_SKILLS = ImmutableList.copyOf(nonChildSkills);
|
|
|
|
- }
|
|
|
|
|
|
+ EnumMap<PrimarySkillType, Set<SubSkillType>> tempPrimaryChildMap = new EnumMap<PrimarySkillType, Set<SubSkillType>>(PrimarySkillType.class);
|
|
|
|
+
|
|
|
|
+ //Init the empty Hash Sets
|
|
|
|
+ for(PrimarySkillType primarySkillType1 : PrimarySkillType.values()) {
|
|
|
|
+ tempPrimaryChildMap.put(primarySkillType1, new HashSet<>());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //Fill in the hash sets
|
|
|
|
+ for(SubSkillType subSkillType : SubSkillType.values()) {
|
|
|
|
+ PrimarySkillType parentSkill = subSkillParentRelationshipMap.get(subSkillType);
|
|
|
|
+
|
|
|
|
+ //Add this subskill as a child
|
|
|
|
+ tempPrimaryChildMap.get(parentSkill).add(subSkillType);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ primarySkillChildrenMap = ImmutableMap.copyOf(tempPrimaryChildMap);
|
|
|
|
|
|
- private void initPrimaryToolMap() {
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Setup primary -> tooltype map
|
|
|
|
+ */
|
|
EnumMap<PrimarySkillType, ToolType> tempToolMap = new EnumMap<PrimarySkillType, ToolType>(PrimarySkillType.class);
|
|
EnumMap<PrimarySkillType, ToolType> tempToolMap = new EnumMap<PrimarySkillType, ToolType>(PrimarySkillType.class);
|
|
|
|
|
|
tempToolMap.put(PrimarySkillType.AXES, ToolType.AXE);
|
|
tempToolMap.put(PrimarySkillType.AXES, ToolType.AXE);
|
|
@@ -85,9 +99,12 @@ public class SkillTools {
|
|
tempToolMap.put(PrimarySkillType.MINING, ToolType.PICKAXE);
|
|
tempToolMap.put(PrimarySkillType.MINING, ToolType.PICKAXE);
|
|
|
|
|
|
primarySkillToolMap = ImmutableMap.copyOf(tempToolMap);
|
|
primarySkillToolMap = ImmutableMap.copyOf(tempToolMap);
|
|
- }
|
|
|
|
|
|
|
|
- private void initSuperAbilityParentRelationships() {
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Setup ability -> primary map
|
|
|
|
+ * Setup primary -> ability map
|
|
|
|
+ */
|
|
|
|
+
|
|
EnumMap<SuperAbilityType, PrimarySkillType> tempAbilityParentRelationshipMap = new EnumMap<SuperAbilityType, PrimarySkillType>(SuperAbilityType.class);
|
|
EnumMap<SuperAbilityType, PrimarySkillType> tempAbilityParentRelationshipMap = new EnumMap<SuperAbilityType, PrimarySkillType>(SuperAbilityType.class);
|
|
EnumMap<PrimarySkillType, SuperAbilityType> tempMainActivatedAbilityChildMap = new EnumMap<PrimarySkillType, SuperAbilityType>(PrimarySkillType.class);
|
|
EnumMap<PrimarySkillType, SuperAbilityType> tempMainActivatedAbilityChildMap = new EnumMap<PrimarySkillType, SuperAbilityType>(PrimarySkillType.class);
|
|
|
|
|
|
@@ -107,6 +124,40 @@ public class SkillTools {
|
|
|
|
|
|
superAbilityParentRelationshipMap = ImmutableMap.copyOf(tempAbilityParentRelationshipMap);
|
|
superAbilityParentRelationshipMap = ImmutableMap.copyOf(tempAbilityParentRelationshipMap);
|
|
mainActivatedAbilityChildMap = ImmutableMap.copyOf(tempMainActivatedAbilityChildMap);
|
|
mainActivatedAbilityChildMap = ImmutableMap.copyOf(tempMainActivatedAbilityChildMap);
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * Build child skill and nonchild skill lists
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+ List<PrimarySkillType> childSkills = new ArrayList<>();
|
|
|
|
+ List<PrimarySkillType> nonChildSkills = new ArrayList<>();
|
|
|
|
+
|
|
|
|
+ for (PrimarySkillType primarySkillType : PrimarySkillType.values()) {
|
|
|
|
+ if (isChildSkill(primarySkillType)) {
|
|
|
|
+ childSkills.add(primarySkillType);
|
|
|
|
+ } else {
|
|
|
|
+ nonChildSkills.add(primarySkillType);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ CHILD_SKILLS = ImmutableList.copyOf(childSkills);
|
|
|
|
+ NON_CHILD_SKILLS = ImmutableList.copyOf(nonChildSkills);
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * Build categorized skill lists
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+ COMBAT_SKILLS = ImmutableList.of(PrimarySkillType.ARCHERY, PrimarySkillType.AXES, PrimarySkillType.SWORDS, PrimarySkillType.TAMING, PrimarySkillType.UNARMED);
|
|
|
|
+ GATHERING_SKILLS = ImmutableList.of(PrimarySkillType.EXCAVATION, PrimarySkillType.FISHING, PrimarySkillType.HERBALISM, PrimarySkillType.MINING, PrimarySkillType.WOODCUTTING);
|
|
|
|
+ MISC_SKILLS = ImmutableList.of(PrimarySkillType.ACROBATICS, PrimarySkillType.ALCHEMY, PrimarySkillType.REPAIR, PrimarySkillType.SALVAGE, PrimarySkillType.SMELTING);
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * Build formatted/localized/etc string lists
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+ LOCALIZED_SKILL_NAMES = ImmutableList.copyOf(buildLocalizedPrimarySkillNames());
|
|
|
|
+ FORMATTED_SUBSKILL_NAMES = ImmutableList.copyOf(buildFormattedSubSkillNameList());
|
|
|
|
+ EXACT_SUBSKILL_NAMES = ImmutableSet.copyOf(buildExactSubSkillNameList());
|
|
}
|
|
}
|
|
|
|
|
|
private @NotNull PrimarySkillType getSuperAbilityParent(SuperAbilityType superAbilityType) throws InvalidSkillException {
|
|
private @NotNull PrimarySkillType getSuperAbilityParent(SuperAbilityType superAbilityType) throws InvalidSkillException {
|
|
@@ -131,45 +182,6 @@ public class SkillTools {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * Builds a list of localized {@link PrimarySkillType} names
|
|
|
|
- * @return list of localized {@link PrimarySkillType} names
|
|
|
|
- */
|
|
|
|
- private @NotNull ArrayList<String> buildLocalizedPrimarySkillNames() {
|
|
|
|
- ArrayList<String> localizedSkillNameList = new ArrayList<>();
|
|
|
|
-
|
|
|
|
- for(PrimarySkillType primarySkillType : PrimarySkillType.values()) {
|
|
|
|
- localizedSkillNameList.add(getLocalizedSkillName(primarySkillType));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- Collections.sort(localizedSkillNameList);
|
|
|
|
-
|
|
|
|
- return localizedSkillNameList;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * Builds a map containing a HashSet of SubSkillTypes considered Children of PrimarySkillType
|
|
|
|
- * Disgusting Hacky Fix until the new skill system is in place
|
|
|
|
- */
|
|
|
|
- private void initPrimaryChildMap() {
|
|
|
|
- EnumMap<PrimarySkillType, Set<SubSkillType>> tempPrimaryChildMap = new EnumMap<PrimarySkillType, Set<SubSkillType>>(PrimarySkillType.class);
|
|
|
|
-
|
|
|
|
- //Init the empty Hash Sets
|
|
|
|
- for(PrimarySkillType primarySkillType : PrimarySkillType.values()) {
|
|
|
|
- tempPrimaryChildMap.put(primarySkillType, new HashSet<>());
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- //Fill in the hash sets
|
|
|
|
- for(SubSkillType subSkillType : SubSkillType.values()) {
|
|
|
|
- PrimarySkillType parentSkill = subSkillParentRelationshipMap.get(subSkillType);
|
|
|
|
-
|
|
|
|
- //Add this subskill as a child
|
|
|
|
- tempPrimaryChildMap.get(parentSkill).add(subSkillType);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- primarySkillChildrenMap = ImmutableMap.copyOf(tempPrimaryChildMap);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* Makes a list of the "nice" version of sub skill names
|
|
* Makes a list of the "nice" version of sub skill names
|
|
* Used in tab completion mostly
|
|
* Used in tab completion mostly
|
|
@@ -196,25 +208,20 @@ public class SkillTools {
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * Builds a map containing the relationships of SubSkillTypes to PrimarySkillTypes
|
|
|
|
- * Disgusting Hacky Fix until the new skill system is in place
|
|
|
|
|
|
+ * Builds a list of localized {@link PrimarySkillType} names
|
|
|
|
+ * @return list of localized {@link PrimarySkillType} names
|
|
*/
|
|
*/
|
|
- private void initSubSkillRelationshipMap() {
|
|
|
|
- EnumMap<SubSkillType, PrimarySkillType> tempSubParentMap = new EnumMap<SubSkillType, PrimarySkillType>(SubSkillType.class);
|
|
|
|
|
|
+ @VisibleForTesting
|
|
|
|
+ private @NotNull ArrayList<String> buildLocalizedPrimarySkillNames() {
|
|
|
|
+ ArrayList<String> localizedSkillNameList = new ArrayList<>();
|
|
|
|
|
|
- //Super hacky and disgusting
|
|
|
|
for(PrimarySkillType primarySkillType : PrimarySkillType.values()) {
|
|
for(PrimarySkillType primarySkillType : PrimarySkillType.values()) {
|
|
- for(SubSkillType subSkillType : SubSkillType.values()) {
|
|
|
|
- String[] splitSubSkillName = subSkillType.toString().split("_");
|
|
|
|
-
|
|
|
|
- if(primarySkillType.toString().equalsIgnoreCase(splitSubSkillName[0])) {
|
|
|
|
- //Parent Skill Found
|
|
|
|
- tempSubParentMap.put(subSkillType, primarySkillType);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ localizedSkillNameList.add(getLocalizedSkillName(primarySkillType));
|
|
}
|
|
}
|
|
|
|
|
|
- subSkillParentRelationshipMap = ImmutableMap.copyOf(tempSubParentMap);
|
|
|
|
|
|
+ Collections.sort(localizedSkillNameList);
|
|
|
|
+
|
|
|
|
+ return localizedSkillNameList;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|