package com.gmail.nossr50.config; import com.gmail.nossr50.config.collectionconfigs.RepairConfig; import com.gmail.nossr50.config.collectionconfigs.SalvageConfig; import com.gmail.nossr50.config.experience.ExperienceConfig; import com.gmail.nossr50.config.hocon.CustomEnumValueSerializer; import com.gmail.nossr50.config.hocon.SerializedConfigLoader; import com.gmail.nossr50.config.hocon.admin.ConfigAdmin; import com.gmail.nossr50.config.hocon.antiexploit.ConfigExploitPrevention; import com.gmail.nossr50.config.hocon.backup.ConfigAutomatedBackups; import com.gmail.nossr50.config.hocon.commands.ConfigCommands; import com.gmail.nossr50.config.hocon.database.ConfigDatabase; import com.gmail.nossr50.config.hocon.donation.ConfigAuthorAdvertisements; import com.gmail.nossr50.config.hocon.hardcore.ConfigHardcore; import com.gmail.nossr50.config.hocon.items.ConfigItems; import com.gmail.nossr50.config.hocon.language.ConfigLanguage; import com.gmail.nossr50.config.hocon.metrics.ConfigMetrics; import com.gmail.nossr50.config.hocon.mobs.ConfigMobs; import com.gmail.nossr50.config.hocon.motd.ConfigMOTD; import com.gmail.nossr50.config.hocon.notifications.ConfigNotifications; import com.gmail.nossr50.config.hocon.particles.ConfigParticles; import com.gmail.nossr50.config.hocon.party.ConfigParty; import com.gmail.nossr50.config.hocon.party.data.ConfigPartyData; import com.gmail.nossr50.config.hocon.playerleveling.ConfigLeveling; import com.gmail.nossr50.config.hocon.scoreboard.ConfigScoreboard; import com.gmail.nossr50.config.hocon.skills.acrobatics.ConfigAcrobatics; import com.gmail.nossr50.config.hocon.skills.alchemy.ConfigAlchemy; import com.gmail.nossr50.config.hocon.skills.archery.ConfigArchery; import com.gmail.nossr50.config.hocon.skills.axes.ConfigAxes; import com.gmail.nossr50.config.hocon.skills.excavation.ConfigExcavation; import com.gmail.nossr50.config.hocon.skills.fishing.ConfigFishing; import com.gmail.nossr50.config.hocon.skills.herbalism.ConfigHerbalism; import com.gmail.nossr50.config.hocon.skills.mining.ConfigMining; import com.gmail.nossr50.config.hocon.skills.repair.ConfigRepair; import com.gmail.nossr50.config.hocon.skills.salvage.ConfigSalvage; import com.gmail.nossr50.config.hocon.skills.smelting.ConfigSmelting; import com.gmail.nossr50.config.hocon.skills.swords.ConfigSwords; import com.gmail.nossr50.config.hocon.skills.taming.ConfigTaming; import com.gmail.nossr50.config.hocon.skills.unarmed.ConfigUnarmed; import com.gmail.nossr50.config.hocon.skills.woodcutting.ConfigWoodcutting; import com.gmail.nossr50.config.hocon.superabilities.ConfigSuperAbilities; import com.gmail.nossr50.config.hocon.worldblacklist.ConfigWorldBlacklist; import com.gmail.nossr50.config.skills.alchemy.PotionConfig; import com.gmail.nossr50.config.treasure.ExcavationTreasureConfig; import com.gmail.nossr50.config.treasure.FishingTreasureConfig; import com.gmail.nossr50.config.treasure.HerbalismTreasureConfig; import com.gmail.nossr50.datatypes.party.PartyFeature; import com.gmail.nossr50.mcMMO; 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 com.gmail.nossr50.util.experience.ExperienceMapManager; import com.google.common.collect.Maps; import com.google.common.reflect.TypeToken; import ninja.leaping.configurate.objectmapping.serialize.TypeSerializers; import org.bukkit.Material; import java.io.File; import java.util.ArrayList; import java.util.HashMap; /** * * 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 */ public final class ConfigManager { /* UNLOAD REGISTER */ private ArrayList unloadables; private ArrayList userFiles; /* MULTI CONFIG INSTANCES */ //private MultiConfigContainer repairableMultiConfigContainer; //private MultiConfigContainer salvageableMultiConfigContainer; /* COLLECTION MANAGERS */ private SimpleRepairableManager simpleRepairableManager; private SimpleSalvageableManager simpleSalvageableManager; /* MOD MANAGERS */ //TODO: Add these back when modded servers become a thing again /* MISC MANAGERS */ private ExperienceMapManager experienceMapManager; //private ModManager modManager; /*private ToolConfigManager toolConfigManager; private ArmorConfigManager armorConfigManager; private BlockConfigManager blockConfigManager; private EntityConfigManager entityConfigManager;*/ /* CONFIG INSTANCES */ private SerializedConfigLoader configDatabase; private SerializedConfigLoader configScoreboard; private SerializedConfigLoader configLeveling; private SerializedConfigLoader configWorldBlacklist; private SerializedConfigLoader configExploitPrevention; private SerializedConfigLoader configHardcore; private SerializedConfigLoader configMetrics; private SerializedConfigLoader configMOTD; private SerializedConfigLoader configAuthorAdvertisements; private SerializedConfigLoader configAutomatedBackups; private SerializedConfigLoader configCommands; private SerializedConfigLoader configItems; private SerializedConfigLoader configLanguage; private SerializedConfigLoader configParticles; private SerializedConfigLoader configParty; private SerializedConfigLoader configNotifications; private SerializedConfigLoader configSuperAbilities; private SerializedConfigLoader configAdmin; private SerializedConfigLoader configMobs; private SerializedConfigLoader configAcrobatics; private SerializedConfigLoader configAlchemy; private SerializedConfigLoader configArchery; private SerializedConfigLoader configAxes; private SerializedConfigLoader configExcavation; private SerializedConfigLoader configFishing; private SerializedConfigLoader configHerbalism; private SerializedConfigLoader configMining; private SerializedConfigLoader configRepair; private SerializedConfigLoader configSwords; private SerializedConfigLoader configTaming; private SerializedConfigLoader configUnarmed; private SerializedConfigLoader configWoodcutting; private SerializedConfigLoader configSmelting; private SerializedConfigLoader configSalvage; //Data private SerializedConfigLoader partyData; private MainConfig mainConfig; private FishingTreasureConfig fishingTreasureConfig; private ExcavationTreasureConfig excavationTreasureConfig; private HerbalismTreasureConfig herbalismTreasureConfig; private ExperienceConfig experienceConfig; private AdvancedConfig advancedConfig; private PotionConfig potionConfig; private CoreSkillsConfig coreSkillsConfig; private SoundConfig soundConfig; private RankConfig rankConfig; private RepairConfig repairConfig; private SalvageConfig salvageConfig; private HashMap partyItemWeights; private HashMap partyFeatureUnlocks; /* CONFIG ERRORS */ private ArrayList configErrors; //Collect errors to whine about to server admins public ConfigManager() { unloadables = new ArrayList<>(); userFiles = new ArrayList<>(); } public void loadConfigs() { // Load Config Files // I'm pretty these are supposed to be done in a specific order, so don't rearrange them willy nilly //Register Custom Serializers mcMMO.p.getLogger().info("Registering custom type serializers with Configurate..."); /* TypeTokens are obtained in two ways For Raw basic classes: TypeToken stringTok = TypeToken.of(String.class); TypeToken intTok = TypeToken.of(Integer.class); For Generics: TypeToken> stringListTok = new TypeToken>() {}; Wildcard example: TypeToken> wildMapTok = new TypeToken>() {}; */ /* List of default serializers for reference DEFAULT_SERIALIZERS.registerType(TypeToken.of(URI.class), new URISerializer()); DEFAULT_SERIALIZERS.registerType(TypeToken.of(URL.class), new URLSerializer()); DEFAULT_SERIALIZERS.registerType(TypeToken.of(UUID.class), new UUIDSerializer()); DEFAULT_SERIALIZERS.registerPredicate(input -> input.getRawType().isAnnotationPresent(ConfigSerializable.class), new AnnotatedObjectSerializer()); DEFAULT_SERIALIZERS.registerPredicate(NumberSerializer.getPredicate(), new NumberSerializer()); DEFAULT_SERIALIZERS.registerType(TypeToken.of(String.class), new StringSerializer()); DEFAULT_SERIALIZERS.registerType(TypeToken.of(Boolean.class), new BooleanSerializer()); DEFAULT_SERIALIZERS.registerType(new TypeToken>() {}, new MapSerializer()); DEFAULT_SERIALIZERS.registerType(new TypeToken>() {}, new ListSerializer()); DEFAULT_SERIALIZERS.registerType(new TypeToken>() {}, new EnumValueSerializer()); DEFAULT_SERIALIZERS.registerType(TypeToken.of(Pattern.class), new PatternSerializer()); */ TypeSerializers.getDefaultSerializers().registerType(new TypeToken() {}, new CustomEnumValueSerializer()); TypeSerializers.getDefaultSerializers().registerType(new TypeToken() {}, new CustomEnumValueSerializer()); mcMMO.p.getLogger().info("Deserializing configs..."); //TODO: Not sure about the order of MainConfig //Serialized Configs configDatabase = new SerializedConfigLoader<>(ConfigDatabase.class, "database_settings.conf", "Database", null); configScoreboard = new SerializedConfigLoader<>(ConfigScoreboard.class, "scoreboard.conf", "Scoreboard", null); configLeveling = new SerializedConfigLoader<>(ConfigLeveling.class, "player_leveling.conf", "Player-Leveling", null); configWorldBlacklist = new SerializedConfigLoader<>(ConfigWorldBlacklist.class, "world_blacklist.conf", "World-Blacklist", null); configExploitPrevention = new SerializedConfigLoader<>(ConfigExploitPrevention.class, "anti_exploit.conf", "Anti-Exploit", null); configMOTD = new SerializedConfigLoader<>(ConfigMOTD.class, "message_of_the_day.conf", "MOTD", null); configHardcore = new SerializedConfigLoader<>(ConfigHardcore.class, "hardcore_mode.conf", "Hardcore-Mode", null); configMetrics = new SerializedConfigLoader<>(ConfigMetrics.class, "analytics_reporting.conf", "Analytic-Reporting", null); configAuthorAdvertisements = new SerializedConfigLoader<>(ConfigAuthorAdvertisements.class, "author_support_advertisements.conf", "mcMMO", null); configAutomatedBackups = new SerializedConfigLoader<>(ConfigAutomatedBackups.class, "automated_backups.conf", "Automated-Backups", null); configCommands = new SerializedConfigLoader<>(ConfigCommands.class, "commands.conf", "Commands", null); configItems = new SerializedConfigLoader<>(ConfigItems.class, "custom_items.conf", "Items", null); configLanguage = new SerializedConfigLoader<>(ConfigLanguage.class, "language.conf", "Language", null); configParticles = new SerializedConfigLoader<>(ConfigParticles.class, "particle_spawning.conf", "Particles", null); configParty = new SerializedConfigLoader<>(ConfigParty.class, "party.conf", "Party", null); configNotifications = new SerializedConfigLoader<>(ConfigNotifications.class, "alerts_and_notifications.conf", "Notifications", null); configSuperAbilities = new SerializedConfigLoader<>(ConfigSuperAbilities.class, "skill_super_abilities.conf", "Super-Abilities", null); configAdmin = new SerializedConfigLoader<>(ConfigAdmin.class, "admin.conf", "Admin", null); configMobs = new SerializedConfigLoader<>(ConfigMobs.class, "creatures.conf", "Creatures", null); configAcrobatics = new SerializedConfigLoader<>(ConfigAcrobatics.class, "acrobatics.conf", "Acrobatics", null); configSalvage = new SerializedConfigLoader<>(ConfigSalvage.class, "salvage.conf", "Salvage", null); configArchery = new SerializedConfigLoader<>(ConfigArchery.class, "archery.conf", "Archery", null); configAxes = new SerializedConfigLoader<>(ConfigAxes.class, "axes.conf", "Axes", null); configExcavation = new SerializedConfigLoader<>(ConfigExcavation.class, "excavation.conf", "Excavation", null); configFishing = new SerializedConfigLoader<>(ConfigFishing.class, "fishing.conf", "Fishing", null); configHerbalism = new SerializedConfigLoader<>(ConfigHerbalism.class, "herbalism.conf", "Herbalism", null); configMining = new SerializedConfigLoader<>(ConfigMining.class, "mining.conf", "Mining", null); configRepair = new SerializedConfigLoader<>(ConfigRepair.class, "repair.conf", "Repair", null); configSwords = new SerializedConfigLoader<>(ConfigSwords.class, "swords.conf", "Swords", null); configTaming = new SerializedConfigLoader<>(ConfigTaming.class, "taming.conf", "Taming", null); configUnarmed = new SerializedConfigLoader<>(ConfigUnarmed.class, "unarmed.conf", "Unarmed", null); configWoodcutting = new SerializedConfigLoader<>(ConfigWoodcutting.class, "woodcutting.conf", "Woodcutting", null); configSmelting = new SerializedConfigLoader<>(ConfigSmelting.class, "smelting.conf", "Smelting", null); //Serialized Data partyData = new SerializedConfigLoader<>(ConfigPartyData.class, "partydata.conf", "PartyData", null); //Assign Maps partyItemWeights = Maps.newHashMap(configParty.getConfig().getPartyItemShare().getItemShareMap()); //Item Share Weights partyFeatureUnlocks = Maps.newHashMap(configParty.getConfig().getPartyXP().getPartyLevel().getPartyFeatureUnlockMap()); //Party Progression //YAML Configs mainConfig = new MainConfig(); fishingTreasureConfig = new FishingTreasureConfig(); excavationTreasureConfig = new ExcavationTreasureConfig(); herbalismTreasureConfig = new HerbalismTreasureConfig(); advancedConfig = new AdvancedConfig(); //TODO: Not sure about the order of experience config experienceConfig = new ExperienceConfig(); potionConfig = new PotionConfig(); coreSkillsConfig = new CoreSkillsConfig(); soundConfig = new SoundConfig(); rankConfig = new RankConfig(); repairConfig = new RepairConfig(); salvageConfig = new SalvageConfig(); /* * Managers */ // Register Managers initMiscManagers(); initCollectionManagers(); } /** * Misc managers */ private void initMiscManagers() { experienceMapManager = new ExperienceMapManager(); } /** * 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 getRepairables() { return (ArrayList) repairConfig.genericCollection; } /** * Get all loaded salvageables (loaded from all salvageable configs) * @return the currently loaded salvageables */ public ArrayList getSalvageables() { return (ArrayList) salvageConfig.genericCollection; } /** * Unloads all config options (prepares for reload) */ public void unloadAllConfigsAndRegisters() { //Unload for(Unload unloadable : unloadables) { unloadable.unload(); } //Clear unloadables.clear(); userFiles.clear(); } /** * Registers an unloadable * Unloadables call unload() on plugin disable to cleanup registries */ public void registerUnloadable(Unload unload) { if(!unloadables.contains(unload)) unloadables.add(unload); } /** * Registers an unloadable * Unloadables call unload() on plugin disable to cleanup registries */ public void registerUserFile(File userFile) { if(!userFiles.contains(userFile)) userFiles.add(userFile); } /* * GETTER BOILER PLATE */ /** * Used to back up our zip files real easily * @return */ public ArrayList getConfigFiles() { return userFiles; } public SimpleRepairableManager getSimpleRepairableManager() { return simpleRepairableManager; } public SimpleSalvageableManager getSimpleSalvageableManager() { return simpleSalvageableManager; } public MainConfig getMainConfig() { return mainConfig; } public FishingTreasureConfig getFishingTreasureConfig() { return fishingTreasureConfig; } public ExcavationTreasureConfig getExcavationTreasureConfig() { return excavationTreasureConfig; } public HerbalismTreasureConfig getHerbalismTreasureConfig() { return herbalismTreasureConfig; } public AdvancedConfig getAdvancedConfig() { return advancedConfig; } public PotionConfig getPotionConfig() { return potionConfig; } public CoreSkillsConfig getCoreSkillsConfig() { return coreSkillsConfig; } public SoundConfig getSoundConfig() { return soundConfig; } public RankConfig getRankConfig() { return rankConfig; } public ExperienceConfig getExperienceConfig() { return experienceConfig; } public ExperienceMapManager getExperienceMapManager() { return experienceMapManager; } public ConfigDatabase getConfigDatabase() { return configDatabase.getConfig(); } public ConfigScoreboard getConfigScoreboard() { return configScoreboard.getConfig(); } public ConfigLeveling getConfigLeveling() { return configLeveling.getConfig(); } public ConfigWorldBlacklist getConfigWorldBlacklist() { return configWorldBlacklist.getConfig(); } public ConfigExploitPrevention getConfigExploitPrevention() { return configExploitPrevention.getConfig(); } public ConfigMOTD getConfigMOTD() { return configMOTD.getConfig(); } public ConfigHardcore getConfigHardcore() { return configHardcore.getConfig(); } public ConfigMetrics getConfigMetrics() { return configMetrics.getConfig(); } public ConfigAuthorAdvertisements getConfigAds() { return configAuthorAdvertisements.getConfig(); } public ConfigAutomatedBackups getConfigAutomatedBackups() { return configAutomatedBackups.getConfig(); } public ConfigCommands getConfigCommands() { return configCommands.getConfig(); } public ConfigItems getConfigItems() { return configItems.getConfig(); } public ConfigLanguage getConfigLanguage() { return configLanguage.getConfig(); } public ConfigParticles getConfigParticles() { return configParticles.getConfig(); } public ConfigParty getConfigParty() { return configParty.getConfig(); } public ConfigNotifications getConfigNotifications() { return configNotifications.getConfig(); } public ConfigSuperAbilities getConfigSuperAbilities() { return configSuperAbilities.getConfig(); } public HashMap getPartyItemWeights() { return partyItemWeights; } public HashMap getPartyFeatureUnlocks() { return partyFeatureUnlocks; } public ConfigAdmin getConfigAdmin() { return configAdmin.getConfig(); } public ConfigMobs getConfigMobs() { return configMobs.getConfig(); } public ConfigAcrobatics getConfigAcrobatics() { return configAcrobatics.getConfig(); } public ConfigAlchemy getConfigAlchemy() { return configAlchemy.getConfig(); } public ConfigArchery getConfigArchery() { return configArchery.getConfig(); } public ConfigAxes getConfigAxes() { return configAxes.getConfig(); } public ConfigExcavation getConfigExcavation() { return configExcavation.getConfig(); } public ConfigFishing getConfigFishing() { return configFishing.getConfig(); } public ConfigHerbalism getConfigHerbalism() { return configHerbalism.getConfig(); } public ConfigMining getConfigMining() { return configMining.getConfig(); } public ConfigRepair getConfigRepair() { return configRepair.getConfig(); } public ConfigSwords getConfigSwords() { return configSwords.getConfig(); } public ConfigTaming getConfigTaming() { return configTaming.getConfig(); } public ConfigUnarmed getConfigUnarmed() { return configUnarmed.getConfig(); } public ConfigWoodcutting getConfigWoodcutting() { return configWoodcutting.getConfig(); } public ConfigSmelting getConfigSmelting() { return configSmelting.getConfig(); } public ConfigSalvage getConfigSalvage() { return configSalvage.getConfig(); } }