new config pt 10 - All configs are now managed by ConfigManager (WIP)

This commit is contained in:
nossr50 2019-02-17 08:59:09 -08:00
parent acf2bf362f
commit f4ba472403
30 changed files with 515 additions and 324 deletions

View File

@ -125,10 +125,10 @@
<pattern>com.flowpowered</pattern>
<shadedPattern>com.gmail.nossr50.flow</shadedPattern>
</relocation>-->
<relocation>
<!--<relocation>
<pattern>ninja.leaping</pattern>
<shadedPattern>com.gmail.nossr50.configurable</shadedPattern>
</relocation>
</relocation>-->
</relocations>
</configuration>
<executions>

View File

@ -122,20 +122,22 @@ public class AdvancedConfig extends ConfigValidated {
public static final String SEND_COPY_OF_MESSAGE_TO_CHAT = "SendCopyOfMessageToChat";
public static final String EVENTS = "Events";
public static final String SEND_TITLES = "SendTitles";
private static AdvancedConfig instance;
//private static AdvancedConfig instance;
private AdvancedConfig() {
public AdvancedConfig() {
//super(McmmoCore.getDataFolderPath().getAbsoluteFile(), "advanced.yml", true);
super(mcMMO.p.getDataFolder().getAbsoluteFile(), "advanced.yml", true);
}
public static AdvancedConfig getInstance() {
/*public static AdvancedConfig getInstance() {
if (instance == null) {
instance = new AdvancedConfig();
}
return instance;
}
}*/
/**
* The version of this config

View File

@ -7,13 +7,13 @@ import org.bukkit.configuration.file.YamlConfiguration;
import java.util.EnumSet;
public class ChildConfig extends ConfigCollections {
public class ChildConfig extends ConfigCollection {
public ChildConfig() {
super("child.yml");
}
@Override
protected void loadKeys() {
protected void register() {
config.setDefaults(YamlConfiguration.loadConfiguration(plugin.getResourceAsReader("child.yml")));
FamilyTree.clearRegistrations(); // when reloading, need to clear statics

View File

@ -1,7 +1,49 @@
package com.gmail.nossr50.config;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
public interface ConfigCollection<T> {
Collection<T> getLoadedCollection();
/**
* Represents a config file that registers keys after its initialized
*/
public abstract class ConfigCollection<T> extends Config implements Registers, GenericCollectionContainer {
//The collection held by this class
protected Collection<T> genericCollection;
public ConfigCollection(String pathToParentFolder, String relativePath, boolean mergeNewKeys) {
super(pathToParentFolder, relativePath, mergeNewKeys);
//init
initCollection();
//load
register();
}
private void initCollection() {
if (genericCollection == null)
genericCollection = new ArrayList<>();
}
public ConfigCollection(File pathToParentFolder, String relativePath, boolean mergeNewKeys) {
super(pathToParentFolder, relativePath, mergeNewKeys);
//init
initCollection();
//load
register();
}
@Override
public Collection<T> getLoadedCollection() {
return this.genericCollection;
}
@Override
public void unload() {
genericCollection.clear();
}
}

View File

@ -1,19 +0,0 @@
package com.gmail.nossr50.config;
import java.io.File;
/**
* Represents a config file that registers keys after its initialized
*/
public abstract class ConfigCollections extends Config implements RegistersKeys, ConfigCollection {
public ConfigCollections(String pathToParentFolder, String relativePath, boolean mergeNewKeys) {
super(pathToParentFolder, relativePath, mergeNewKeys);
loadKeys();
}
public ConfigCollections(File pathToParentFolder, String relativePath, boolean mergeNewKeys) {
super(pathToParentFolder, relativePath, mergeNewKeys);
loadKeys();
}
}

View File

@ -6,19 +6,19 @@ import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.util.StringUtils;
public class CoreSkillsConfig extends Config {
private static CoreSkillsConfig instance;
//private static CoreSkillsConfig instance;
public CoreSkillsConfig() {
//super(McmmoCore.getDataFolderPath().getAbsoluteFile(),"coreskills.yml", true);
super(mcMMO.p.getDataFolder().getAbsoluteFile(),"coreskills.yml", true);
}
public static CoreSkillsConfig getInstance() {
/*public static CoreSkillsConfig getInstance() {
if (instance == null)
return new CoreSkillsConfig();
return instance;
}
}*/
/**
* The version of this config

View File

@ -0,0 +1,15 @@
package com.gmail.nossr50.config;
import java.util.Collection;
/**
* Represents a class that contains a generic collection
* @param <T>
*/
public interface GenericCollectionContainer<T> {
/**
* Grab the collection held by this class
* @return the collection held by this class
*/
Collection<T> getLoadedCollection();
}

View File

@ -8,20 +8,20 @@ import java.util.ArrayList;
import java.util.List;
public class RankConfig extends ConfigValidated {
private static RankConfig instance;
//private static RankConfig instance;
public RankConfig() {
//super(McmmoCore.getDataFolderPath().getAbsoluteFile(),"skillranks.yml", true);
super(mcMMO.p.getDataFolder().getAbsoluteFile(),"skillranks.yml", true);
this.instance = this;
//this.instance = this;
}
public static RankConfig getInstance() {
/*public static RankConfig getInstance() {
if (instance == null)
return new RankConfig();
return instance;
}
}*/
@Override
public void unload() {

View File

@ -0,0 +1,11 @@
package com.gmail.nossr50.config;
/**
* A class that is expected to register one thing into another thing
*/
public interface Registers {
/**
* Register stuff
*/
void register();
}

View File

@ -1,11 +0,0 @@
package com.gmail.nossr50.config;
/**
* A class that registers keys
*/
public interface RegistersKeys {
/**
* Loads up keys
*/
void loadKeys();
}

View File

@ -7,7 +7,7 @@ import java.util.ArrayList;
import java.util.List;
public class SoundConfig extends ConfigValidated {
private static SoundConfig instance;
//private static SoundConfig instance;
public SoundConfig() {
//super(McmmoCore.getDataFolderPath().getAbsoluteFile(), "sounds.yml", true);
@ -15,12 +15,12 @@ public class SoundConfig extends ConfigValidated {
this.instance = this;
}
public static SoundConfig getInstance() {
/*public static SoundConfig getInstance() {
if (instance == null)
return new SoundConfig();
return instance;
}
}*/
@Override
public void unload() {

View File

@ -0,0 +1,166 @@
package com.gmail.nossr50.config.collectionconfigs;
import com.gmail.nossr50.config.*;
import com.gmail.nossr50.config.mods.ArmorConfigManager;
import com.gmail.nossr50.config.mods.BlockConfigManager;
import com.gmail.nossr50.config.mods.EntityConfigManager;
import com.gmail.nossr50.config.mods.ToolConfigManager;
import com.gmail.nossr50.config.skills.alchemy.PotionConfig;
import com.gmail.nossr50.config.treasure.TreasureConfig;
import com.gmail.nossr50.skills.child.ChildConfig;
import com.gmail.nossr50.skills.repair.repairables.Repairable;
import com.gmail.nossr50.skills.repair.repairables.SimpleRepairableManager;
import com.gmail.nossr50.skills.salvage.salvageables.Salvageable;
import com.gmail.nossr50.skills.salvage.salvageables.SimpleSalvageableManager;
import java.util.ArrayList;
/**
*
* The Config Manager handles initializing, loading, and unloading registers for all configs that mcMMO uses
* This makes sure that mcMMO properly loads and unloads its values on reload
*
* Config Manager also holds all of our MultiConfigContainers
*
* MultiConfigContainers
* Represents a collection of config files that serve a similar purpose
* As an example, with Repair you can have an unlimited number of files named repair.*.yml and each one will be treated the same and have its collections registered
* The master file is always named x.vanilla.yml, for example "repair.vanilla.yml"
* To be honest I'm not sure how many people make use of this system, but I'm keeping it since its been in mcMMO for like 6+ years
*/
public final class ConfigManager {
/* UNLOAD REGISTER */
private ArrayList<Unload> unloadables;
/* MULTI CONFIG INSTANCES */
private MultiConfigContainer<Repairable> repairableMultiConfigContainer;
private MultiConfigContainer<Salvageable> salvageableMultiConfigContainer;
/* COLLECTION MANAGERS */
private SimpleRepairableManager simpleRepairableManager;
private SimpleSalvageableManager simpleSalvageableManager;
/* CONFIG INSTANCES */
private TreasureConfig treasureConfig;
private AdvancedConfig advancedConfig;
private PotionConfig potionConfig;
private CoreSkillsConfig coreSkillsConfig;
private SoundConfig soundConfig;
private RankConfig rankConfig;
public ConfigManager()
{
unloadables = new ArrayList<>();
// Load Config Files
// I'm pretty these are supposed to be done in a specific order, so don't rearrange them willy nilly
treasureConfig = new TreasureConfig();
unloadables.add(treasureConfig);
advancedConfig = new AdvancedConfig();
unloadables.add(advancedConfig);
potionConfig = new PotionConfig();
unloadables.add(potionConfig);
coreSkillsConfig = new CoreSkillsConfig();
unloadables.add(coreSkillsConfig);
soundConfig = new SoundConfig();
unloadables.add(soundConfig);
rankConfig = new RankConfig();
unloadables.add(rankConfig);
//TODO: This config serves no purpose so its getting removed
new ChildConfig();
if (MainConfig.getInstance().getToolModsEnabled()) {
new ToolConfigManager();
}
if (MainConfig.getInstance().getArmorModsEnabled()) {
new ArmorConfigManager();
}
if (MainConfig.getInstance().getBlockModsEnabled()) {
new BlockConfigManager();
}
if (MainConfig.getInstance().getEntityModsEnabled()) {
new EntityConfigManager();
}
// Multi Config Containers
initMultiConfigContainers();
// Register Managers
initCollectionManagers();
}
/**
* Initializes all of our Multi Config Containers
*/
private void initMultiConfigContainers()
{
//Repair
repairableMultiConfigContainer = new MultiConfigContainer<>("repair", CollectionClassType.REPAIR);
unloadables.add(repairableMultiConfigContainer);
//Salvage
salvageableMultiConfigContainer = new MultiConfigContainer<>("salvage", CollectionClassType.SALVAGE);
unloadables.add(salvageableMultiConfigContainer);
}
/**
* Initializes any managers related to config collections
*/
private void initCollectionManagers()
{
// Handles registration of repairables
simpleRepairableManager = new SimpleRepairableManager(getRepairables());
unloadables.add(simpleRepairableManager);
// Handles registration of salvageables
simpleSalvageableManager = new SimpleSalvageableManager(getSalvageables());
unloadables.add(simpleSalvageableManager);
}
/**
* Get all loaded repairables (loaded from all repairable configs)
* @return the currently loaded repairables
*/
public ArrayList<Repairable> getRepairables()
{
return (ArrayList<Repairable>) repairableMultiConfigContainer.getCollection();
}
/**
* Get all loaded salvageables (loaded from all salvageable configs)
* @return the currently loaded salvageables
*/
public ArrayList<Salvageable> getSalvageables()
{
return (ArrayList<Salvageable>) salvageableMultiConfigContainer.getCollection();
}
/**
* Unloads all config options (prepares for reload)
*/
public void unloadAllConfigsAndRegisters()
{
//Unload
for(Unload unloadable : unloadables)
{
unloadable.unload();
}
//Clear
unloadables.clear();
}
}

View File

@ -0,0 +1,155 @@
package com.gmail.nossr50.config.collectionconfigs;
import com.gmail.nossr50.config.ConfigCollection;
import com.gmail.nossr50.config.Unload;
import com.gmail.nossr50.mcMMO;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.regex.Pattern;
/**
* Represents a type of config collection, these config collections are spread across multiple config files potentially
* @param <T>
*/
public class MultiConfigContainer<T> implements Unload {
/* CONSTANTS */
public static final String DEFAULT_MULTICONFIG_FILENAME_SUFFIX = ".vanilla.yml";
/* VARS */
private final String configPrefix;
private Collection<T> collection;
public final CollectionClassType collectionClassType;
private ConfigCollection vanillaConfig;
@Override
public void unload() {
collection.clear();
vanillaConfig.unload();
}
public MultiConfigContainer(String configPrefix, CollectionClassType collectionClassType)
{
//Define Config Class
this.collectionClassType = collectionClassType;
//Define Config Filename Prefix
this.configPrefix = configPrefix;
//Init Collection
collection = new ArrayList<T>();
//Load Configs
//Vanilla Config
initConfigAndAddCollection(getVanillaConfigName(configPrefix));
//Custom Configs
loadCustomCollections(configPrefix);
}
/**
* Add another collection to this collection
* @param otherCollection
*/
private void addCollection(Collection<T> otherCollection)
{
collection.addAll(otherCollection);
}
/**
* Grabs the Class to instance for this config collection
* @param collectionClassType the type of class
* @return the class to instance for this config collection
*/
private Class getConfigClass(CollectionClassType collectionClassType)
{
switch(collectionClassType) {
case REPAIR:
return RepairConfig.class;
case SALVAGE:
return SalvageConfig.class;
default:
mcMMO.p.getLogger().severe("[DEBUG] Config Class type is undefined!");
return null;
}
}
/**
* Gets the name of the vanilla config which is always present
* @param configPrefix the prefix to the filename, for example "repair" or "salvage"
* @return the name of the vanilla config file for this collection
*/
private String getVanillaConfigName(String configPrefix)
{
return configPrefix+DEFAULT_MULTICONFIG_FILENAME_SUFFIX;
}
/**
* Initializes a config and attempts to load add its collection
* @param configFileName the filename of the config to load
*/
private void initConfigAndAddCollection(String configFileName)
{
mcMMO.p.getLogger().info("Reading from collection config - "+configFileName);
ConfigCollection configCollection = null;
try {
configCollection = (ConfigCollection) getConfigClass(collectionClassType).getConstructor(String.class).newInstance(configFileName);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
//Add the collection loaded from this config
addCollection(configCollection.getLoadedCollection());
}
/**
* mcMMO allows collection config files to be named things like repair.whatevernameyouwanthere.yml and so on,
* these files are treated in the same way as the vanilla file. They serve the purpose of organization
* @param configPrefix the prefix of the file name, for example "repair", "salvage", etc
*/
public void loadCustomCollections(String configPrefix)
{
String vanillaConfigFileName = getVanillaConfigName(configPrefix);
//Find other files
Pattern pattern = Pattern.compile(configPrefix+"\\.(?:.+)\\.yml");
//File dataFolder = McmmoCore.getDataFolderPath();
File dataFolder = mcMMO.p.getDataFolder();
for (String fileName : dataFolder.list()) {
//Vanilla Config is already loaded
if(fileName.equalsIgnoreCase(vanillaConfigFileName))
continue;
//Find files that match the pattern
if (!pattern.matcher(fileName).matches()) {
continue;
}
//Init file
File currentFile = new File(dataFolder, fileName);
//Make sure its not a directory (needed?)
if(currentFile.isDirectory())
continue;
//Load and add the collections
initConfigAndAddCollection(fileName);
}
}
public Collection<T> getCollection() {
return collection;
}
}

View File

@ -1,119 +0,0 @@
package com.gmail.nossr50.config.collectionconfigs;
import com.gmail.nossr50.config.ConfigCollection;
import com.gmail.nossr50.config.ConfigCollections;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.skills.repair.repairables.Repairable;
import com.gmail.nossr50.skills.salvage.salvageables.Salvageable;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.regex.Pattern;
/**
* Represents a collection of config files that serve a similar purpose
* For example, files named repair.*.yml are all loaded into memory, this lets admins keep their config files clean
*
* To be honest I'm not sure how many people make use of this system, but I'm keeping it since its been in mcMMO for like 6+ years
*/
public final class MultiConfigManager {
public static final String DEFAULT_MULTICONFIG_FILENAME_SUFFIX = ".vanilla.yml";
//Configs
public com.gmail.nossr50.config.collectionconfigs.RepairConfig vanillaRepairConfig; //This is the main config file that mcMMO will copy out
public com.gmail.nossr50.config.collectionconfigs.SalvageConfig vanillaSalvageConfig;
private static List<Repairable> repairables;
private static List<Salvageable> salvageables;
public MultiConfigManager(String fileNamePrefix)
{
//init Collections
repairables = new ArrayList<>();
salvageables = new ArrayList<>();
//init vanilla configs
vanillaRepairConfig = new com.gmail.nossr50.config.collectionconfigs.RepairConfig(getVanillaConfigName("repair"));
vanillaSalvageConfig = new com.gmail.nossr50.config.collectionconfigs.SalvageConfig(getVanillaConfigName("salvage"));
//add valid vanilla collections to main collection
repairables.addAll(vanillaRepairConfig.getLoadedCollection());
salvageables.addAll(vanillaSalvageConfig.getLoadedCollection());
//add valid custom collections to main collection
loadCustomCollections("repair", repairables, com.gmail.nossr50.config.collectionconfigs.RepairConfig.class);
loadCustomCollections("salvage", salvageables, com.gmail.nossr50.config.collectionconfigs.SalvageConfig.class);
}
/**
* mcMMO allows collection config files to be named things like repair.whatevernameyouwanthere.yml and so on,
* these files are treated in the same way as the vanilla file. They serve the purpose of organization
* @param configPrefix the prefix of the file name, for example "repair", "salvage", etc
* @param collection the collection that will be added to
*/
public void loadCustomCollections(String configPrefix, Collection<?> collection, Class<? extends ConfigCollection> configClass)
{
String vanillaConfigFileName = getVanillaConfigName(configPrefix);
//Find other files
Pattern pattern = Pattern.compile(configPrefix+"\\.(?:.+)\\.yml");
//File dataFolder = McmmoCore.getDataFolderPath();
File dataFolder = mcMMO.p.getDataFolder();
for (String fileName : dataFolder.list()) {
//Vanilla Config is already loaded
if(fileName.equalsIgnoreCase(vanillaConfigFileName))
continue;
//Find files that match the pattern
if (!pattern.matcher(fileName).matches()) {
continue;
}
//Init file
File currentFile = new File(dataFolder, fileName);
//Make sure its not a directory (needed?)
if(currentFile.isDirectory())
continue;
try {
//TODO: Valid?
ConfigCollections customConfig = (ConfigCollections) getConfigClass(configPrefix).getConstructor(String.class).newInstance(configPrefix);
collection.addAll(customConfig.getLoadedCollection());
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
private String getVanillaConfigName(String configPrefix)
{
return configPrefix+DEFAULT_MULTICONFIG_FILENAME_SUFFIX;
}
private Class getConfigClass(String configPrefix)
{
switch(configPrefix) {
case "repair":
return RepairConfig.class;
case "salvage":
return SalvageConfig.class;
default:
mcMMO.p.getLogger().severe("[DEBUG] Config Class is null!");
return null;
}
}
}

View File

@ -1,7 +1,8 @@
package com.gmail.nossr50.config.collectionconfigs;
import com.gmail.nossr50.config.ConfigCollections;
import com.gmail.nossr50.config.ConfigCollection;
import com.gmail.nossr50.datatypes.skills.MaterialType;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.skills.repair.repairables.Repairable;
import com.gmail.nossr50.skills.repair.repairables.RepairableFactory;
import com.gmail.nossr50.util.ItemUtils;
@ -12,28 +13,16 @@ import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
/**
* This config
*/
public class RepairConfig extends ConfigCollections {
private List<Repairable> repairables;
public class RepairConfig extends ConfigCollection {
public RepairConfig(String fileName) {
super(McmmoCore.getDataFolderPath().getAbsoluteFile(), fileName, false);
}
@Override
public void unload() {
repairables = null;
}
@Override
public Collection getLoadedCollection() {
return repairables == null ? new ArrayList<Repairable>() : repairables;
//super(McmmoCore.getDataFolderPath().getAbsoluteFile(), fileName, false);
super(mcMMO.p.getDataFolder().getAbsoluteFile(), fileName, false);
}
/**
@ -47,9 +36,7 @@ public class RepairConfig extends ConfigCollections {
}
@Override
public void loadKeys() {
repairables = new ArrayList<Repairable>();
public void register() {
ConfigurationNode repairablesNode = getUserRootNode().getNode("Repairables");
List<? extends ConfigurationNode> repairablesNodeChildrenList = repairablesNode.getChildrenList();
Iterator<? extends ConfigurationNode> configIter = repairablesNodeChildrenList.iterator();
@ -164,7 +151,7 @@ public class RepairConfig extends ConfigCollections {
if (noErrorsInRepairable(reason)) {
Repairable repairable = RepairableFactory.getRepairable(itemType, repairMaterial, repairMetadata, minimumLevel, minimumQuantity, maximumDurability, repairConfigItemCategory, repairMaterialType, xpMultiplier);
repairables.add(repairable);
genericCollection.add(repairable);
}
}
}

View File

@ -1,8 +1,9 @@
package com.gmail.nossr50.config.collectionconfigs;
import com.gmail.nossr50.config.ConfigCollections;
import com.gmail.nossr50.config.ConfigCollection;
import com.gmail.nossr50.datatypes.skills.ItemType;
import com.gmail.nossr50.datatypes.skills.MaterialType;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.skills.salvage.salvageables.Salvageable;
import com.gmail.nossr50.skills.salvage.salvageables.SalvageableFactory;
import com.gmail.nossr50.util.ItemUtils;
@ -12,25 +13,14 @@ import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Set;
public class SalvageConfig extends ConfigCollections {
private List<Salvageable> salvageables;
public class SalvageConfig extends ConfigCollection {
public SalvageConfig(String fileName) {
super(McmmoCore.getDataFolderPath().getAbsoluteFile(), fileName, false);
}
@Override
public Collection getLoadedCollection() {
return salvageables == null ? new ArrayList<Salvageable>() : salvageables;
}
@Override
public void unload() {
salvageables = null;
//super(McmmoCore.getDataFolderPath().getAbsoluteFile(), fileName, false);
super(mcMMO.p.getDataFolder().getAbsoluteFile(), fileName, false);
}
/**
@ -44,9 +34,7 @@ public class SalvageConfig extends ConfigCollections {
}
@Override
protected void loadKeys() {
salvageables = new ArrayList<Salvageable>();
public void register() {
ConfigurationSection section = config.getConfigurationSection("Salvageables");
Set<String> keys = section.getKeys(false);
@ -149,7 +137,7 @@ public class SalvageConfig extends ConfigCollections {
if (noErrorsInSalvageable(reason)) {
Salvageable salvageable = SalvageableFactory.getSalvageable(itemMaterial, salvageMaterial, salvageMetadata, minimumLevel, maximumQuantity, maximumDurability, salvageItemType, salvageMaterialType, xpMultiplier);
salvageables.add(salvageable);
genericCollection.add(salvageable);
}
}
}

View File

@ -5,8 +5,9 @@ import com.gmail.nossr50.datatypes.experience.FormulaType;
import com.gmail.nossr50.datatypes.skills.MaterialType;
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
import com.gmail.nossr50.datatypes.skills.alchemy.PotionStage;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.util.StringUtils;
import com.sk89q.worldedit.world.block.BlockType;
import org.bukkit.Material;
import org.bukkit.boss.BarColor;
import org.bukkit.boss.BarStyle;
import org.bukkit.entity.EntityType;
@ -77,7 +78,8 @@ public class ExperienceConfig extends ConfigValidated {
//TODO: Should merge be false? Seems okay to leave it as true..
private ExperienceConfig() {
super(McmmoCore.getDataFolderPath().getAbsoluteFile(), "experience.yml", true);
//super(McmmoCore.getDataFolderPath().getAbsoluteFile(), "experience.yml", true);
super(mcMMO.p.getDataFolder().getAbsoluteFile(), "experience.yml", true);
}
public static ExperienceConfig getInstance() {
@ -305,11 +307,11 @@ public class ExperienceConfig extends ConfigValidated {
/* Combat XP Multipliers */
public double getCombatXP(EntityType entity) {
return getDoubleValue(EXPERIENCE, COMBAT, MULTIPLIER1, entity.getConfigName());
return getDoubleValue(EXPERIENCE, COMBAT, MULTIPLIER1, StringUtils.getEntityConfigName(entity));
}
public double getAnimalsXP(EntityType entity) {
return getDoubleValue(EXPERIENCE, COMBAT, MULTIPLIER1, entity.getConfigName());
return getDoubleValue(EXPERIENCE, COMBAT, MULTIPLIER1, StringUtils.getEntityConfigName(entity));
}
public double getAnimalsXP() {
@ -317,7 +319,7 @@ public class ExperienceConfig extends ConfigValidated {
}
public boolean hasCombatXP(EntityType entity) {
return hasNode(EXPERIENCE, COMBAT, MULTIPLIER1, entity.getConfigName());
return hasNode(EXPERIENCE, COMBAT, MULTIPLIER1, StringUtils.getEntityConfigName(entity));
}
/* Materials */
@ -328,9 +330,10 @@ public class ExperienceConfig extends ConfigValidated {
* @param blockType the type of block
* @return the raw amount of XP for this block before modifiers
*/
public int getXp(PrimarySkillType skill, BlockType blockType) {
//public int getXp(PrimarySkillType skill, BlockType blockType) {
public int getXp(PrimarySkillType skill, Material blockType) {
//TODO: This is going to need to be changed, this code here is only placeholder
String[] path = new String[]{ EXPERIENCE, StringUtils.getCapitalized(skill.toString()), blockType.getConfigName() };
String[] path = new String[]{ EXPERIENCE, StringUtils.getCapitalized(skill.toString()), blockType.toString()};
return getIntValue(path);
}
@ -342,10 +345,10 @@ public class ExperienceConfig extends ConfigValidated {
* @param blockType the type of block
* @return true if the block does give XP
*/
public boolean doesBlockGiveSkillXP(PrimarySkillType skill, BlockType blockType) {
public boolean doesBlockGiveSkillXP(PrimarySkillType skill, Material blockType) {
//TODO: This used to support wildcard characters, seems a bit unnecessary to do so.
//TODO: This is going to need to be changed, this code here is only placeholder
String[] path = new String[] {EXPERIENCE, StringUtils.getCapitalized(skill.toString()), blockType.getConfigName()};
String[] path = new String[] {EXPERIENCE, StringUtils.getCapitalized(skill.toString()), blockType.toString()};
return hasNode(path);
}
@ -443,6 +446,6 @@ public class ExperienceConfig extends ConfigValidated {
/* Taming */
public int getTamingXP(EntityType type) {
return getIntValue(EXPERIENCE, TAMING, ANIMAL_TAMING, type.getConfigName());
return getIntValue(EXPERIENCE, TAMING, ANIMAL_TAMING, StringUtils.getEntityConfigName(type));
}
}

View File

@ -1,6 +1,6 @@
package com.gmail.nossr50.config.mods;
import com.gmail.nossr50.config.ConfigCollections;
import com.gmail.nossr50.config.ConfigCollection;
import com.gmail.nossr50.datatypes.skills.MaterialType;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.skills.repair.repairables.Repairable;
@ -14,7 +14,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Set;
public class CustomArmorConfig extends ConfigCollections {
public class CustomArmorConfig extends ConfigCollection {
public List<Material> customBoots = new ArrayList<Material>();
public List<Material> customChestplates = new ArrayList<Material>();
public List<Material> customHelmets = new ArrayList<Material>();
@ -24,7 +24,7 @@ public class CustomArmorConfig extends ConfigCollections {
protected CustomArmorConfig(String fileName) {
//super(McmmoCore.getDataFolderPath().getPath() + "mods", fileName, false);
super(mcMMO.p.getDataFolder().getPath() + "mods", fileName, false); loadKeys();
super(mcMMO.p.getDataFolder().getPath() + "mods", fileName, false); register();
}
/**
@ -38,7 +38,7 @@ public class CustomArmorConfig extends ConfigCollections {
}
@Override
public void loadKeys() {
public void register() {
loadArmor("Boots", customBoots);
loadArmor("Chestplates", customChestplates);
loadArmor("Helmets", customHelmets);

View File

@ -1,6 +1,6 @@
package com.gmail.nossr50.config.mods;
import com.gmail.nossr50.config.ConfigCollections;
import com.gmail.nossr50.config.ConfigCollection;
import com.gmail.nossr50.datatypes.mods.CustomBlock;
import com.gmail.nossr50.mcMMO;
import org.bukkit.Material;
@ -11,7 +11,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Set;
public class CustomBlockConfig extends ConfigCollections {
public class CustomBlockConfig extends ConfigCollection {
public List<Material> customExcavationBlocks = new ArrayList<>();
public List<Material> customHerbalismBlocks = new ArrayList<>();
public List<Material> customMiningBlocks = new ArrayList<>();
@ -25,11 +25,11 @@ public class CustomBlockConfig extends ConfigCollections {
protected CustomBlockConfig(String fileName) {
//super(McmmoCore.getDataFolderPath().getPath() + "mods", fileName, false);
super(mcMMO.p.getDataFolder().getPath() + "mods", fileName, false);
loadKeys();
register();
}
@Override
protected void loadKeys() {
protected void register() {
loadBlocks("Excavation", customExcavationBlocks);
loadBlocks("Herbalism", customHerbalismBlocks);
loadBlocks("Mining", customMiningBlocks);

View File

@ -1,6 +1,6 @@
package com.gmail.nossr50.config.skills.alchemy;
import com.gmail.nossr50.config.ConfigCollections;
import com.gmail.nossr50.config.ConfigCollection;
import com.gmail.nossr50.datatypes.skills.alchemy.AlchemyPotion;
import com.gmail.nossr50.mcMMO;
import org.bukkit.Color;
@ -14,8 +14,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class PotionConfig extends ConfigCollections {
private static PotionConfig instance;
public class PotionConfig extends ConfigCollection {
private List<ItemStack> concoctionsIngredientsTierOne = new ArrayList<ItemStack>();
private List<ItemStack> concoctionsIngredientsTierTwo = new ArrayList<ItemStack>();
@ -28,21 +27,23 @@ public class PotionConfig extends ConfigCollections {
private Map<String, AlchemyPotion> potionMap = new HashMap<String, AlchemyPotion>();
private PotionConfig() {
super(McmmoCore.getDataFolderPath().getAbsoluteFile(),"potions.yml");
loadKeys();
public PotionConfig() {
super(mcMMO.p.getDataFolder().getAbsoluteFile(), "potions.yml", true);
register();
}
public static PotionConfig getInstance() {
if (instance == null) {
instance = new PotionConfig();
}
return instance;
/**
* The version of this config
*
* @return
*/
@Override
public double getConfigVersion() {
return 1;
}
@Override
protected void loadKeys() {
public void register() {
loadConcoctions();
loadPotionMap();
}

View File

@ -1,6 +1,6 @@
package com.gmail.nossr50.config.treasure;
import com.gmail.nossr50.config.ConfigCollections;
import com.gmail.nossr50.config.ConfigCollection;
import com.gmail.nossr50.datatypes.treasure.*;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.util.EnchantmentUtils;
@ -20,9 +20,9 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class TreasureConfig extends ConfigCollections {
public class TreasureConfig extends ConfigCollection {
private static TreasureConfig instance;
//private static TreasureConfig instance;
public HashMap<String, List<ExcavationTreasure>> excavationMap = new HashMap<String, List<ExcavationTreasure>>();
@ -32,18 +32,18 @@ public class TreasureConfig extends ConfigCollections {
public HashMap<Rarity, List<FishingTreasure>> fishingRewards = new HashMap<Rarity, List<FishingTreasure>>();
public HashMap<Rarity, List<EnchantmentTreasure>> fishingEnchantments = new HashMap<Rarity, List<EnchantmentTreasure>>();
private TreasureConfig() {
public TreasureConfig() {
//super(McmmoCore.getDataFolderPath().getAbsoluteFile(),"treasures.yml");
super(mcMMO.p.getDataFolder().getAbsoluteFile(), "treasures.yml");
super(mcMMO.p.getDataFolder().getAbsoluteFile(), "treasures.yml", true);
}
public static TreasureConfig getInstance() {
/*public static TreasureConfig getInstance() {
if (instance == null) {
instance = new TreasureConfig();
}
return instance;
}
}*/
@Override
protected boolean validateKeys() {
@ -82,7 +82,7 @@ public class TreasureConfig extends ConfigCollections {
}
@Override
protected void loadKeys() {
protected void register() {
if (config.getConfigurationSection("Treasures") != null) {
backup();
return;

View File

@ -41,7 +41,7 @@ public abstract class AbstractSubSkill implements SubSkill, Interaction, Rank, S
@Override @Deprecated
public boolean isEnabled() {
//TODO: This might be troublesome...
return CoreSkillsMainConfig.getInstance().isSkillEnabled(this);
return CoreSkillConfig.getInstance().isSkillEnabled(this);
}
/**

View File

@ -1,13 +1,8 @@
package com.gmail.nossr50;
import com.gmail.nossr50.config.MainConfig;
import com.gmail.nossr50.config.WorldBlacklist;
import com.gmail.nossr50.config.mods.ArmorConfigManager;
import com.gmail.nossr50.config.mods.BlockConfigManager;
import com.gmail.nossr50.config.mods.EntityConfigManager;
import com.gmail.nossr50.config.mods.ToolConfigManager;
import com.gmail.nossr50.config.skills.repair.RepairConfigManager;
import com.gmail.nossr50.config.skills.salvage.SalvageConfigManager;
import com.gmail.nossr50.config.*;
import com.gmail.nossr50.config.collectionconfigs.ConfigManager;
import com.gmail.nossr50.config.experience.ExperienceConfig;
import com.gmail.nossr50.database.DatabaseManager;
import com.gmail.nossr50.database.DatabaseManagerFactory;
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
@ -24,13 +19,8 @@ import com.gmail.nossr50.runnables.player.PlayerProfileLoadingTask;
import com.gmail.nossr50.runnables.player.PowerLevelUpdatingTask;
import com.gmail.nossr50.runnables.skills.BleedTimerTask;
import com.gmail.nossr50.skills.alchemy.Alchemy;
import com.gmail.nossr50.skills.child.ChildConfig;
import com.gmail.nossr50.skills.repair.repairables.Repairable;
import com.gmail.nossr50.skills.repair.repairables.RepairableManager;
import com.gmail.nossr50.skills.repair.repairables.SimpleRepairableManager;
import com.gmail.nossr50.skills.salvage.salvageables.Salvageable;
import com.gmail.nossr50.skills.salvage.salvageables.SalvageableManager;
import com.gmail.nossr50.skills.salvage.salvageables.SimpleSalvageableManager;
import com.gmail.nossr50.util.*;
import com.gmail.nossr50.util.blockmeta.chunkmeta.ChunkManager;
import com.gmail.nossr50.util.blockmeta.chunkmeta.ChunkManagerFactory;
@ -54,14 +44,11 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class mcMMO extends JavaPlugin {
/* Managers */
private static ChunkManager placeStore;
private static RepairableManager repairableManager;
private static SalvageableManager salvageableManager;
private static ConfigManager configManager;
private static ModManager modManager;
private static DatabaseManager databaseManager;
private static FormulaManager formulaManager;
@ -217,7 +204,7 @@ public class mcMMO extends JavaPlugin {
}
//Init the blacklist
worldBlacklist = new WorldBlacklist(this);
worldBlacklist = new WorldBlacklist();
}
@Override
@ -274,6 +261,11 @@ public class mcMMO extends JavaPlugin {
}
databaseManager.onDisable();
//Unload configs last
configManager.unloadAllConfigsAndRegisters();
debug("Was disabled."); // How informative!
}
@ -412,54 +404,9 @@ public class mcMMO extends JavaPlugin {
}
private void loadConfigFiles() {
// New Config System
ConfigurableTest.getInstance(); //Init
// End New Config System
configManager = new ConfigManager();
// Force the loading of config files
TreasureConfig.getInstance();
HiddenConfig.getInstance();
AdvancedConfig.getInstance();
PotionConfig.getInstance();
CoreSkillsMainConfig.getInstance();
SoundConfig.getInstance();
RankConfig.getInstance();
new ChildConfig();
List<Repairable> repairables = new ArrayList<Repairable>();
List<Salvageable> salvageables = new ArrayList<Salvageable>();
if (MainConfig.getInstance().getToolModsEnabled()) {
new ToolConfigManager(this);
}
if (MainConfig.getInstance().getArmorModsEnabled()) {
new ArmorConfigManager(this);
}
if (MainConfig.getInstance().getBlockModsEnabled()) {
new BlockConfigManager(this);
}
if (MainConfig.getInstance().getEntityModsEnabled()) {
new EntityConfigManager(this);
}
// Load repair configs, make manager, and register them at this time
repairables.addAll(new RepairConfigManager(this).getLoadedRepairables());
repairables.addAll(modManager.getLoadedRepairables());
repairableManager = new SimpleRepairableManager(repairables.size());
repairableManager.registerRepairables(repairables);
// Load salvage configs, make manager and register them at this time
SalvageConfigManager sManager = new SalvageConfigManager(this);
salvageables.addAll(sManager.getLoadedSalvageables());
salvageableManager = new SimpleSalvageableManager(salvageables.size());
salvageableManager.registerSalvageables(salvageables);
}
private void registerEvents() {
@ -483,13 +430,13 @@ public class mcMMO extends JavaPlugin {
* Acrobatics skills
*/
if(CoreSkillsMainConfig.getInstance().isPrimarySkillEnabled(PrimarySkillType.ACROBATICS))
if(CoreSkillsConfig.getInstance().isPrimarySkillEnabled(PrimarySkillType.ACROBATICS))
{
System.out.println("[mcMMO]" + " enabling Acrobatics Skills");
//TODO: Should do this differently
Roll roll = new Roll();
CoreSkillsMainConfig.getInstance().isSkillEnabled(roll);
CoreSkillsConfig.getInstance().isSkillEnabled(roll);
InteractionManager.registerSubSkill(new Roll());
}
}

View File

@ -1,6 +1,5 @@
package com.gmail.nossr50.skills.child;
import com.gmail.nossr50.config.AutoUpdateConfigLoader;
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
import com.gmail.nossr50.util.StringUtils;
import org.bukkit.configuration.file.YamlConfiguration;

View File

@ -1,6 +1,8 @@
package com.gmail.nossr50.skills.repair;
import com.gmail.nossr50.config.AdvancedConfig;
import com.gmail.nossr50.config.MainConfig;
import com.gmail.nossr50.config.experience.ExperienceConfig;
import com.gmail.nossr50.datatypes.experience.XPGainReason;
import com.gmail.nossr50.datatypes.interactions.NotificationType;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;

View File

@ -1,11 +1,12 @@
package com.gmail.nossr50.skills.repair.repairables;
import com.gmail.nossr50.config.Unload;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import java.util.List;
public interface RepairableManager {
public interface RepairableManager extends Unload {
/**
* Register a repairable with the RepairManager
*

View File

@ -1,20 +1,24 @@
package com.gmail.nossr50.skills.repair.repairables;
import com.gmail.nossr50.config.Unload;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
public class SimpleRepairableManager implements RepairableManager {
private HashMap<Material, Repairable> repairables;
public SimpleRepairableManager() {
this(55);
@Override
public void unload() {
repairables.clear();
}
public SimpleRepairableManager(int repairablesSize) {
this.repairables = new HashMap<Material, Repairable>(repairablesSize);
public SimpleRepairableManager(List<Repairable> repairablesCollection) {
this.repairables = new HashMap<Material, Repairable>(repairablesCollection.size());
registerRepairables(repairablesCollection);
}
@Override

View File

@ -1,11 +1,12 @@
package com.gmail.nossr50.skills.salvage.salvageables;
import com.gmail.nossr50.config.Unload;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import java.util.List;
public interface SalvageableManager {
public interface SalvageableManager extends Unload {
/**
* Register a salvageable with the SalvageManager
*

View File

@ -10,12 +10,18 @@ import java.util.List;
public class SimpleSalvageableManager implements SalvageableManager {
private HashMap<Material, Salvageable> salvageables;
public SimpleSalvageableManager() {
/*public SimpleSalvageableManager() {
this(55);
}*/
@Override
public void unload() {
salvageables.clear();
}
public SimpleSalvageableManager(int salvageablesSize) {
this.salvageables = new HashMap<Material, Salvageable>(salvageablesSize);
public SimpleSalvageableManager(List<Salvageable> salvageablesCollection) {
this.salvageables = new HashMap<Material, Salvageable>(salvageablesCollection.size());
registerSalvageables(salvageablesCollection);
}
@Override

View File

@ -20,6 +20,16 @@ public class StringUtils {
return target.substring(0, 1).toUpperCase() + target.substring(1).toLowerCase();
}
/**
* Gets the name of the entity that the config file is expecting
* @param entityType target entity type
* @return the config friendly entity type string
*/
public static String getEntityConfigName(EntityType entityType)
{
return entityType.toString();
}
public static String getPrettyItemString(Material material) {
return createPrettyString(material.toString());
}