diff --git a/src/main/java/net/Indyuce/mmocore/api/quest/trigger/ExperienceTrigger.java b/src/main/java/net/Indyuce/mmocore/api/quest/trigger/ExperienceTrigger.java index 330d774b..35e1e433 100644 --- a/src/main/java/net/Indyuce/mmocore/api/quest/trigger/ExperienceTrigger.java +++ b/src/main/java/net/Indyuce/mmocore/api/quest/trigger/ExperienceTrigger.java @@ -12,7 +12,8 @@ import io.lumine.mythic.lib.api.MMOLineConfig; public class ExperienceTrigger extends Trigger { private final RandomAmount amount; - private Profession profession; + private final Profession profession; + private final EXPSource source; public ExperienceTrigger(MMOLineConfig config) { super(config); @@ -23,16 +24,18 @@ public class ExperienceTrigger extends Trigger { String id = config.getString("profession").toLowerCase().replace("_", "-"); Validate.isTrue(MMOCore.plugin.professionManager.has(id), "Could not find profession"); profession = MMOCore.plugin.professionManager.get(id); - } + } else + profession = null; amount = new RandomAmount(config.getString("amount")); + source = config.contains("source") ? EXPSource.valueOf(config.getString("source").toUpperCase()) : EXPSource.QUEST; } @Override public void apply(PlayerData player) { if (profession == null) - player.giveExperience(amount.calculateInt(), EXPSource.QUEST); + player.giveExperience(amount.calculateInt(), source); else - player.getCollectionSkills().giveExperience(profession, amount.calculateInt(), EXPSource.QUEST); + player.getCollectionSkills().giveExperience(profession, amount.calculateInt(), source); } /* diff --git a/src/main/java/net/Indyuce/mmocore/experience/EXPSource.java b/src/main/java/net/Indyuce/mmocore/experience/EXPSource.java index a8fef063..916f819d 100644 --- a/src/main/java/net/Indyuce/mmocore/experience/EXPSource.java +++ b/src/main/java/net/Indyuce/mmocore/experience/EXPSource.java @@ -1,10 +1,36 @@ package net.Indyuce.mmocore.experience; public enum EXPSource { - SOURCE, - COMMAND, - VANILLA, - QUEST, - FISHING, - OTHER + + /** + * When using a profession/class experience source + */ + SOURCE, + + /** + * When using the /mmocore admin exp command + */ + COMMAND, + + /** + * When converting vanilla exp into MMOCore exp + */ + VANILLA, + + /** + * When using the experience trigger. Keep in mind the + * experience trigger can also use another experience source + * when using the right parameter + */ + QUEST, + + /** + * When gaining experience from fishing + */ + FISHING, + + /** + * Anything else + */ + OTHER } diff --git a/src/main/java/net/Indyuce/mmocore/experience/Profession.java b/src/main/java/net/Indyuce/mmocore/experience/Profession.java index d7d431d7..39f4659f 100644 --- a/src/main/java/net/Indyuce/mmocore/experience/Profession.java +++ b/src/main/java/net/Indyuce/mmocore/experience/Profession.java @@ -73,7 +73,7 @@ public class Profession { } } - MMOCore.plugin.professionManager.loadProfessionConfigurations(config); + MMOCore.plugin.professionManager.loadProfessionConfigurations(this, config); } private ExperienceTable loadExperienceTable(Object obj) { 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 206a79f9..6a5a0451 100644 --- a/src/main/java/net/Indyuce/mmocore/listener/profession/FishingListener.java +++ b/src/main/java/net/Indyuce/mmocore/listener/profession/FishingListener.java @@ -188,9 +188,8 @@ public class FishingListener implements Listener { location.getWorld().spawnParticle(Particle.FIREWORKS_SPARK, location, 0, 4 * (random.nextDouble() - .5), 2, 4 * (random.nextDouble() - .5), .05); - if (MMOCore.plugin.professionManager.has("fishing")) - playerData.getCollectionSkills().giveExperience(MMOCore.plugin.professionManager.get("fishing"), exp, EXPSource.FISHING, - location); + if (MMOCore.plugin.fishingManager.hasLinkedProfession()) + playerData.getCollectionSkills().giveExperience(MMOCore.plugin.fishingManager.getLinkedProfession(), exp, EXPSource.FISHING, location); } } } diff --git a/src/main/java/net/Indyuce/mmocore/manager/profession/ProfessionManager.java b/src/main/java/net/Indyuce/mmocore/manager/profession/ProfessionManager.java index 15cc57bf..419d6961 100644 --- a/src/main/java/net/Indyuce/mmocore/manager/profession/ProfessionManager.java +++ b/src/main/java/net/Indyuce/mmocore/manager/profession/ProfessionManager.java @@ -31,10 +31,15 @@ public class ProfessionManager implements MMOCoreManager { professionManagers.add(professionManager); } - public void loadProfessionConfigurations(ConfigurationSection config) { + /** + * @param profession Profession loading some configuration section + * @param config Configuration section to load profession config from + */ + public void loadProfessionConfigurations(Profession profession, ConfigurationSection config) { for (SpecificProfessionManager manager : professionManagers) if (config.contains(manager.getStringKey())) try { + manager.setLinkedProfession(profession); manager.loadProfessionConfiguration(config.getConfigurationSection(manager.getStringKey())); } catch (RuntimeException exception) { MMOCore.plugin.getLogger().log(Level.WARNING, "Could not load profession config '" + manager.getStringKey() + "': " + exception.getMessage()); diff --git a/src/main/java/net/Indyuce/mmocore/manager/profession/SpecificProfessionManager.java b/src/main/java/net/Indyuce/mmocore/manager/profession/SpecificProfessionManager.java index 334fa2b2..8ee2708a 100644 --- a/src/main/java/net/Indyuce/mmocore/manager/profession/SpecificProfessionManager.java +++ b/src/main/java/net/Indyuce/mmocore/manager/profession/SpecificProfessionManager.java @@ -1,5 +1,6 @@ package net.Indyuce.mmocore.manager.profession; +import net.Indyuce.mmocore.experience.Profession; import net.Indyuce.mmocore.manager.MMOCoreManager; import org.bukkit.configuration.ConfigurationSection; @@ -11,10 +12,27 @@ public abstract class SpecificProfessionManager implements MMOCoreManager { */ private final String key; + /** + * Caching the profession that is linked to the profession manager. + */ + private Profession linkedProfession; + public SpecificProfessionManager(String key) { this.key = key; } + public void setLinkedProfession(Profession linkedProfession) { + this.linkedProfession = linkedProfession; + } + + public Profession getLinkedProfession() { + return linkedProfession; + } + + public boolean hasLinkedProfession() { + return linkedProfession != null; + } + public String getStringKey() { return key; }