mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-24 06:06:45 +01:00
Redo XP perks
This commit is contained in:
parent
582a572272
commit
2ce52db72d
@ -8,9 +8,11 @@ import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
|||||||
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.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
import com.gmail.nossr50.util.skills.XPBoostAmount;
|
||||||
import com.gmail.nossr50.util.text.StringUtils;
|
import com.gmail.nossr50.util.text.StringUtils;
|
||||||
import me.clip.placeholderapi.PlaceholderAPIPlugin;
|
import me.clip.placeholderapi.PlaceholderAPIPlugin;
|
||||||
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
@ -151,22 +153,13 @@ public class PapiExpansion extends PlaceholderExpansion {
|
|||||||
final McMMOPlayer user = UserManager.getPlayer(player);
|
final McMMOPlayer user = UserManager.getPlayer(player);
|
||||||
if (user == null) return null;
|
if (user == null) return null;
|
||||||
|
|
||||||
double modifier = 1.0F;
|
double modifier = XPBoostAmount.NONE;
|
||||||
|
for (XPBoostAmount xpBoostAmount : XPBoostAmount.getByHighestMultiplier()) {
|
||||||
if (Permissions.customXpBoost(player, skill))
|
if (xpBoostAmount.hasBoostPermission(player, skill)) {
|
||||||
modifier = ExperienceConfig.getInstance().getCustomXpPerkBoost();
|
modifier = xpBoostAmount.getMultiplier();
|
||||||
else if (Permissions.quadrupleXp(player, skill))
|
break;
|
||||||
modifier = 4;
|
}
|
||||||
else if (Permissions.tripleXp(player, skill))
|
}
|
||||||
modifier = 3;
|
|
||||||
else if (Permissions.doubleAndOneHalfXp(player, skill))
|
|
||||||
modifier = 2.5;
|
|
||||||
else if (Permissions.doubleXp(player, skill))
|
|
||||||
modifier = 2;
|
|
||||||
else if (Permissions.oneAndOneHalfXp(player, skill))
|
|
||||||
modifier = 1.5;
|
|
||||||
else if (Permissions.oneAndOneTenthXp(player, skill))
|
|
||||||
modifier = 1.1;
|
|
||||||
|
|
||||||
return String.valueOf(modifier);
|
return String.valueOf(modifier);
|
||||||
}
|
}
|
||||||
|
@ -113,41 +113,49 @@ public final class Permissions {
|
|||||||
public static boolean lucky(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.lucky." + skill.toString().toLowerCase(Locale.ENGLISH)); }
|
public static boolean lucky(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.lucky." + skill.toString().toLowerCase(Locale.ENGLISH)); }
|
||||||
|
|
||||||
/* XP PERKS */
|
/* XP PERKS */
|
||||||
public static boolean quadrupleXp(Permissible permissible, PrimarySkillType skill) {
|
@Deprecated
|
||||||
|
public static boolean quadrupleXp(Permissible permissible, PrimarySkillType skill) {
|
||||||
return permissible.hasPermission("mcmmo.perks.xp.quadruple.all")
|
return permissible.hasPermission("mcmmo.perks.xp.quadruple.all")
|
||||||
|| permissible.hasPermission("mcmmo.perks.xp.quadruple." + skill.toString().toLowerCase(Locale.ENGLISH));
|
|| permissible.hasPermission("mcmmo.perks.xp.quadruple." + skill.toString().toLowerCase(Locale.ENGLISH));
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean tripleXp(Permissible permissible, PrimarySkillType skill) {
|
|
||||||
return permissible.hasPermission("mcmmo.perks.xp.triple.all")
|
|
||||||
|| permissible.hasPermission("mcmmo.perks.xp.triple." + skill.toString().toLowerCase(Locale.ENGLISH));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean doubleAndOneHalfXp(Permissible permissible, PrimarySkillType skill) {
|
|
||||||
return permissible.hasPermission("mcmmo.perks.xp.150percentboost.all")
|
|
||||||
|| permissible.hasPermission("mcmmo.perks.xp.150percentboost." + skill.toString().toLowerCase(Locale.ENGLISH));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean doubleXp(Permissible permissible, PrimarySkillType skill) {
|
|
||||||
return permissible.hasPermission("mcmmo.perks.xp.double.all")
|
|
||||||
|| permissible.hasPermission("mcmmo.perks.xp.double." + skill.toString().toLowerCase(Locale.ENGLISH));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean oneAndOneHalfXp(Permissible permissible, PrimarySkillType skill) {
|
|
||||||
return permissible.hasPermission("mcmmo.perks.xp.50percentboost.all")
|
|
||||||
|| permissible.hasPermission("mcmmo.perks.xp.50percentboost." + skill.toString().toLowerCase(Locale.ENGLISH));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
public static boolean tripleXp(Permissible permissible, PrimarySkillType skill) {
|
||||||
|
return permissible.hasPermission("mcmmo.perks.xp.triple.all")
|
||||||
|
|| permissible.hasPermission("mcmmo.perks.xp.triple." + skill.toString().toLowerCase(Locale.ENGLISH));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
public static boolean doubleAndOneHalfXp(Permissible permissible, PrimarySkillType skill) {
|
||||||
|
return permissible.hasPermission("mcmmo.perks.xp.150percentboost.all")
|
||||||
|
|| permissible.hasPermission("mcmmo.perks.xp.150percentboost." + skill.toString().toLowerCase(Locale.ENGLISH));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
public static boolean doubleXp(Permissible permissible, PrimarySkillType skill) {
|
||||||
|
return permissible.hasPermission("mcmmo.perks.xp.double.all")
|
||||||
|
|| permissible.hasPermission("mcmmo.perks.xp.double." + skill.toString().toLowerCase(Locale.ENGLISH));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
public static boolean oneAndOneHalfXp(Permissible permissible, PrimarySkillType skill) {
|
||||||
|
return permissible.hasPermission("mcmmo.perks.xp.50percentboost.all")
|
||||||
|
|| permissible.hasPermission("mcmmo.perks.xp.50percentboost." + skill.toString().toLowerCase(Locale.ENGLISH));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public static boolean oneAndAQuarterXp(Permissible permissible, PrimarySkillType skill) {
|
public static boolean oneAndAQuarterXp(Permissible permissible, PrimarySkillType skill) {
|
||||||
return permissible.hasPermission("mcmmo.perks.xp.25percentboost.all")
|
return permissible.hasPermission("mcmmo.perks.xp.25percentboost.all")
|
||||||
|| permissible.hasPermission("mcmmo.perks.xp.25percentboost." + skill.toString().toLowerCase(Locale.ENGLISH));
|
|| permissible.hasPermission("mcmmo.perks.xp.25percentboost." + skill.toString().toLowerCase(Locale.ENGLISH));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean oneAndOneTenthXp(Permissible permissible, PrimarySkillType skill) {
|
@Deprecated
|
||||||
|
public static boolean oneAndOneTenthXp(Permissible permissible, PrimarySkillType skill) {
|
||||||
return permissible.hasPermission("mcmmo.perks.xp.10percentboost.all")
|
return permissible.hasPermission("mcmmo.perks.xp.10percentboost.all")
|
||||||
|| permissible.hasPermission("mcmmo.perks.xp.10percentboost." + skill.toString().toLowerCase(Locale.ENGLISH));
|
|| permissible.hasPermission("mcmmo.perks.xp.10percentboost." + skill.toString().toLowerCase(Locale.ENGLISH));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public static boolean customXpBoost(Permissible permissible, PrimarySkillType skill) {
|
public static boolean customXpBoost(Permissible permissible, PrimarySkillType skill) {
|
||||||
return permissible.hasPermission("mcmmo.perks.xp.customboost.all")
|
return permissible.hasPermission("mcmmo.perks.xp.customboost.all")
|
||||||
|| permissible.hasPermission("mcmmo.perks.xp.customboost." + skill.toString().toLowerCase(Locale.ENGLISH));
|
|| permissible.hasPermission("mcmmo.perks.xp.customboost." + skill.toString().toLowerCase(Locale.ENGLISH));
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.gmail.nossr50.util.skills;
|
package com.gmail.nossr50.util.skills;
|
||||||
|
|
||||||
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
|
||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
import com.gmail.nossr50.events.skills.SkillActivationPerkEvent;
|
import com.gmail.nossr50.events.skills.SkillActivationPerkEvent;
|
||||||
@ -47,28 +46,17 @@ public final class PerksUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static float handleXpPerks(Player player, float xp, PrimarySkillType skill) {
|
public static float handleXpPerks(Player player, float xp, PrimarySkillType skill) {
|
||||||
double modifier = 1.0F;
|
double modifier = XPBoostAmount.NONE;
|
||||||
|
|
||||||
if (Permissions.customXpBoost(player, skill)) {
|
for (XPBoostAmount xpBoostAmount : XPBoostAmount.getByHighestMultiplier()) {
|
||||||
if (UserManager.getPlayer(player) != null && UserManager.getPlayer(player).isDebugMode()) {
|
if (xpBoostAmount.hasBoostPermission(player, skill)) {
|
||||||
player.sendMessage(ChatColor.GOLD + "[DEBUG] " + ChatColor.DARK_GRAY + "XP Perk Multiplier IS CUSTOM! ");
|
modifier = xpBoostAmount.getMultiplier();
|
||||||
|
|
||||||
|
if (xpBoostAmount == XPBoostAmount.CUSTOM && UserManager.getPlayer(player) != null && UserManager.getPlayer(player).isDebugMode()) {
|
||||||
|
player.sendMessage(ChatColor.GOLD + "[DEBUG] " + ChatColor.DARK_GRAY + "XP perk multiplier is custom!");
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
modifier = ExperienceConfig.getInstance().getCustomXpPerkBoost();
|
|
||||||
} else if (Permissions.quadrupleXp(player, skill)) {
|
|
||||||
modifier = 4;
|
|
||||||
} else if (Permissions.tripleXp(player, skill)) {
|
|
||||||
modifier = 3;
|
|
||||||
} else if (Permissions.doubleAndOneHalfXp(player, skill)) {
|
|
||||||
modifier = 2.5;
|
|
||||||
} else if (Permissions.doubleXp(player, skill)) {
|
|
||||||
modifier = 2;
|
|
||||||
} else if (Permissions.oneAndOneHalfXp(player, skill)) {
|
|
||||||
modifier = 1.5;
|
|
||||||
} else if (Permissions.oneAndAQuarterXp(player, skill)) {
|
|
||||||
modifier = 1.25;
|
|
||||||
} else if (Permissions.oneAndOneTenthXp(player, skill)) {
|
|
||||||
modifier = 1.1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
float modifiedXP = (float) (xp * modifier);
|
float modifiedXP = (float) (xp * modifier);
|
||||||
|
@ -0,0 +1,94 @@
|
|||||||
|
package com.gmail.nossr50.util.skills;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
||||||
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
|
import org.bukkit.permissions.Permissible;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public final class XPBoostAmount {
|
||||||
|
|
||||||
|
public static final double NONE = 1.0;
|
||||||
|
|
||||||
|
public static final XPBoostAmount QUADRUPLE = new XPBoostAmount(4.0, "mcmmo.perks.xp.quadruple.%s");
|
||||||
|
public static final XPBoostAmount TRIPLE = new XPBoostAmount(3.0, "mcmmo.perks.xp.triple.%s");
|
||||||
|
public static final XPBoostAmount DOUBLE_AND_ONE_HALF = new XPBoostAmount(2.5, "mcmmo.perks.xp.150percentboost.%s");
|
||||||
|
public static final XPBoostAmount DOUBLE = new XPBoostAmount(2.0, "mcmmo.perks.xp.double.%s");
|
||||||
|
public static final XPBoostAmount ONE_AND_ONE_HALF = new XPBoostAmount(1.5, "mcmmo.perks.xp.50percentboost.%s");
|
||||||
|
public static final XPBoostAmount ONE_AND_ONE_QUARTER = new XPBoostAmount(1.25, "mcmmo.perks.xp.25percentboost.%s");
|
||||||
|
public static final XPBoostAmount ONE_AND_ONE_TENTH = new XPBoostAmount(1.1, "mcmmo.perks.xp.10percentboost.%s");
|
||||||
|
public static final XPBoostAmount CUSTOM = new XPBoostAmount(ExperienceConfig.getInstance().getCustomXpPerkBoost(), "mcmmo.perks.xp.customboost.%s");
|
||||||
|
|
||||||
|
|
||||||
|
private String FIELD_NAME;
|
||||||
|
private final double multiplier;
|
||||||
|
private final String permissionNode;
|
||||||
|
|
||||||
|
public XPBoostAmount(double multiplier, String permissionNode) {
|
||||||
|
this.multiplier = multiplier;
|
||||||
|
this.permissionNode = permissionNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getMultiplier() {
|
||||||
|
return multiplier;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPermissionNode() {
|
||||||
|
return permissionNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public boolean hasBoostPermission(Permissible permissible, PrimarySkillType skill) {
|
||||||
|
return permissible.hasPermission(String.format(permissionNode, "all")) ||
|
||||||
|
permissible.hasPermission(String.format(permissionNode, skill.toString().toLowerCase(Locale.ENGLISH)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Make this class work like an enum
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return FIELD_NAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String name() {
|
||||||
|
return FIELD_NAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final Map<String, XPBoostAmount> VALUES = new HashMap<>();
|
||||||
|
public static final List<XPBoostAmount> VALUES_SORTED_BY_MULTIPLIER = new ArrayList<>(); // Faster to just sort once since mcMMO doesn't have any reloading anyway
|
||||||
|
|
||||||
|
static {
|
||||||
|
for (Field field : XPBoostAmount.class.getDeclaredFields()) {
|
||||||
|
if (field.getType() == XPBoostAmount.class) {
|
||||||
|
try {
|
||||||
|
XPBoostAmount itemType = (XPBoostAmount) field.get(null);
|
||||||
|
itemType.FIELD_NAME = field.getName();
|
||||||
|
VALUES.put(field.getName(), itemType);
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
VALUES_SORTED_BY_MULTIPLIER.addAll(VALUES.values().stream().sorted((a, b) -> Double.compare(b.getMultiplier(), a.getMultiplier())).toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static XPBoostAmount valueOf(String name) {
|
||||||
|
return VALUES.get(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<XPBoostAmount> values() {
|
||||||
|
return VALUES.values().stream().toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<XPBoostAmount> getByHighestMultiplier() {
|
||||||
|
return VALUES_SORTED_BY_MULTIPLIER;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user