mirror of https://github.com/mcMMO-Dev/mcMMO.git
317 lines
9.3 KiB
Java
317 lines
9.3 KiB
Java
package com.gmail.nossr50.datatypes.skills;
|
|
|
|
import com.gmail.nossr50.locale.LocaleLoader;
|
|
import com.gmail.nossr50.util.StringUtils;
|
|
|
|
import java.util.Locale;
|
|
|
|
public enum SubSkillType {
|
|
/* !! Warning -- Do not let subskills share a name with any existing PrimarySkillType as it will clash with the static import !! */
|
|
|
|
/* ACROBATICS */
|
|
ACROBATICS_DODGE(1),
|
|
ACROBATICS_ROLL,
|
|
|
|
/* ALCHEMY */
|
|
ALCHEMY_CATALYSIS(1),
|
|
ALCHEMY_CONCOCTIONS(8),
|
|
|
|
/* ARCHERY */
|
|
ARCHERY_ARROW_RETRIEVAL(1),
|
|
ARCHERY_DAZE,
|
|
ARCHERY_SKILL_SHOT(20),
|
|
ARCHERY_ARCHERY_LIMIT_BREAK(10),
|
|
|
|
/* Axes */
|
|
AXES_ARMOR_IMPACT(20),
|
|
AXES_AXE_MASTERY(4),
|
|
AXES_AXES_LIMIT_BREAK(10),
|
|
AXES_CRITICAL_STRIKES(1),
|
|
AXES_GREATER_IMPACT(1),
|
|
AXES_SKULL_SPLITTER(1),
|
|
|
|
/* Excavation */
|
|
EXCAVATION_ARCHAEOLOGY(8),
|
|
EXCAVATION_GIGA_DRILL_BREAKER(1),
|
|
|
|
/* Fishing */
|
|
FISHING_FISHERMANS_DIET(5),
|
|
FISHING_ICE_FISHING(1),
|
|
FISHING_MAGIC_HUNTER(1),
|
|
FISHING_MASTER_ANGLER(1),
|
|
FISHING_TREASURE_HUNTER(8),
|
|
FISHING_SHAKE(1),
|
|
|
|
/* Herbalism */
|
|
HERBALISM_DOUBLE_DROPS(1),
|
|
HERBALISM_FARMERS_DIET(5),
|
|
HERBALISM_GREEN_TERRA(1),
|
|
HERBALISM_GREEN_THUMB(4),
|
|
HERBALISM_HYLIAN_LUCK,
|
|
HERBALISM_SHROOM_THUMB,
|
|
|
|
/* Mining */
|
|
MINING_BIGGER_BOMBS(1),
|
|
MINING_BLAST_MINING(8),
|
|
MINING_DEMOLITIONS_EXPERTISE(1),
|
|
MINING_DOUBLE_DROPS(1),
|
|
MINING_SUPER_BREAKER(1),
|
|
|
|
/* Repair */
|
|
REPAIR_ARCANE_FORGING(8),
|
|
REPAIR_REPAIR_MASTERY(1),
|
|
REPAIR_SUPER_REPAIR(1),
|
|
|
|
/* Salvage */
|
|
SALVAGE_SCRAP_COLLECTOR(8),
|
|
SALVAGE_ARCANE_SALVAGE(8),
|
|
|
|
/* Smelting */
|
|
SMELTING_FUEL_EFFICIENCY(3),
|
|
SMELTING_SECOND_SMELT,
|
|
SMELTING_UNDERSTANDING_THE_ART(8),
|
|
|
|
/* Swords */
|
|
SWORDS_COUNTER_ATTACK(1),
|
|
SWORDS_RUPTURE(4),
|
|
SWORDS_SERRATED_STRIKES(1),
|
|
SWORDS_STAB(2),
|
|
SWORDS_SWORDS_LIMIT_BREAK(10),
|
|
|
|
/* Taming */
|
|
TAMING_BEAST_LORE(1),
|
|
TAMING_CALL_OF_THE_WILD(1),
|
|
TAMING_ENVIRONMENTALLY_AWARE(1),
|
|
TAMING_FAST_FOOD_SERVICE(1),
|
|
TAMING_GORE(1),
|
|
TAMING_HOLY_HOUND(1),
|
|
TAMING_PUMMEL(1),
|
|
TAMING_SHARPENED_CLAWS(1),
|
|
TAMING_SHOCK_PROOF(1),
|
|
TAMING_THICK_FUR(1),
|
|
|
|
/* Unarmed */
|
|
UNARMED_ARROW_DEFLECT(1),
|
|
UNARMED_BERSERK(1),
|
|
UNARMED_BLOCK_CRACKER,
|
|
UNARMED_DISARM(1),
|
|
UNARMED_IRON_ARM_STYLE(5),
|
|
UNARMED_IRON_GRIP(1),
|
|
UNARMED_UNARMED_LIMIT_BREAK(10),
|
|
|
|
/* Woodcutting */
|
|
/* WOODCUTTING_BARK_SURGEON(3),*/
|
|
WOODCUTTING_HARVEST_LUMBER(1),
|
|
WOODCUTTING_LEAF_BLOWER(1),
|
|
/* WOODCUTTING_NATURES_BOUNTY(3),
|
|
WOODCUTTING_SPLINTER(3),*/
|
|
WOODCUTTING_TREE_FELLER(1);
|
|
|
|
private final int numRanks;
|
|
//TODO: SuperAbilityType should also contain flags for active by default? Not sure if it should work that way.
|
|
|
|
/**
|
|
* If our SubSkillType has more than 1 rank define it
|
|
* @param numRanks The number of ranks our SubSkillType has
|
|
*/
|
|
SubSkillType(int numRanks)
|
|
{
|
|
this.numRanks = numRanks;
|
|
}
|
|
|
|
SubSkillType()
|
|
{
|
|
this.numRanks = 0;
|
|
}
|
|
|
|
public int getNumRanks()
|
|
{
|
|
return numRanks;
|
|
}
|
|
|
|
/**
|
|
* !!! This relies on the immutable lists in PrimarySkillType being populated !!!
|
|
* If we add skills, those immutable lists need to be updated
|
|
* @return
|
|
*/
|
|
public PrimarySkillType getParentSkill() { return PrimarySkillType.bySecondaryAbility(this); }
|
|
|
|
/**
|
|
* Returns the root address for this skill in the advanced.yml file
|
|
* @return the root address for this skill in advanced.yml
|
|
*/
|
|
public String getAdvConfigAddress() {
|
|
return "Skills." + StringUtils.getCapitalized(getParentSkill().toString()) + "." + getConfigName(toString());
|
|
}
|
|
|
|
/**
|
|
* Returns the root address for this skill in the rankskills.yml file
|
|
* @return the root address for this skill in rankskills.yml
|
|
*/
|
|
public String getRankConfigAddress() {
|
|
return StringUtils.getCapitalized(getParentSkill().toString()) + "." + getConfigName(toString());
|
|
}
|
|
|
|
/**
|
|
* Get the string representation of the permission node for this subskill
|
|
* @return the permission node for this subskill
|
|
*/
|
|
public String getPermissionNodeAddress()
|
|
{
|
|
//TODO: This could be optimized
|
|
return "mcmmo.ability." + getParentSkill().toString().toLowerCase(Locale.ENGLISH) + "." + getConfigName(toString()).toLowerCase(Locale.ENGLISH);
|
|
}
|
|
|
|
/**
|
|
* Returns the name of the skill as it is used in advanced.yml and other config files
|
|
* @return the yaml identifier for this skill
|
|
*/
|
|
private String getConfigName(String subSkillName) {
|
|
/*
|
|
* Our ENUM constants name is something like PREFIX_SUB_SKILL_NAME
|
|
* We need to remove the prefix and then format the subskill to follow the naming conventions of our yaml configs
|
|
*
|
|
* So this method uses this kind of formatting
|
|
* "PARENTSKILL_COOL_SUBSKILL_ULTRA" -> "Cool Subskill Ultra" - > "CoolSubskillUltra"
|
|
*
|
|
*/
|
|
|
|
|
|
/*
|
|
* Find where to begin our substring (after the prefix)
|
|
*/
|
|
String endResult = "";
|
|
int subStringIndex = getSubStringIndex(subSkillName);
|
|
|
|
/*
|
|
* Split the string up so we can capitalize each part
|
|
*/
|
|
String subskillNameWithoutPrefix = subSkillName.substring(subStringIndex);
|
|
if(subskillNameWithoutPrefix.contains("_"))
|
|
{
|
|
String splitStrings[] = subskillNameWithoutPrefix.split("_");
|
|
|
|
for(String string : splitStrings)
|
|
{
|
|
endResult += StringUtils.getCapitalized(string);
|
|
}
|
|
} else {
|
|
endResult += StringUtils.getCapitalized(subskillNameWithoutPrefix);
|
|
}
|
|
|
|
return endResult;
|
|
}
|
|
|
|
public String getWikiName(String subSkillName) {
|
|
/*
|
|
* Find where to begin our substring (after the prefix)
|
|
*/
|
|
String endResult = "";
|
|
int subStringIndex = getSubStringIndex(subSkillName);
|
|
|
|
/*
|
|
* Split the string up so we can capitalize each part
|
|
*/
|
|
String subskillNameWithoutPrefix = subSkillName.substring(subStringIndex);
|
|
if(subskillNameWithoutPrefix.contains("_"))
|
|
{
|
|
String splitStrings[] = subskillNameWithoutPrefix.split("_");
|
|
|
|
for(int i = 0; i < splitStrings.length; i++)
|
|
{
|
|
if(i+1 >= splitStrings.length)
|
|
endResult+=StringUtils.getCapitalized(splitStrings[i]);
|
|
else {
|
|
endResult += StringUtils.getCapitalized(splitStrings[i]);
|
|
endResult += "_";
|
|
}
|
|
}
|
|
} else {
|
|
endResult += StringUtils.getCapitalized(subskillNameWithoutPrefix);
|
|
}
|
|
|
|
return endResult;
|
|
}
|
|
|
|
/**
|
|
* Returns the name of the parent skill from the Locale file
|
|
* @return The parent skill as defined in the locale
|
|
*/
|
|
public String getParentNiceNameLocale()
|
|
{
|
|
return LocaleLoader.getString(StringUtils.getCapitalized(getParentSkill().toString())+".SkillName");
|
|
}
|
|
|
|
/**
|
|
* Gets the "nice" name of the subskill without spaces
|
|
* @param subSkillType target subskill
|
|
* @return the "nice" name without spaces
|
|
*/
|
|
public String getNiceNameNoSpaces(SubSkillType subSkillType)
|
|
{
|
|
return getConfigName(subSkillType.toString());
|
|
}
|
|
|
|
/**
|
|
* This finds the substring index for our SubSkillType's name after its parent name prefix
|
|
* @param subSkillName The name to process
|
|
* @return The value of the substring index after our parent's prefix
|
|
*/
|
|
private int getSubStringIndex(String subSkillName) {
|
|
char[] enumNameCharArray = subSkillName.toCharArray();
|
|
int subStringIndex = 0;
|
|
|
|
//Find where to start our substring for this constants name
|
|
for (int i = 0; i < enumNameCharArray.length; i++) {
|
|
if (enumNameCharArray[i] == '_') {
|
|
subStringIndex = i + 1; //Start the substring after this char
|
|
|
|
break;
|
|
}
|
|
}
|
|
return subStringIndex;
|
|
}
|
|
|
|
public String getLocaleKeyRoot()
|
|
{
|
|
return StringUtils.getCapitalized(getParentSkill().toString())+".SubSkill."+getConfigName(toString());
|
|
}
|
|
|
|
public String getLocaleName()
|
|
{
|
|
return getFromLocaleSubAddress(".Name");
|
|
}
|
|
|
|
public String getLocaleDescription()
|
|
{
|
|
return getFromLocaleSubAddress(".Description");
|
|
}
|
|
|
|
public String getLocaleStatDescription() { return getFromLocaleSubAddress(".Stat"); }
|
|
public String getLocaleKeyStatDescription() { return getLocaleKeyFromSubAddress(".Stat"); }
|
|
|
|
public String getLocaleStatExtraDescription() { return getFromLocaleSubAddress(".Stat.Extra"); }
|
|
public String getLocaleKeyStatExtraDescription() { return getLocaleKeyFromSubAddress(".Stat.Extra"); }
|
|
|
|
public String getLocaleStat(String... vars)
|
|
{
|
|
String statMsg = LocaleLoader.getString("Ability.Generic.Template", (Object[]) vars);
|
|
return statMsg;
|
|
}
|
|
|
|
public String getCustomLocaleStat(String... vars)
|
|
{
|
|
String statMsg = LocaleLoader.getString("Ability.Generic.Template.Custom", (Object[]) vars);
|
|
return statMsg;
|
|
}
|
|
|
|
private String getFromLocaleSubAddress(String s) {
|
|
return LocaleLoader.getString(getLocaleKeyRoot() + s);
|
|
}
|
|
|
|
private String getLocaleKeyFromSubAddress(String s)
|
|
{
|
|
return getLocaleKeyRoot() + s;
|
|
}
|
|
}
|