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.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<ExperienceSource<?>> 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<ExperienceSource<?>> 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;
}

View File

@ -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<ExperienceSource<?>> loadExperienceSource(MMOLineConfig config, ExperienceDispenser dispenser) {
return null;
}

View File

@ -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<ExperienceSource<?>> 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());

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.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<ExperienceSource<?>> 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());

View File

@ -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<ExperienceSource<?>> loadExperienceSource(MMOLineConfig config, ExperienceDispenser dispenser) {
return load(List.class, config, loader -> loader.loadExperienceSource(config, dispenser));
}
public Trigger loadTrigger(MMOLineConfig config) {