Change the loading of experienceSources to adapt to linked experience sources.

This commit is contained in:
Ka0rX 2022-07-27 18:40:45 +02:00
parent eac9cfa74e
commit 13eec448e4
6 changed files with 65 additions and 31 deletions

View File

@ -8,6 +8,7 @@ import net.Indyuce.mmocore.api.block.VanillaBlockType;
import net.Indyuce.mmocore.experience.dispenser.ExperienceDispenser; import net.Indyuce.mmocore.experience.dispenser.ExperienceDispenser;
import net.Indyuce.mmocore.experience.source.*; import net.Indyuce.mmocore.experience.source.*;
import net.Indyuce.mmocore.loot.chest.condition.*; import net.Indyuce.mmocore.loot.chest.condition.*;
import org.apache.commons.math3.analysis.function.Exp;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import net.Indyuce.mmocore.loot.droptable.dropitem.DropItem; 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 io.lumine.mythic.lib.api.MMOLineConfig;
import org.checkerframework.checker.units.qual.C; import org.checkerframework.checker.units.qual.C;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
public class DefaultMMOLoader extends MMOLoader { public class DefaultMMOLoader extends MMOLoader {
@ -121,8 +125,10 @@ public class DefaultMMOLoader extends MMOLoader {
return null; return null;
} }
@Override @Override
public ExperienceSource<?> loadExperienceSource(MMOLineConfig config, ExperienceDispenser dispenser) { public List<ExperienceSource<?>> loadExperienceSource(MMOLineConfig config, ExperienceDispenser dispenser) {
if(config.getKey().equals("from")) { if(config.getKey().equals("from")) {
String source=config.getString("source"); String source=config.getString("source");
ConfigFile configFile= new ConfigFile("exp-sources"); 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"); MMOCore.plugin.getLogger().log(Level.WARNING,"Couldn't find "+source+" in experience-sources.yml");
return null; return null;
} }
List<ExperienceSource<?>> list= new ArrayList<>();
for(String expSource: configFile.getConfig().getStringList(source)) { 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")) if (config.getKey().equals("resource"))
return new ResourceExperienceSource(dispenser, config); return Arrays.asList(new ResourceExperienceSource(dispenser, config));
if (config.getKey().equals("climb")) if (config.getKey().equals("climb"))
return new ClimbExperienceSource(dispenser, config); return Arrays.asList(new ClimbExperienceSource(dispenser, config));
if (config.getKey().equals("eat")) { if (config.getKey().equals("eat")) {
return new EatExperienceSource(dispenser, config); return Arrays.asList(new EatExperienceSource(dispenser, config));
} }
if (config.getKey().equals("damagedealt")) if (config.getKey().equals("damagedealt"))
return new DamageDealtExperienceSource(dispenser, config); return Arrays.asList(new DamageDealtExperienceSource(dispenser, config));
if (config.getKey().equals("damagetaken")) if (config.getKey().equals("damagetaken"))
return new DamageTakenExperienceSource(dispenser, config); return Arrays.asList(new DamageTakenExperienceSource(dispenser, config));
if (config.getKey().equals("move")) if (config.getKey().equals("move"))
return new MoveExperienceSource(dispenser, config); return Arrays.asList(new MoveExperienceSource(dispenser, config));
if (config.getKey().equals("play")) if (config.getKey().equals("play"))
return new PlayExperienceSource(dispenser, config); return Arrays.asList(new PlayExperienceSource(dispenser, config));
if (config.getKey().equals("projectile")) if (config.getKey().equals("projectile"))
return new ProjectileExperienceSource(dispenser, config); return Arrays.asList(new ProjectileExperienceSource(dispenser, config));
if (config.getKey().equals("ride")) if (config.getKey().equals("ride"))
return new RideExperienceSource(dispenser, config); return Arrays.asList(new RideExperienceSource(dispenser, config));
if (config.getKey().equals("tame")) if (config.getKey().equals("tame"))
return new TameExperienceSource(dispenser, config); return Arrays.asList(new TameExperienceSource(dispenser, config));
if (config.getKey().equals("killmob")) if (config.getKey().equals("killmob"))
return new KillMobExperienceSource(dispenser, config); return Arrays.asList(new KillMobExperienceSource(dispenser, config));
if (config.getKey().equals("mineblock")) if (config.getKey().equals("mineblock"))
return new MineBlockExperienceSource(dispenser, config); return Arrays.asList(new MineBlockExperienceSource(dispenser, config));
if (config.getKey().equals("placeblock")) if (config.getKey().equals("placeblock"))
return new PlaceBlockExperienceSource(dispenser, config); return Arrays.asList(new PlaceBlockExperienceSource(dispenser, config));
if (config.getKey().equals("brewpotion")) if (config.getKey().equals("brewpotion"))
return new BrewPotionExperienceSource(dispenser, config); return Arrays.asList(new BrewPotionExperienceSource(dispenser, config));
if (config.getKey().equals("smeltitem")) if (config.getKey().equals("smeltitem"))
return new SmeltItemExperienceSource(dispenser, config); return Arrays.asList(new SmeltItemExperienceSource(dispenser, config));
if (config.getKey().equals("enchantitem")) if (config.getKey().equals("enchantitem"))
return new EnchantItemExperienceSource(dispenser, config); return Arrays.asList(new EnchantItemExperienceSource(dispenser, config));
if (config.getKey().equals("repairitem")) if (config.getKey().equals("repairitem"))
return new RepairItemExperienceSource(dispenser, config); return Arrays.asList(new RepairItemExperienceSource(dispenser, config));
if (config.getKey().equals("craftitem")) if (config.getKey().equals("craftitem"))
return new CraftItemExperienceSource(dispenser, config); return Arrays.asList(new CraftItemExperienceSource(dispenser, config));
return null; return null;
} }

View File

@ -10,6 +10,8 @@ import net.Indyuce.mmocore.experience.source.type.ExperienceSource;
import net.Indyuce.mmocore.api.quest.objective.Objective; import net.Indyuce.mmocore.api.quest.objective.Objective;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import java.util.List;
/** /**
* MMOLoader was initially an interface but it is now a * MMOLoader was initially an interface but it is now a
* class so devs do not have to add a new method * class so devs do not have to add a new method
@ -33,7 +35,7 @@ public class MMOLoader {
return null; return null;
} }
public ExperienceSource<?> loadExperienceSource(MMOLineConfig config, ExperienceDispenser dispenser) { public List<ExperienceSource<?>> loadExperienceSource(MMOLineConfig config, ExperienceDispenser dispenser) {
return null; return null;
} }

View File

@ -84,7 +84,7 @@ public class PlayerClass extends PostLoadObject implements ExperienceObject {
profileField.set(meta, gp); profileField.set(meta, gp);
icon.setItemMeta(meta); icon.setItemMeta(meta);
} catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException
| SecurityException exception) { | SecurityException exception) {
throw new IllegalArgumentException("Could not apply playerhead texture: " + exception.getMessage()); 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")) { if (config.contains("main-exp-sources.yml")) {
for (String key : config.getStringList("main-exp-sources.yml")) for (String key : config.getStringList("main-exp-sources.yml"))
try { try {
ExperienceSource<?> source = MMOCore.plugin.loadManager.loadExperienceSource(new MMOLineConfig(key), this); List<ExperienceSource<?>> list = MMOCore.plugin.loadManager.loadExperienceSource(new MMOLineConfig(key), this);
MMOCore.plugin.experience.registerSource(source); for (ExperienceSource source : list)
MMOCore.plugin.experience.registerSource(source);
} catch (IllegalArgumentException exception) { } catch (IllegalArgumentException exception) {
MMOCore.plugin.getLogger().log(Level.WARNING, "Could not load exp source '" + key + "' from class '" MMOCore.plugin.getLogger().log(Level.WARNING, "Could not load exp source '" + key + "' from class '"
+ id + "': " + exception.getMessage()); + id + "': " + exception.getMessage());

View File

@ -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<ExperienceSource> experienceSourceList= new ArrayList<>();
public void add(ExperienceSource source) {
}
}

View File

@ -6,6 +6,7 @@ import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.api.util.math.formula.LinearValue; import net.Indyuce.mmocore.api.util.math.formula.LinearValue;
import net.Indyuce.mmocore.experience.droptable.ExperienceTable; import net.Indyuce.mmocore.experience.droptable.ExperienceTable;
import net.Indyuce.mmocore.experience.source.type.ExperienceSource;
import org.apache.commons.lang.Validate; import org.apache.commons.lang.Validate;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
@ -14,6 +15,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.logging.Level; import java.util.logging.Level;
@ -64,10 +66,13 @@ public class Profession extends PostLoadObject implements ExperienceObject {
maxLevel = config.getInt("max-level"); maxLevel = config.getInt("max-level");
if (config.contains("exp-sources.yml")) if (config.contains("exp-sources"))
for (String key : config.getStringList("exp-sources.yml")) for (String key : config.getStringList("exp-sources"))
try { try {
MMOCore.plugin.experience.registerSource(MMOCore.plugin.loadManager.loadExperienceSource(new MMOLineConfig(key), this)); List<ExperienceSource<?>> experienceSourceList=MMOCore.plugin.loadManager.loadExperienceSource(new MMOLineConfig(key), this);
for(ExperienceSource experienceSource: experienceSourceList) {
MMOCore.plugin.experience.registerSource(experienceSource);
}
} catch (IllegalArgumentException exception) { } catch (IllegalArgumentException exception) {
MMOCore.plugin.getLogger().log(Level.WARNING, MMOCore.plugin.getLogger().log(Level.WARNING,
"Could not register exp source '" + key + "' from profession '" + id + "': " + exception.getMessage()); "Could not register exp source '" + key + "' from profession '" + id + "': " + exception.getMessage());

View File

@ -41,9 +41,13 @@ public class MMOLoadManager {
return load(Objective.class, config, loader -> loader.loadObjective(config, section)); 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 @Deprecated
public ExperienceSource<?> loadExperienceSource(MMOLineConfig config, ExperienceDispenser dispenser) { public List<ExperienceSource<?>> loadExperienceSource(MMOLineConfig config, ExperienceDispenser dispenser) {
return load(ExperienceSource.class, config, loader -> loader.loadExperienceSource(config, dispenser)); return load(List.class, config, loader -> loader.loadExperienceSource(config, dispenser));
} }
public Trigger loadTrigger(MMOLineConfig config) { public Trigger loadTrigger(MMOLineConfig config) {