Wire up XP formula settings

This commit is contained in:
nossr50 2019-04-24 22:44:24 -07:00
parent 989537366a
commit dc758a6dfc
12 changed files with 61 additions and 53 deletions

View File

@ -2,7 +2,6 @@ package com.gmail.nossr50.config.experience;
import com.gmail.nossr50.config.ConfigConstants; import com.gmail.nossr50.config.ConfigConstants;
import com.gmail.nossr50.config.ConfigValidated; import com.gmail.nossr50.config.ConfigValidated;
import com.gmail.nossr50.datatypes.experience.FormulaType;
import com.gmail.nossr50.datatypes.skills.ItemMaterialCategory; import com.gmail.nossr50.datatypes.skills.ItemMaterialCategory;
import com.gmail.nossr50.datatypes.skills.PrimarySkillType; import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.mcMMO;
@ -119,19 +118,6 @@ public class ExperienceConfig extends ConfigValidated {
* FORMULA SETTINGS * 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 */ /* Global modifier */
if (getExperienceGainsGlobalMultiplier() <= 0) { if (getExperienceGainsGlobalMultiplier() <= 0) {
reason.add(EXPERIENCE_FORMULA + "." + MULTIPLIER + "." + GLOBAL + " should be greater than 0!"); reason.add(EXPERIENCE_FORMULA + "." + MULTIPLIER + "." + GLOBAL + " should be greater than 0!");
@ -194,19 +180,6 @@ public class ExperienceConfig extends ConfigValidated {
return getBooleanValue(EXPERIENCE_FORMULA, CUMULATIVE + CURVE); return getBooleanValue(EXPERIENCE_FORMULA, CUMULATIVE + CURVE);
} }
/* Curve values */
public double getMultiplier(FormulaType type) {
return getDoubleValue(EXPERIENCE_FORMULA, StringUtils.getCapitalized(type.toString()) + VALUES, MULTIPLIER);
}
public int getBase(FormulaType type) {
return getIntValue(EXPERIENCE_FORMULA, StringUtils.getCapitalized(type.toString()) + VALUES, BASE);
}
public double getExponent(FormulaType type) {
return getDoubleValue(EXPERIENCE_FORMULA, StringUtils.getCapitalized(type.toString()) + VALUES, EXPONENT);
}
/* Global modifier */ /* Global modifier */
public double getExperienceGainsGlobalMultiplier() { public double getExperienceGainsGlobalMultiplier() {
return getDoubleValue(EXPERIENCE_FORMULA, MULTIPLIER, GLOBAL); return getDoubleValue(EXPERIENCE_FORMULA, MULTIPLIER, GLOBAL);

View File

@ -31,6 +31,32 @@ public class ConfigExperienceFormula {
return configExperienceFormulaExponential; return configExperienceFormulaExponential;
} }
public double getMultiplier(FormulaType formulaType)
{
switch(formulaType)
{
case LINEAR:
return getLinearMultiplier();
case EXPONENTIAL:
return getExponentialMultiplier();
default:
throw new IncorrectFormulaException(formulaType);
}
}
public int getBase(FormulaType formulaType)
{
switch(formulaType)
{
case LINEAR:
return getLinearBaseModifier();
case EXPONENTIAL:
return getExponentialBaseModifier();
default:
throw new IncorrectFormulaException(formulaType);
}
}
public int getExponentialBaseModifier() { public int getExponentialBaseModifier() {
return configExperienceFormulaExponential.getExponentialBaseModifier(); return configExperienceFormulaExponential.getExponentialBaseModifier();
} }

View File

@ -10,16 +10,13 @@ public class ConfigExperienceFormulaExponential {
private static final double MULTIPLIER_DEFAULT = 0.1; private static final double MULTIPLIER_DEFAULT = 0.1;
private static final double EXPONENT_DEFAULT = 1.80; private static final double EXPONENT_DEFAULT = 1.80;
@Setting(value = "Base-Amount", comment = "" + @Setting(value = "Base-Amount", comment = "Default value: "+BASE_DEFAULT)
"\nDefault value: "+BASE_DEFAULT)
private int baseModifier = BASE_DEFAULT; private int baseModifier = BASE_DEFAULT;
@Setting(value = "Multiplier", comment = "" + @Setting(value = "Multiplier", comment = "Default value: "+MULTIPLIER_DEFAULT)
"\nDefault value: "+MULTIPLIER_DEFAULT)
private double multiplier = MULTIPLIER_DEFAULT; private double multiplier = MULTIPLIER_DEFAULT;
@Setting(value = "Exponent", comment = "" + @Setting(value = "Exponent", comment = "Default value: "+EXPONENT_DEFAULT)
"\nDefault value: "+EXPONENT_DEFAULT)
private double exponent = EXPONENT_DEFAULT; private double exponent = EXPONENT_DEFAULT;
public int getExponentialBaseModifier() { public int getExponentialBaseModifier() {

View File

@ -9,12 +9,10 @@ public class ConfigExperienceFormulaLinear {
private static final int BASE_DEFAULT = 1020; private static final int BASE_DEFAULT = 1020;
private static final double MULTIPLIER_DEFAULT = 20.0D; private static final double MULTIPLIER_DEFAULT = 20.0D;
@Setting(value = "Base-Amount", comment = "The formula for Linear adds the base amount without any modifications to the level requirement for every level." + @Setting(value = "Base-Amount", comment = "Default value: "+BASE_DEFAULT)
"\nDefault value: "+BASE_DEFAULT)
private int baseModifier = BASE_DEFAULT; private int baseModifier = BASE_DEFAULT;
@Setting(value = "Multiplier", comment = "The multiplier is multiplied against the players level and then added to the base amount to determine the amount of XP to the next level" + @Setting(value = "Multiplier", comment = "Default value: "+MULTIPLIER_DEFAULT)
"\nDefault value: "+MULTIPLIER_DEFAULT)
private double multiplier = MULTIPLIER_DEFAULT; private double multiplier = MULTIPLIER_DEFAULT;
public int getLinearBaseModifier() { public int getLinearBaseModifier() {

View File

@ -43,6 +43,10 @@ public class ConfigLeveling {
return configSectionLevelingGeneral.getConfigSectionLevelScaling(); return configSectionLevelingGeneral.getConfigSectionLevelScaling();
} }
public ConfigExperienceFormula getConfigExperienceFormula() {
return configExperienceFormula;
}
public FormulaType getFormulaType() { public FormulaType getFormulaType() {
return configExperienceFormula.getFormulaType(); return configExperienceFormula.getFormulaType();
} }
@ -59,6 +63,14 @@ public class ConfigLeveling {
return configExperienceFormula.getConfigExperienceFormulaExponential(); return configExperienceFormula.getConfigExperienceFormulaExponential();
} }
public int getBase(FormulaType formulaType) {
return configExperienceFormula.getBase(formulaType);
}
public double getMultiplier(FormulaType formulaType) {
return configExperienceFormula.getMultiplier(formulaType);
}
public int getExponentialBaseModifier() { public int getExponentialBaseModifier() {
return configExperienceFormula.getExponentialBaseModifier(); return configExperienceFormula.getExponentialBaseModifier();
} }

View File

@ -1,6 +1,5 @@
package com.gmail.nossr50.config.hocon.playerleveling; package com.gmail.nossr50.config.hocon.playerleveling;
import com.gmail.nossr50.datatypes.experience.FormulaType;
import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.Setting;
import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;

View File

@ -0,0 +1,11 @@
package com.gmail.nossr50.config.hocon.playerleveling;
import com.gmail.nossr50.datatypes.experience.FormulaType;
public class IncorrectFormulaException extends RuntimeException {
public IncorrectFormulaException(FormulaType formulaType) {
super("Formula not recognized: " + formulaType.toString());
}
}

View File

@ -1,8 +1,6 @@
package com.gmail.nossr50.datatypes.party; package com.gmail.nossr50.datatypes.party;
import com.gmail.nossr50.config.MainConfig; import com.gmail.nossr50.config.MainConfig;
import com.gmail.nossr50.config.experience.ExperienceConfig;
import com.gmail.nossr50.datatypes.experience.FormulaType;
import com.gmail.nossr50.datatypes.player.McMMOPlayer; import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.mcMMO;

View File

@ -7,7 +7,6 @@ import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable; import org.bukkit.event.Cancellable;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerEvent;
/** /**
* This event is sent for when mcMMO informs a player about various important information * This event is sent for when mcMMO informs a player about various important information

View File

@ -45,13 +45,10 @@ import org.bukkit.event.HandlerList;
import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
public class mcMMO extends JavaPlugin { public class mcMMO extends JavaPlugin {
public static final String COMPATIBLE_SERVER_SOFTWARE = "Spigot, Paper"; public static final String COMPATIBLE_SERVER_SOFTWARE = "Spigot, Paper";

View File

@ -1,6 +1,5 @@
package com.gmail.nossr50.util.experience; package com.gmail.nossr50.util.experience;
import com.gmail.nossr50.config.experience.ExperienceConfig;
import com.gmail.nossr50.datatypes.experience.FormulaType; import com.gmail.nossr50.datatypes.experience.FormulaType;
import com.gmail.nossr50.datatypes.skills.PrimarySkillType; import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.mcMMO;
@ -130,9 +129,9 @@ public class FormulaManager {
formulaType = FormulaType.LINEAR; formulaType = FormulaType.LINEAR;
} }
int base = ExperienceConfig.getInstance().getBase(formulaType); int base = mcMMO.getConfigManager().getConfigLeveling().getBase(formulaType);
double multiplier = ExperienceConfig.getInstance().getMultiplier(formulaType); double multiplier = mcMMO.getConfigManager().getConfigLeveling().getMultiplier(formulaType);
double exponent = ExperienceConfig.getInstance().getExponent(formulaType); double exponent = mcMMO.getConfigManager().getConfigLeveling().getExponentialExponent();
switch (formulaType) { switch (formulaType) {
case LINEAR: case LINEAR:
@ -173,9 +172,9 @@ public class FormulaManager {
* Retro mode XP requirements are the default requirements * Retro mode XP requirements are the default requirements
* Standard mode XP requirements are multiplied by a factor of 10 * Standard mode XP requirements are multiplied by a factor of 10
*/ */
int base = ExperienceConfig.getInstance().getBase(FormulaType.EXPONENTIAL); int base = mcMMO.getConfigManager().getConfigLeveling().getBase(FormulaType.EXPONENTIAL);
double multiplier = ExperienceConfig.getInstance().getMultiplier(FormulaType.EXPONENTIAL); double multiplier = mcMMO.getConfigManager().getConfigLeveling().getMultiplier(FormulaType.EXPONENTIAL);
double exponent = ExperienceConfig.getInstance().getExponent(FormulaType.EXPONENTIAL); double exponent = mcMMO.getConfigManager().getConfigLeveling().getExponentialExponent();
if (!experienceNeededExponential.containsKey(level)) { if (!experienceNeededExponential.containsKey(level)) {
experience = (int) Math.floor((multiplier * Math.pow(level, exponent) + base)); experience = (int) Math.floor((multiplier * Math.pow(level, exponent) + base));

View File

@ -1,6 +1,5 @@
package com.gmail.nossr50.util.player; package com.gmail.nossr50.util.player;
import com.gmail.nossr50.api.exceptions.McMMOPlayerNotFoundException;
import com.gmail.nossr50.datatypes.player.McMMOPlayer; import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.mcMMO;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;