From 13eec448e48a880cc91056406b215574c27b608d Mon Sep 17 00:00:00 2001 From: Ka0rX Date: Wed, 27 Jul 2022 18:40:45 +0200 Subject: [PATCH] Change the loading of experienceSources to adapt to linked experience sources. --- .../mmocore/api/load/DefaultMMOLoader.java | 51 +++++++++++-------- .../Indyuce/mmocore/api/load/MMOLoader.java | 4 +- .../api/player/profess/PlayerClass.java | 7 +-- .../experience/ExperienceSourceList.java | 15 ++++++ .../mmocore/experience/Profession.java | 11 ++-- .../mmocore/manager/MMOLoadManager.java | 8 ++- 6 files changed, 65 insertions(+), 31 deletions(-) create mode 100644 src/main/java/net/Indyuce/mmocore/experience/ExperienceSourceList.java diff --git a/src/main/java/net/Indyuce/mmocore/api/load/DefaultMMOLoader.java b/src/main/java/net/Indyuce/mmocore/api/load/DefaultMMOLoader.java index 8c01f63b..4820c112 100644 --- a/src/main/java/net/Indyuce/mmocore/api/load/DefaultMMOLoader.java +++ b/src/main/java/net/Indyuce/mmocore/api/load/DefaultMMOLoader.java @@ -8,6 +8,7 @@ import net.Indyuce.mmocore.api.block.VanillaBlockType; import net.Indyuce.mmocore.experience.dispenser.ExperienceDispenser; import net.Indyuce.mmocore.experience.source.*; import net.Indyuce.mmocore.loot.chest.condition.*; +import org.apache.commons.math3.analysis.function.Exp; import org.bukkit.configuration.ConfigurationSection; import net.Indyuce.mmocore.loot.droptable.dropitem.DropItem; @@ -34,6 +35,9 @@ import net.Indyuce.mmocore.api.quest.trigger.Trigger; import io.lumine.mythic.lib.api.MMOLineConfig; import org.checkerframework.checker.units.qual.C; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import java.util.logging.Level; public class DefaultMMOLoader extends MMOLoader { @@ -121,8 +125,10 @@ public class DefaultMMOLoader extends MMOLoader { return null; } + + @Override - public ExperienceSource loadExperienceSource(MMOLineConfig config, ExperienceDispenser dispenser) { + public List> loadExperienceSource(MMOLineConfig config, ExperienceDispenser dispenser) { if(config.getKey().equals("from")) { String source=config.getString("source"); ConfigFile configFile= new ConfigFile("exp-sources"); @@ -130,66 +136,67 @@ public class DefaultMMOLoader extends MMOLoader { MMOCore.plugin.getLogger().log(Level.WARNING,"Couldn't find "+source+" in experience-sources.yml"); return null; } + List> list= new ArrayList<>(); for(String expSource: configFile.getConfig().getStringList(source)) { - loadExperienceSource(new MMOLineConfig(expSource),dispenser); + list.addAll(loadExperienceSource(new MMOLineConfig(expSource),dispenser)); } + return list; + } - - if (config.getKey().equals("resource")) - return new ResourceExperienceSource(dispenser, config); + return Arrays.asList(new ResourceExperienceSource(dispenser, config)); if (config.getKey().equals("climb")) - return new ClimbExperienceSource(dispenser, config); + return Arrays.asList(new ClimbExperienceSource(dispenser, config)); if (config.getKey().equals("eat")) { - return new EatExperienceSource(dispenser, config); + return Arrays.asList(new EatExperienceSource(dispenser, config)); } if (config.getKey().equals("damagedealt")) - return new DamageDealtExperienceSource(dispenser, config); + return Arrays.asList(new DamageDealtExperienceSource(dispenser, config)); if (config.getKey().equals("damagetaken")) - return new DamageTakenExperienceSource(dispenser, config); + return Arrays.asList(new DamageTakenExperienceSource(dispenser, config)); if (config.getKey().equals("move")) - return new MoveExperienceSource(dispenser, config); + return Arrays.asList(new MoveExperienceSource(dispenser, config)); if (config.getKey().equals("play")) - return new PlayExperienceSource(dispenser, config); + return Arrays.asList(new PlayExperienceSource(dispenser, config)); if (config.getKey().equals("projectile")) - return new ProjectileExperienceSource(dispenser, config); + return Arrays.asList(new ProjectileExperienceSource(dispenser, config)); if (config.getKey().equals("ride")) - return new RideExperienceSource(dispenser, config); + return Arrays.asList(new RideExperienceSource(dispenser, config)); if (config.getKey().equals("tame")) - return new TameExperienceSource(dispenser, config); + return Arrays.asList(new TameExperienceSource(dispenser, config)); if (config.getKey().equals("killmob")) - return new KillMobExperienceSource(dispenser, config); + return Arrays.asList(new KillMobExperienceSource(dispenser, config)); if (config.getKey().equals("mineblock")) - return new MineBlockExperienceSource(dispenser, config); + return Arrays.asList(new MineBlockExperienceSource(dispenser, config)); if (config.getKey().equals("placeblock")) - return new PlaceBlockExperienceSource(dispenser, config); + return Arrays.asList(new PlaceBlockExperienceSource(dispenser, config)); if (config.getKey().equals("brewpotion")) - return new BrewPotionExperienceSource(dispenser, config); + return Arrays.asList(new BrewPotionExperienceSource(dispenser, config)); if (config.getKey().equals("smeltitem")) - return new SmeltItemExperienceSource(dispenser, config); + return Arrays.asList(new SmeltItemExperienceSource(dispenser, config)); if (config.getKey().equals("enchantitem")) - return new EnchantItemExperienceSource(dispenser, config); + return Arrays.asList(new EnchantItemExperienceSource(dispenser, config)); if (config.getKey().equals("repairitem")) - return new RepairItemExperienceSource(dispenser, config); + return Arrays.asList(new RepairItemExperienceSource(dispenser, config)); if (config.getKey().equals("craftitem")) - return new CraftItemExperienceSource(dispenser, config); + return Arrays.asList(new CraftItemExperienceSource(dispenser, config)); return null; } diff --git a/src/main/java/net/Indyuce/mmocore/api/load/MMOLoader.java b/src/main/java/net/Indyuce/mmocore/api/load/MMOLoader.java index 51564421..38333482 100644 --- a/src/main/java/net/Indyuce/mmocore/api/load/MMOLoader.java +++ b/src/main/java/net/Indyuce/mmocore/api/load/MMOLoader.java @@ -10,6 +10,8 @@ import net.Indyuce.mmocore.experience.source.type.ExperienceSource; import net.Indyuce.mmocore.api.quest.objective.Objective; import org.bukkit.configuration.ConfigurationSection; +import java.util.List; + /** * MMOLoader was initially an interface but it is now a * class so devs do not have to add a new method @@ -33,7 +35,7 @@ public class MMOLoader { return null; } - public ExperienceSource loadExperienceSource(MMOLineConfig config, ExperienceDispenser dispenser) { + public List> loadExperienceSource(MMOLineConfig config, ExperienceDispenser dispenser) { return null; } diff --git a/src/main/java/net/Indyuce/mmocore/api/player/profess/PlayerClass.java b/src/main/java/net/Indyuce/mmocore/api/player/profess/PlayerClass.java index 00a4cf6e..3021d87e 100644 --- a/src/main/java/net/Indyuce/mmocore/api/player/profess/PlayerClass.java +++ b/src/main/java/net/Indyuce/mmocore/api/player/profess/PlayerClass.java @@ -84,7 +84,7 @@ public class PlayerClass extends PostLoadObject implements ExperienceObject { profileField.set(meta, gp); icon.setItemMeta(meta); } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException - | SecurityException exception) { + | SecurityException exception) { throw new IllegalArgumentException("Could not apply playerhead texture: " + exception.getMessage()); } @@ -159,8 +159,9 @@ public class PlayerClass extends PostLoadObject implements ExperienceObject { if (config.contains("main-exp-sources.yml")) { for (String key : config.getStringList("main-exp-sources.yml")) try { - ExperienceSource source = MMOCore.plugin.loadManager.loadExperienceSource(new MMOLineConfig(key), this); - MMOCore.plugin.experience.registerSource(source); + List> list = MMOCore.plugin.loadManager.loadExperienceSource(new MMOLineConfig(key), this); + for (ExperienceSource source : list) + MMOCore.plugin.experience.registerSource(source); } catch (IllegalArgumentException exception) { MMOCore.plugin.getLogger().log(Level.WARNING, "Could not load exp source '" + key + "' from class '" + id + "': " + exception.getMessage()); diff --git a/src/main/java/net/Indyuce/mmocore/experience/ExperienceSourceList.java b/src/main/java/net/Indyuce/mmocore/experience/ExperienceSourceList.java new file mode 100644 index 00000000..08211ed4 --- /dev/null +++ b/src/main/java/net/Indyuce/mmocore/experience/ExperienceSourceList.java @@ -0,0 +1,15 @@ +package net.Indyuce.mmocore.experience; + +import net.Indyuce.mmocore.experience.source.type.ExperienceSource; + +import java.util.ArrayList; +import java.util.List; + +public class ExperienceSourceList { + List experienceSourceList= new ArrayList<>(); + + public void add(ExperienceSource source) { + + } + +} diff --git a/src/main/java/net/Indyuce/mmocore/experience/Profession.java b/src/main/java/net/Indyuce/mmocore/experience/Profession.java index 9041ea12..03ba0db5 100644 --- a/src/main/java/net/Indyuce/mmocore/experience/Profession.java +++ b/src/main/java/net/Indyuce/mmocore/experience/Profession.java @@ -6,6 +6,7 @@ import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.util.math.formula.LinearValue; import net.Indyuce.mmocore.experience.droptable.ExperienceTable; +import net.Indyuce.mmocore.experience.source.type.ExperienceSource; import org.apache.commons.lang.Validate; import org.bukkit.Location; import org.bukkit.configuration.ConfigurationSection; @@ -14,6 +15,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Objects; import java.util.logging.Level; @@ -64,10 +66,13 @@ public class Profession extends PostLoadObject implements ExperienceObject { maxLevel = config.getInt("max-level"); - if (config.contains("exp-sources.yml")) - for (String key : config.getStringList("exp-sources.yml")) + if (config.contains("exp-sources")) + for (String key : config.getStringList("exp-sources")) try { - MMOCore.plugin.experience.registerSource(MMOCore.plugin.loadManager.loadExperienceSource(new MMOLineConfig(key), this)); + List> experienceSourceList=MMOCore.plugin.loadManager.loadExperienceSource(new MMOLineConfig(key), this); + for(ExperienceSource experienceSource: experienceSourceList) { + MMOCore.plugin.experience.registerSource(experienceSource); + } } catch (IllegalArgumentException exception) { MMOCore.plugin.getLogger().log(Level.WARNING, "Could not register exp source '" + key + "' from profession '" + id + "': " + exception.getMessage()); diff --git a/src/main/java/net/Indyuce/mmocore/manager/MMOLoadManager.java b/src/main/java/net/Indyuce/mmocore/manager/MMOLoadManager.java index 15c49d03..a448882f 100644 --- a/src/main/java/net/Indyuce/mmocore/manager/MMOLoadManager.java +++ b/src/main/java/net/Indyuce/mmocore/manager/MMOLoadManager.java @@ -41,9 +41,13 @@ public class MMOLoadManager { return load(Objective.class, config, loader -> loader.loadObjective(config, section)); } + /** + Returns a List of Experience Source as one experience source can be linked to others. + Loading one exp source can in fact oad multiples if they are linked + */ @Deprecated - public ExperienceSource loadExperienceSource(MMOLineConfig config, ExperienceDispenser dispenser) { - return load(ExperienceSource.class, config, loader -> loader.loadExperienceSource(config, dispenser)); + public List> loadExperienceSource(MMOLineConfig config, ExperienceDispenser dispenser) { + return load(List.class, config, loader -> loader.loadExperienceSource(config, dispenser)); } public Trigger loadTrigger(MMOLineConfig config) {