From 568d6da7958b6db39087463bb228b76b6d6ba62d Mon Sep 17 00:00:00 2001 From: Indyuce Date: Sat, 2 Jan 2021 00:22:47 +0100 Subject: [PATCH] Added new options to disable profession exp holos --- .../api/event/PlayerExperienceGainEvent.java | 6 +- .../api/experience/PlayerProfessions.java | 17 +++--- .../mmocore/api/experience/Profession.java | 60 ++++++++++++++----- .../source/type/ExperienceSource.java | 34 +++++++++-- .../mmocore/api/player/PlayerData.java | 29 ++++++--- .../rpg/admin/ExperienceCommandTreeNode.java | 14 +++-- .../comp/holograms/HologramSupport.java | 1 + .../listener/profession/FishingListener.java | 18 +++--- src/main/resources/config.yml | 9 +-- 9 files changed, 128 insertions(+), 60 deletions(-) diff --git a/src/main/java/net/Indyuce/mmocore/api/event/PlayerExperienceGainEvent.java b/src/main/java/net/Indyuce/mmocore/api/event/PlayerExperienceGainEvent.java index 1d3e04cf..bdc6a9a1 100644 --- a/src/main/java/net/Indyuce/mmocore/api/event/PlayerExperienceGainEvent.java +++ b/src/main/java/net/Indyuce/mmocore/api/event/PlayerExperienceGainEvent.java @@ -1,5 +1,7 @@ package net.Indyuce.mmocore.api.event; +import javax.annotation.Nullable; + import org.bukkit.event.Cancellable; import org.bukkit.event.HandlerList; @@ -21,7 +23,7 @@ public class PlayerExperienceGainEvent extends PlayerDataEvent implements Cancel this(player, null, experience, source); } - public PlayerExperienceGainEvent(PlayerData player, Profession profession, int experience, EXPSource source) { + public PlayerExperienceGainEvent(PlayerData player, @Nullable Profession profession, int experience, EXPSource source) { super(player); this.profession = profession; @@ -58,7 +60,7 @@ public class PlayerExperienceGainEvent extends PlayerDataEvent implements Cancel public EXPSource getSource() { return source; } - + @Override public HandlerList getHandlers() { return handlers; diff --git a/src/main/java/net/Indyuce/mmocore/api/experience/PlayerProfessions.java b/src/main/java/net/Indyuce/mmocore/api/experience/PlayerProfessions.java index f00152de..59a2830b 100644 --- a/src/main/java/net/Indyuce/mmocore/api/experience/PlayerProfessions.java +++ b/src/main/java/net/Indyuce/mmocore/api/experience/PlayerProfessions.java @@ -4,8 +4,8 @@ import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; -import net.Indyuce.mmocore.manager.SoundManager; -import net.mmogroup.mmolib.MMOLib; +import javax.annotation.Nullable; + import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -22,6 +22,8 @@ import net.Indyuce.mmocore.api.event.PlayerExperienceGainEvent; import net.Indyuce.mmocore.api.event.PlayerLevelUpEvent; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.util.math.particle.SmallParticleEffect; +import net.Indyuce.mmocore.manager.SoundManager; +import net.mmogroup.mmolib.MMOLib; public class PlayerProfessions { private final Map exp = new HashMap<>(); @@ -121,14 +123,14 @@ public class PlayerProfessions { } public void giveExperience(Profession profession, int value, EXPSource source) { - giveExperience(profession, value, null, source); + giveExperience(profession, value, source, null); } public boolean hasReachedMaxLevel(Profession profession) { return profession.hasMaxLevel() && getLevel(profession) >= profession.getMaxLevel(); } - public void giveExperience(Profession profession, int value, Location loc, EXPSource source) { + public void giveExperience(Profession profession, int value, EXPSource source, @Nullable Location hologramLocation) { if (hasReachedMaxLevel(profession)) { setExperience(profession, 0); return; @@ -137,10 +139,9 @@ public class PlayerProfessions { value = MMOCore.plugin.boosterManager.calculateExp(profession, value); // display hologram - if (MMOCore.plugin.getConfig().getBoolean("display-exp-holograms") && playerData.isOnline()) - if (loc != null && MMOCore.plugin.hasHolograms()) - MMOCore.plugin.hologramSupport.displayIndicator(loc.add(.5, 1.5, .5), - MMOCore.plugin.configManager.getSimpleMessage("exp-hologram", "exp", "" + value).message(), playerData.getPlayer()); + if (hologramLocation != null && playerData.isOnline() && MMOCore.plugin.hasHolograms()) + MMOCore.plugin.hologramSupport.displayIndicator(hologramLocation.add(.5, 1.5, .5), + MMOCore.plugin.configManager.getSimpleMessage("exp-hologram", "exp", "" + value).message(), playerData.getPlayer()); PlayerExperienceGainEvent event = new PlayerExperienceGainEvent(playerData, profession, value, source); Bukkit.getPluginManager().callEvent(event); diff --git a/src/main/java/net/Indyuce/mmocore/api/experience/Profession.java b/src/main/java/net/Indyuce/mmocore/api/experience/Profession.java index 1db67786..3e4819ea 100644 --- a/src/main/java/net/Indyuce/mmocore/api/experience/Profession.java +++ b/src/main/java/net/Indyuce/mmocore/api/experience/Profession.java @@ -1,5 +1,7 @@ package net.Indyuce.mmocore.api.experience; +import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; import org.apache.commons.lang.Validate; @@ -19,6 +21,7 @@ public class Profession extends PostLoadObject { private final String id, name; private final ExpCurve expCurve; private final int maxLevel; + private final Map options = new HashMap<>(); /* * experience given to the main player level whenever he levels up this @@ -34,21 +37,29 @@ public class Profession extends PostLoadObject { Validate.notNull(name, "Could not load name"); expCurve = config.contains("exp-curve") - ? MMOCore.plugin.experience.getOrThrow( - config.get("exp-curve").toString().toLowerCase().replace("_", "-").replace(" ", "-")) + ? MMOCore.plugin.experience.getOrThrow(config.get("exp-curve").toString().toLowerCase().replace("_", "-").replace(" ", "-")) : ExpCurve.DEFAULT; experience = new LinearValue(config.getConfigurationSection("experience")); + if (config.contains("options")) + for (String key : config.getConfigurationSection("options").getKeys(false)) + try { + ProfessionOption option = ProfessionOption.valueOf(key.toUpperCase().replace("-", "_").replace(" ", "_")); + options.put(option, config.getBoolean("options." + key)); + } catch (IllegalArgumentException exception) { + MMOCore.plugin.getLogger().log(Level.WARNING, + "Could not load option '" + key + "' from profession '" + id + "': " + exception.getMessage()); + } + maxLevel = config.getInt("max-level"); if (config.contains("exp-sources")) for (String key : config.getStringList("exp-sources")) try { - MMOCore.plugin.professionManager.registerExpSource( - MMOCore.plugin.loadManager.loadExperienceSource(new MMOLineConfig(key), this)); + MMOCore.plugin.professionManager.registerExpSource(MMOCore.plugin.loadManager.loadExperienceSource(new MMOLineConfig(key), this)); } catch (IllegalArgumentException exception) { - MMOCore.plugin.getLogger().log(Level.WARNING, "Could not register exp source '" + key - + "' from profession '" + id + "': " + exception.getMessage()); + MMOCore.plugin.getLogger().log(Level.WARNING, + "Could not register exp source '" + key + "' from profession '" + id + "': " + exception.getMessage()); } } @@ -67,16 +78,14 @@ public class Profession extends PostLoadObject { if (config.contains("alchemy-experience")) { MMOCore.plugin.alchemyManager.splash = 1 + config.getDouble("alchemy-experience.special.splash") / 100; - MMOCore.plugin.alchemyManager.lingering = 1 - + config.getDouble("alchemy-experience.special.lingering") / 100; + MMOCore.plugin.alchemyManager.lingering = 1 + config.getDouble("alchemy-experience.special.lingering") / 100; MMOCore.plugin.alchemyManager.extend = 1 + config.getDouble("alchemy-experience.special.extend") / 100; MMOCore.plugin.alchemyManager.upgrade = 1 + config.getDouble("alchemy-experience.special.upgrade") / 100; for (String key : config.getConfigurationSection("alchemy-experience.effects").getKeys(false)) try { PotionType type = PotionType.valueOf(key.toUpperCase().replace("-", "_").replace(" ", "_")); - MMOCore.plugin.alchemyManager.registerBaseExperience(type, - config.getDouble("alchemy-experience.effects." + key)); + MMOCore.plugin.alchemyManager.registerBaseExperience(type, config.getDouble("alchemy-experience.effects." + key)); } catch (IllegalArgumentException exception) { MMOCore.log(Level.WARNING, "[PlayerProfessions:" + id + "] Could not read potion type from " + key); } @@ -85,10 +94,8 @@ public class Profession extends PostLoadObject { if (config.contains("base-enchant-exp")) for (String key : config.getConfigurationSection("base-enchant-exp").getKeys(false)) try { - Enchantment enchant = MMOLib.plugin.getVersion().getWrapper() - .getEnchantmentFromString(key.toLowerCase().replace("-", "_")); - MMOCore.plugin.enchantManager.registerBaseExperience(enchant, - config.getDouble("base-enchant-exp." + key)); + Enchantment enchant = MMOLib.plugin.getVersion().getWrapper().getEnchantmentFromString(key.toLowerCase().replace("-", "_")); + MMOCore.plugin.enchantManager.registerBaseExperience(enchant, config.getDouble("base-enchant-exp." + key)); } catch (IllegalArgumentException exception) { MMOCore.log(Level.WARNING, "[PlayerProfessions:" + id + "] Could not read enchant from " + key); } @@ -97,8 +104,7 @@ public class Profession extends PostLoadObject { for (String key : config.getConfigurationSection("repair-exp").getKeys(false)) try { Material material = Material.valueOf(key.toUpperCase().replace("-", "_").replace(" ", "_")); - MMOCore.plugin.smithingManager.registerBaseExperience(material, - config.getDouble("repair-exp." + key)); + MMOCore.plugin.smithingManager.registerBaseExperience(material, config.getDouble("repair-exp." + key)); } catch (IllegalArgumentException exception) { MMOCore.log(Level.WARNING, "[PlayerProfessions:" + id + "] Could not read material from " + key); } @@ -116,6 +122,10 @@ public class Profession extends PostLoadObject { // } } + public boolean getOption(ProfessionOption option) { + return options.getOrDefault(option, option.getDefault()); + } + public String getId() { return id; } @@ -143,4 +153,22 @@ public class Profession extends PostLoadObject { public LinearValue getExperience() { return experience; } + + public static enum ProfessionOption { + + /** + * When disabled, removes exp holograms when mined + */ + EXP_HOLOGRAMS(true); + + private final boolean def; + + private ProfessionOption(boolean def) { + this.def = def; + } + + public boolean getDefault() { + return def; + } + } } diff --git a/src/main/java/net/Indyuce/mmocore/api/experience/source/type/ExperienceSource.java b/src/main/java/net/Indyuce/mmocore/api/experience/source/type/ExperienceSource.java index ed9de2b9..23c6b0d0 100644 --- a/src/main/java/net/Indyuce/mmocore/api/experience/source/type/ExperienceSource.java +++ b/src/main/java/net/Indyuce/mmocore/api/experience/source/type/ExperienceSource.java @@ -1,13 +1,22 @@ package net.Indyuce.mmocore.api.experience.source.type; +import javax.annotation.Nullable; + import org.bukkit.Location; +import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.experience.EXPSource; import net.Indyuce.mmocore.api.experience.Profession; +import net.Indyuce.mmocore.api.experience.Profession.ProfessionOption; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.player.profess.PlayerClass; import net.Indyuce.mmocore.manager.profession.ExperienceManager; +/** + * Atrocious API that really needs rewriting + * + * @author cympe + */ public abstract class ExperienceSource { private final Profession profession; private PlayerClass profess; @@ -46,13 +55,26 @@ public abstract class ExperienceSource { public abstract boolean matches(PlayerData player, T obj); - public void giveExperience(PlayerData player, int amount, Location location) { - if (hasProfession()) - player.getCollectionSkills().giveExperience(profession, amount, location == null ? getPlayerLocation(player) : location, EXPSource.SOURCE); - else - player.giveExperience(amount, location == null ? getPlayerLocation(player) : location, EXPSource.SOURCE); + /** + * Gives experience to the right profession/class + * + * @param player Player to give exp to + * @param amount Amount of experience given + * @param hologramLocation If location is null the default location will be + * the player's torso + */ + public void giveExperience(PlayerData player, int amount, @Nullable Location hologramLocation) { + if (hasProfession()) { + hologramLocation = !profession.getOption(ProfessionOption.EXP_HOLOGRAMS) ? null + : hologramLocation == null ? getPlayerLocation(player) : hologramLocation; + player.getCollectionSkills().giveExperience(profession, amount, EXPSource.SOURCE, hologramLocation); + } else { + hologramLocation = !MMOCore.plugin.getConfig().getBoolean("display-main-class-exp-holograms") ? null + : hologramLocation == null ? getPlayerLocation(player) : hologramLocation; + player.giveExperience(amount, EXPSource.SOURCE, hologramLocation); + } } - + private Location getPlayerLocation(PlayerData player) { return player.isOnline() ? player.getPlayer().getLocation() : null; } diff --git a/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java b/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java index 884ba4ef..9f2fe566 100644 --- a/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java +++ b/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java @@ -10,6 +10,8 @@ import java.util.Set; import java.util.UUID; import java.util.logging.Level; +import javax.annotation.Nullable; + import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.Location; @@ -453,20 +455,29 @@ public class PlayerData extends OfflinePlayerData { } public void giveExperience(int value, EXPSource source) { - giveExperience(value, null, source); + giveExperience(value, source, null); } - public void giveExperience(int value, Location loc, EXPSource source) { + /** + * Called when giving experience to a player + * + * @param value Experience to give the player + * @param source How the player earned experience + * @param loc Location used to display the hologram. If it's null, no + * hologram will be displayed + */ + public void giveExperience(int value, EXPSource source, @Nullable Location hologramLocation) { if (hasReachedMaxLevel()) { setExperience(0); return; } - // display hologram - if (MMOCore.plugin.getConfig().getBoolean("display-exp-holograms") && isOnline()) - if (loc != null && MMOCore.plugin.hasHolograms()) - MMOCore.plugin.hologramSupport.displayIndicator(loc.add(.5, 1.5, .5), - MMOCore.plugin.configManager.getSimpleMessage("exp-hologram", "exp", "" + value).message(), getPlayer()); + /* + * Handle experience hologram + */ + if (hologramLocation != null && isOnline() && MMOCore.plugin.hasHolograms()) + MMOCore.plugin.hologramSupport.displayIndicator(hologramLocation.add(.5, 1.5, .5), + MMOCore.plugin.configManager.getSimpleMessage("exp-hologram", "exp", "" + value).message(), getPlayer()); value = MMOCore.plugin.boosterManager.calculateExp(null, value); value *= 1 + getStats().getStat(StatType.ADDITIONAL_EXPERIENCE) / 100; @@ -755,8 +766,8 @@ public class PlayerData extends OfflinePlayerData { return new SkillResult(this, skill, CancelReason.OTHER); /* - * skill, mana stamina aand cooldown requirements are all calculated in the - * SkillResult instances. this cast(SkillResult) method only applies + * skill, mana stamina aand cooldown requirements are all calculated in + * the SkillResult instances. this cast(SkillResult) method only applies * cooldown, reduces mana and/or stamina and send messages */ SkillResult cast = skill.getSkill().whenCast(this, skill); diff --git a/src/main/java/net/Indyuce/mmocore/command/rpg/admin/ExperienceCommandTreeNode.java b/src/main/java/net/Indyuce/mmocore/command/rpg/admin/ExperienceCommandTreeNode.java index eb2a7eaf..388eaa84 100644 --- a/src/main/java/net/Indyuce/mmocore/command/rpg/admin/ExperienceCommandTreeNode.java +++ b/src/main/java/net/Indyuce/mmocore/command/rpg/admin/ExperienceCommandTreeNode.java @@ -2,7 +2,6 @@ package net.Indyuce.mmocore.command.rpg.admin; import java.util.function.BiConsumer; -import net.Indyuce.mmocore.command.CommandVerbose; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; @@ -13,6 +12,7 @@ import net.Indyuce.mmocore.api.experience.EXPSource; import net.Indyuce.mmocore.api.experience.PlayerProfessions; import net.Indyuce.mmocore.api.experience.Profession; import net.Indyuce.mmocore.api.player.PlayerData; +import net.Indyuce.mmocore.command.CommandVerbose; import net.Indyuce.mmocore.command.MMOCoreCommandTreeRoot; import net.mmogroup.mmolib.command.api.CommandTreeNode; import net.mmogroup.mmolib.command.api.Parameter; @@ -22,7 +22,8 @@ public class ExperienceCommandTreeNode extends CommandTreeNode { super(parent, "exp"); addChild(new ActionCommandTreeNode(this, "set", PlayerData::setExperience, PlayerProfessions::setExperience)); - addChild(new ActionCommandTreeNode(this, "give", (data, value) -> data.giveExperience(value, data.getPlayer().getLocation(), EXPSource.COMMAND), (professions, profession, value) -> professions.giveExperience(profession, value, professions.getPlayerData().getPlayer().getLocation(), EXPSource.COMMAND))); + addChild(new ActionCommandTreeNode(this, "give", (data, value) -> data.giveExperience(value, EXPSource.COMMAND), (professions, profession, + value) -> professions.giveExperience(profession, value, EXPSource.COMMAND, professions.getPlayerData().getPlayer().getLocation()))); } public static class ActionCommandTreeNode extends CommandTreeNode { @@ -63,8 +64,8 @@ public class ExperienceCommandTreeNode extends CommandTreeNode { PlayerData data = PlayerData.get(player); if (args[4].equalsIgnoreCase("main")) { main.accept(data, amount); - CommandVerbose.verbose(sender, CommandVerbose.CommandType.EXPERIENCE, ChatColor.GOLD + player.getName() - + ChatColor.YELLOW + " now has " + ChatColor.GOLD + data.getExperience() + ChatColor.YELLOW + " EXP."); + CommandVerbose.verbose(sender, CommandVerbose.CommandType.EXPERIENCE, ChatColor.GOLD + player.getName() + ChatColor.YELLOW + + " now has " + ChatColor.GOLD + data.getExperience() + ChatColor.YELLOW + " EXP."); return CommandResult.SUCCESS; } @@ -76,8 +77,9 @@ public class ExperienceCommandTreeNode extends CommandTreeNode { Profession profession = MMOCore.plugin.professionManager.get(format); this.profession.accept(data.getCollectionSkills(), profession, amount); - CommandVerbose.verbose(sender, CommandVerbose.CommandType.EXPERIENCE, ChatColor.GOLD + player.getName() + ChatColor.YELLOW + " now has " - + ChatColor.GOLD + data.getCollectionSkills().getExperience(profession) + ChatColor.YELLOW + " EXP in " + profession.getName() + "."); + CommandVerbose.verbose(sender, CommandVerbose.CommandType.EXPERIENCE, + ChatColor.GOLD + player.getName() + ChatColor.YELLOW + " now has " + ChatColor.GOLD + + data.getCollectionSkills().getExperience(profession) + ChatColor.YELLOW + " EXP in " + profession.getName() + "."); return CommandResult.SUCCESS; } } diff --git a/src/main/java/net/Indyuce/mmocore/comp/holograms/HologramSupport.java b/src/main/java/net/Indyuce/mmocore/comp/holograms/HologramSupport.java index 49b8f7b3..1ce668bd 100644 --- a/src/main/java/net/Indyuce/mmocore/comp/holograms/HologramSupport.java +++ b/src/main/java/net/Indyuce/mmocore/comp/holograms/HologramSupport.java @@ -6,6 +6,7 @@ import org.bukkit.Location; import org.bukkit.entity.Player; public abstract class HologramSupport { + /** * Displays a message using a hologram * diff --git a/src/main/java/net/Indyuce/mmocore/listener/profession/FishingListener.java b/src/main/java/net/Indyuce/mmocore/listener/profession/FishingListener.java index f4cf7b7c..2b7be833 100644 --- a/src/main/java/net/Indyuce/mmocore/listener/profession/FishingListener.java +++ b/src/main/java/net/Indyuce/mmocore/listener/profession/FishingListener.java @@ -5,7 +5,6 @@ import java.util.Random; import java.util.Set; import java.util.UUID; -import net.Indyuce.mmocore.api.util.MMOCoreUtils; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -31,6 +30,7 @@ import net.Indyuce.mmocore.api.experience.EXPSource; import net.Indyuce.mmocore.api.loot.LootBuilder; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.player.stats.StatType; +import net.Indyuce.mmocore.api.util.MMOCoreUtils; import net.Indyuce.mmocore.manager.profession.FishingManager.FishingDropTable; import net.mmogroup.mmolib.version.VersionSound; @@ -47,10 +47,9 @@ public class FishingListener implements Listener { if (event.getState() == State.BITE && !fishing.contains(player.getUniqueId()) && !player.hasMetadata("NPC")) { /* - * checks for drop tables. if no drop table, just plain vanilla + * Checks for drop tables. If no drop table, just plain vanilla * fishing OTHERWISE initialize fishing, register other listener. */ - FishingDropTable table = MMOCore.plugin.fishingManager.calculateDropTable(player); if (table == null) return; @@ -127,7 +126,7 @@ public class FishingListener implements Listener { && (event.getState() == State.CAUGHT_FISH || event.getState() == State.FAILED_ATTEMPT || event.getState() == State.REEL_IN)) { /* - * lose the catch if the current fish is gone! + * Lose the catch if the current fish is gone! */ event.setCancelled(true); if (isTimedOut()) { @@ -140,19 +139,20 @@ public class FishingListener implements Listener { criticalFish(); /* - * checks for enough pulls. if not, return and wait for next + * Checks for enough pulls. if not, return and wait for next * fish event. */ if (!pull()) return; /* - * successfully pulls the fish + * Successfully pulls the fish */ close(); ItemStack mainhand = player.getInventory().getItem(EquipmentSlot.HAND); - MMOCoreUtils.decreaseDurability(player, (mainhand != null && mainhand.getType() == Material.FISHING_ROD) ? EquipmentSlot.HAND : EquipmentSlot.OFF_HAND, 1); + MMOCoreUtils.decreaseDurability(player, + (mainhand != null && mainhand.getType() == Material.FISHING_ROD) ? EquipmentSlot.HAND : EquipmentSlot.OFF_HAND, 1); if (!isCrit() && random.nextDouble() < PlayerData.get(player).getStats().getStat(StatType.CRITICAL_FISHING_FAILURE_CHANCE) / 100) { player.setVelocity(hook.getLocation().subtract(player.getLocation()).toVector().setY(0).multiply(3).setY(.5)); @@ -187,8 +187,8 @@ public class FishingListener implements Listener { 4 * (random.nextDouble() - .5), .05); if (MMOCore.plugin.professionManager.has("fishing")) - playerData.getCollectionSkills().giveExperience(MMOCore.plugin.professionManager.get("fishing"), exp, location, - EXPSource.FISHING); + playerData.getCollectionSkills().giveExperience(MMOCore.plugin.professionManager.get("fishing"), exp, EXPSource.FISHING, + location); } } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index c11c9592..d5ea13e3 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -8,7 +8,7 @@ # a Spigot Plugin by Team Requiem # DO NOT TOUCH -config-version: 5 +config-version: 6 # Auto-Save feature automatically saves playerdata # (class, level, etc.) and guild data @@ -113,6 +113,10 @@ vanilla-exp-redirection: # Requires a SERVER reload when changed. override-vanilla-exp: true +# If main class experience holograms should be displayed +# whenever a player earns main class exp +display-main-class-exp-holograms: true + # Requires a SERVER reload when changed. death-exp-loss: enabled: false @@ -120,9 +124,6 @@ death-exp-loss: # Percentage of current EXP you lose when dying. percent: 30 -# Allows to toggle exp hologram from gaining experience -display-exp-holograms: true - # Put the "value" of the action you want. # If the value is invalid or empty it will # default to the vanilla minecraft action.