| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529 |
- package com.gmail.nossr50.config.experience;
- import static com.gmail.nossr50.util.text.ConfigStringUtils.getConfigEntityTypeString;
- import static com.gmail.nossr50.util.text.ConfigStringUtils.getMaterialConfigString;
- import com.gmail.nossr50.config.BukkitConfig;
- import com.gmail.nossr50.datatypes.experience.FormulaType;
- import com.gmail.nossr50.datatypes.skills.MaterialType;
- import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
- import com.gmail.nossr50.datatypes.skills.alchemy.PotionStage;
- import com.gmail.nossr50.util.text.StringUtils;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import org.bukkit.Material;
- import org.bukkit.block.Block;
- import org.bukkit.block.BlockState;
- import org.bukkit.block.data.BlockData;
- import org.bukkit.boss.BarColor;
- import org.bukkit.boss.BarStyle;
- import org.bukkit.entity.EntityType;
- public class ExperienceConfig extends BukkitConfig {
- private static ExperienceConfig instance;
- final private Map<PrimarySkillType, Map<Material, Integer>> blockExperienceMap = new HashMap<>();
- private ExperienceConfig() {
- super("experience.yml");
- validate();
- }
- public static ExperienceConfig getInstance() {
- if (instance == null) {
- instance = new ExperienceConfig();
- for (PrimarySkillType skill : PrimarySkillType.values()) {
- final Map<Material, Integer> experienceMap = new HashMap<>();
- instance.blockExperienceMap.put(skill, experienceMap);
- for (Material material : Material.values()) {
- int xp = instance.getConfigXp(skill, material);
- if (xp > 0) {
- experienceMap.put(material, xp);
- }
- }
- }
- }
- return instance;
- }
- @Override
- protected void loadKeys() {
- }
- @Override
- protected boolean validateKeys() {
- List<String> reason = new ArrayList<>();
- /*
- * FORMULA SETTINGS
- */
- /* Curve values */
- if (getMultiplier(FormulaType.EXPONENTIAL) <= 0) {
- reason.add(
- "Experience_Formula.Exponential_Values.multiplier should be greater than 0!");
- }
- if (getMultiplier(FormulaType.LINEAR) <= 0) {
- reason.add("Experience_Formula.Linear_Values.multiplier should be greater than 0!");
- }
- if (getExponent(FormulaType.EXPONENTIAL) <= 0) {
- reason.add("Experience_Formula.Exponential_Values.exponent should be greater than 0!");
- }
- /* Global modifier */
- if (getExperienceGainsGlobalMultiplier() <= 0) {
- reason.add("Experience_Formula.Multiplier.Global should be greater than 0!");
- }
- /* PVP modifier */
- if (getPlayerVersusPlayerXP() < 0) {
- reason.add("Experience_Formula.Multiplier.PVP should be at least 0!");
- }
- /* Spawned Mob modifier */
- if (getSpawnedMobXpMultiplier() < 0) {
- reason.add("Experience_Formula.Mobspawners.Multiplier should be at least 0!");
- }
- /* Bred Mob modifier */
- if (getBredMobXpMultiplier() < 0) {
- reason.add("Experience_Formula.Breeding.Multiplier should be at least 0!");
- }
- /* Conversion */
- if (getExpModifier() <= 0) {
- reason.add("Conversion.Exp_Modifier should be greater than 0!");
- }
- /*
- * XP SETTINGS
- */
- /* Alchemy */
- for (PotionStage potionStage : PotionStage.values()) {
- if (getPotionXP(potionStage) < 0) {
- reason.add(
- "Experience_Values.Alchemy.Potion_Stage_" + potionStage.toNumerical()
- + " should be at least 0!");
- }
- }
- /* Archery */
- if (getArcheryDistanceMultiplier() < 0) {
- reason.add("Experience_Values.Archery.Distance_Multiplier should be at least 0!");
- }
- /* Combat XP Multipliers */
- if (getAnimalsXP() < 0) {
- reason.add("Experience_Values.Combat.Multiplier.Animals should be at least 0!");
- }
- if (getDodgeXPModifier() < 0) {
- reason.add("Skills.Acrobatics.Dodge_XP_Modifier should be at least 0!");
- }
- if (getRollXPModifier() < 0) {
- reason.add("Skills.Acrobatics.Roll_XP_Modifier should be at least 0!");
- }
- if (getFallXPModifier() < 0) {
- reason.add("Skills.Acrobatics.Fall_XP_Modifier should be at least 0!");
- }
- /* Fishing */
- // TODO: Add validation for each fish type once enum is available.
- if (getFishingShakeXP() <= 0) {
- reason.add("Experience_Values.Fishing.Shake should be greater than 0!");
- }
- /* Repair */
- if (getRepairXPBase() <= 0) {
- reason.add("Experience_Values.Repair.Base should be greater than 0!");
- }
- /* Taming */
- if (getTamingXP(EntityType.WOLF) <= 0) {
- reason.add("Experience_Values.Taming.Animal_Taming.Wolf should be greater than 0!");
- }
- if (getTamingXP(EntityType.OCELOT) <= 0) {
- reason.add("Experience_Values.Taming.Animal_Taming.Ocelot should be greater than 0!");
- }
- return noErrorsInConfig(reason);
- }
- public boolean isEarlyGameBoostEnabled() {
- return config.getBoolean("EarlyGameBoost.Enabled", true);
- }
- /*
- * FORMULA SETTINGS
- */
- /* EXPLOIT TOGGLES */
- public boolean isSnowExploitPrevented() {
- return config.getBoolean("ExploitFix.SnowGolemExcavation", true);
- }
- public boolean isEndermanEndermiteFarmingPrevented() {
- return config.getBoolean("ExploitFix.EndermanEndermiteFarms", true);
- }
- public boolean isPistonCheatingPrevented() {
- return config.getBoolean("ExploitFix.PistonCheating", true);
- }
- public boolean isPistonExploitPrevented() {
- return config.getBoolean("ExploitFix.Pistons", false);
- }
- public boolean allowUnsafeEnchantments() {
- return config.getBoolean("ExploitFix.UnsafeEnchantments", false);
- }
- public boolean isCOTWBreedingPrevented() {
- return config.getBoolean("ExploitFix.COTWBreeding", true);
- }
- public boolean isNPCInteractionPrevented() {
- return config.getBoolean("ExploitFix.PreventPluginNPCInteraction", true);
- }
- public boolean isArmorStandInteractionPrevented() {
- return config.getBoolean("ExploitFix.PreventArmorStandInteraction", true);
- }
- public boolean isFishingExploitingPrevented() {
- return config.getBoolean("ExploitFix.Fishing", true);
- }
- public int getFishingExploitingOptionMoveRange() {
- return config.getInt("Fishing_ExploitFix_Options.MoveRange", 3);
- }
- public int getFishingExploitingOptionOverFishLimit() {
- return config.getInt("Fishing_ExploitFix_Options.OverFishLimit", 10);
- }
- public boolean isAcrobaticsExploitingPrevented() {
- return config.getBoolean("ExploitFix.Acrobatics", true);
- }
- public boolean isTreeFellerXPReduced() {
- return config.getBoolean("ExploitFix.TreeFellerReducedXP", true);
- }
- /* Curve settings */
- public FormulaType getFormulaType() {
- return FormulaType.getFormulaType(config.getString("Experience_Formula.Curve", "LINEAR"));
- }
- public boolean getCumulativeCurveEnabled() {
- return config.getBoolean("Experience_Formula.Cumulative_Curve", false);
- }
- /* Curve values */
- public double getMultiplier(FormulaType type) {
- double def = type == FormulaType.LINEAR ? 20D : 0.1D;
- return config.getDouble(
- "Experience_Formula." + StringUtils.getCapitalized(type.toString())
- + "_Values.multiplier", def);
- }
- public int getBase(FormulaType type) {
- int def = type == FormulaType.LINEAR ? 1020 : 2000;
- return config.getInt("Experience_Formula." + StringUtils.getCapitalized(type.toString())
- + "_Values.base", def);
- }
- public double getExponent(FormulaType type) {
- return config.getDouble(
- "Experience_Formula." + StringUtils.getCapitalized(type.toString())
- + "_Values.exponent");
- }
- /* Global modifier */
- public double getExperienceGainsGlobalMultiplier() {
- return config.getDouble("Experience_Formula.Multiplier.Global", 1.0);
- }
- public void setExperienceGainsGlobalMultiplier(double value) {
- config.set("Experience_Formula.Multiplier.Global", value);
- }
- /* PVP modifier */
- public double getPlayerVersusPlayerXP() {
- return config.getDouble("Experience_Formula.Multiplier.PVP", 1.0);
- }
- /* Spawned Mob modifier */
- public double getSpawnedMobXpMultiplier() {
- return config.getDouble("Experience_Formula.Mobspawners.Multiplier", 0.0);
- }
- public double getEggXpMultiplier() {
- return config.getDouble("Experience_Formula.Eggs.Multiplier", 0.0);
- }
- public double getTamedMobXpMultiplier() {
- return config.getDouble("Experience_Formula.Player_Tamed.Multiplier", 0.0);
- }
- public double getNetherPortalXpMultiplier() {
- return config.getDouble("Experience_Formula.Nether_Portal.Multiplier", 0.0);
- }
- public double getBredMobXpMultiplier() {
- return config.getDouble("Experience_Formula.Breeding.Multiplier", 1.0);
- }
- /* Skill modifiers */
- public double getFormulaSkillModifier(PrimarySkillType skill) {
- return config.getDouble(
- "Experience_Formula.Skill_Multiplier." + StringUtils.getCapitalized(
- skill.toString()),
- 1D);
- }
- /* Custom XP perk */
- public double getCustomXpPerkBoost() {
- return config.getDouble("Experience_Formula.Custom_XP_Perk.Boost", 1.25);
- }
- /* Diminished Returns */
- public float getDiminishedReturnsCap() {
- return (float) config.getDouble("Dimished_Returns.Guaranteed_Minimum_Percentage", 0.05D);
- }
- public boolean getDiminishedReturnsEnabled() {
- return config.getBoolean("Diminished_Returns.Enabled", false);
- }
- public int getDiminishedReturnsThreshold(PrimarySkillType skill) {
- return config.getInt(
- "Diminished_Returns.Threshold." + StringUtils.getCapitalized(skill.toString()),
- 20000);
- }
- public int getDiminishedReturnsTimeInterval() {
- return config.getInt("Diminished_Returns.Time_Interval", 10);
- }
- /* Conversion */
- public double getExpModifier() {
- return config.getDouble("Conversion.Exp_Modifier", 1);
- }
- /*
- * XP SETTINGS
- */
- /* General Settings */
- public boolean getExperienceGainsPlayerVersusPlayerEnabled() {
- return config.getBoolean("Experience_Values.PVP.Rewards", true);
- }
- /* Combat XP Multipliers */
- public double getCombatXP(String entity) {
- return config.getDouble("Experience_Values.Combat.Multiplier." + entity);
- }
- public double getCombatXP(EntityType entity) {
- return config.getDouble(
- "Experience_Values.Combat.Multiplier." + getConfigEntityTypeString(entity).replace(
- " ", "_"));
- }
- public double getAnimalsXP(EntityType entity) {
- return config.getDouble(
- "Experience_Values.Combat.Multiplier." + getConfigEntityTypeString(entity).replace(
- " ", "_"),
- getAnimalsXP());
- }
- public double getAnimalsXP() {
- return config.getDouble("Experience_Values.Combat.Multiplier.Animals", 1.0);
- }
- public boolean hasCombatXP(EntityType entity) {
- return config.contains(
- "Experience_Values.Combat.Multiplier." + getConfigEntityTypeString(entity).replace(
- " ", "_"));
- }
- /* Materials */
- private int getConfigXp(PrimarySkillType skill, Material material) {
- // prevents exploit
- if (material == Material.LILY_PAD) {
- return 0;
- }
- final String baseString =
- "Experience_Values." + StringUtils.getCapitalized(skill.toString()) + ".";
- final String configPath = baseString + getMaterialConfigString(material);
- return config.getInt(configPath, 0);
- }
- public int getXp(PrimarySkillType skill, Material material) {
- return blockExperienceMap.get(skill).getOrDefault(material, 0);
- }
- public int getXp(PrimarySkillType skill, BlockState blockState) {
- return getXp(skill, blockState.getType());
- }
- public int getXp(PrimarySkillType skill, Block block) {
- Material material = block.getType();
- return getXp(skill, material);
- }
- public int getXp(PrimarySkillType skill, BlockData data) {
- return getXp(skill, data.getMaterial());
- }
- public boolean doesBlockGiveSkillXP(PrimarySkillType skill, Material material) {
- return getXp(skill, material) > 0;
- }
- @Deprecated(forRemoval = true, since = "2.2.024")
- public boolean doesBlockGiveSkillXP(PrimarySkillType skill, BlockData data) {
- return getXp(skill, data) > 0;
- }
- /*
- * Experience Bar Stuff
- */
- public boolean isPartyExperienceBarsEnabled() {
- return config.getBoolean("Experience_Bars.Update.Party", true);
- }
- public boolean isPassiveGainsExperienceBarsEnabled() {
- return config.getBoolean("Experience_Bars.Update.Passive", true);
- }
- public boolean getDoExperienceBarsAlwaysUpdateTitle() {
- return config.getBoolean(
- "Experience_Bars.ThisMayCauseLag.AlwaysUpdateTitlesWhenXPIsGained.Enable",
- false) || getAddExtraDetails();
- }
- public boolean getAddExtraDetails() {
- return config.getBoolean(
- "Experience_Bars.ThisMayCauseLag.AlwaysUpdateTitlesWhenXPIsGained.ExtraDetails",
- false);
- }
- public boolean useCombatHPCeiling() {
- return config.getBoolean("ExploitFix.Combat.XPCeiling.Enabled", true);
- }
- public int getCombatHPCeiling() {
- return config.getInt("ExploitFix.Combat.XPCeiling.HP_Modifier_Limit", 100);
- }
- public boolean isExperienceBarsEnabled() {
- return config.getBoolean("Experience_Bars.Enable", true);
- }
- public boolean isExperienceBarEnabled(PrimarySkillType primarySkillType) {
- return config.getBoolean(
- "Experience_Bars." + StringUtils.getCapitalized(primarySkillType.toString())
- + ".Enable", true);
- }
- public BarColor getExperienceBarColor(PrimarySkillType primarySkillType) {
- String colorValueFromConfig = config.getString(
- "Experience_Bars." + StringUtils.getCapitalized(primarySkillType.toString())
- + ".Color");
- for (BarColor barColor : BarColor.values()) {
- if (barColor.toString().equalsIgnoreCase(colorValueFromConfig)) {
- return barColor;
- }
- }
- //In case the value is invalid
- return BarColor.WHITE;
- }
- public BarStyle getExperienceBarStyle(PrimarySkillType primarySkillType) {
- String colorValueFromConfig = config.getString(
- "Experience_Bars." + StringUtils.getCapitalized(primarySkillType.toString())
- + ".BarStyle");
- for (BarStyle barStyle : BarStyle.values()) {
- if (barStyle.toString().equalsIgnoreCase(colorValueFromConfig)) {
- return barStyle;
- }
- }
- //In case the value is invalid
- return BarStyle.SOLID;
- }
- /* Acrobatics */
- public int getDodgeXPModifier() {
- return config.getInt("Experience_Values.Acrobatics.Dodge", 120);
- }
- public int getRollXPModifier() {
- return config.getInt("Experience_Values.Acrobatics.Roll", 80);
- }
- public int getFallXPModifier() {
- return config.getInt("Experience_Values.Acrobatics.Fall", 120);
- }
- public double getFeatherFallXPModifier() {
- return config.getDouble("Experience_Values.Acrobatics.FeatherFall_Multiplier", 2.0);
- }
- /* Alchemy */
- public double getPotionXP(PotionStage stage) {
- return config.getDouble(
- "Experience_Values.Alchemy.Potion_Brewing.Stage_" + stage.toNumerical(), 10D);
- }
- /* Archery */
- public double getArcheryDistanceMultiplier() {
- return config.getDouble("Experience_Values.Archery.Distance_Multiplier", 0.025);
- }
- public int getFishingShakeXP() {
- return config.getInt("Experience_Values.Fishing.Shake", 50);
- }
- /* Repair */
- public double getRepairXPBase() {
- return config.getDouble("Experience_Values.Repair.Base", 1000.0);
- }
- public double getRepairXP(MaterialType repairMaterialType) {
- return config.getDouble(
- "Experience_Values.Repair." + StringUtils.getCapitalized(
- repairMaterialType.toString()));
- }
- /* Taming */
- public int getTamingXP(EntityType type) {
- return config.getInt(
- "Experience_Values.Taming.Animal_Taming." + getConfigEntityTypeString(type));
- }
- public boolean preventStoneLavaFarming() {
- return config.getBoolean("ExploitFix.LavaStoneAndCobbleFarming", true);
- }
- public boolean limitXPOnTallPlants() {
- return config.getBoolean("ExploitFix.LimitTallPlantFarming", true);
- }
- }
|