ConfigManager.java 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. package com.gmail.nossr50.config;
  2. import com.gmail.nossr50.config.collectionconfigs.RepairConfig;
  3. import com.gmail.nossr50.config.collectionconfigs.SalvageConfig;
  4. import com.gmail.nossr50.config.experience.ExperienceConfig;
  5. import com.gmail.nossr50.config.hocon.SerializedConfigLoader;
  6. import com.gmail.nossr50.config.hocon.database.ConfigDatabase;
  7. import com.gmail.nossr50.config.hocon.playerleveling.ConfigLeveling;
  8. import com.gmail.nossr50.config.hocon.scoreboard.ConfigScoreboard;
  9. import com.gmail.nossr50.config.party.ItemWeightConfig;
  10. import com.gmail.nossr50.config.skills.alchemy.PotionConfig;
  11. import com.gmail.nossr50.config.treasure.ExcavationTreasureConfig;
  12. import com.gmail.nossr50.config.treasure.FishingTreasureConfig;
  13. import com.gmail.nossr50.config.treasure.HerbalismTreasureConfig;
  14. import com.gmail.nossr50.skills.repair.repairables.Repairable;
  15. import com.gmail.nossr50.skills.repair.repairables.SimpleRepairableManager;
  16. import com.gmail.nossr50.skills.salvage.salvageables.Salvageable;
  17. import com.gmail.nossr50.skills.salvage.salvageables.SimpleSalvageableManager;
  18. import com.gmail.nossr50.util.experience.ExperienceMapManager;
  19. import java.io.File;
  20. import java.util.ArrayList;
  21. /**
  22. *
  23. * The Config Manager handles initializing, loading, and unloading registers for all configs that mcMMO uses
  24. * This makes sure that mcMMO properly loads and unloads its values on reload
  25. *
  26. * Config Manager also holds all of our MultiConfigContainers
  27. */
  28. public final class ConfigManager {
  29. /* UNLOAD REGISTER */
  30. private ArrayList<Unload> unloadables;
  31. private ArrayList<File> userFiles;
  32. /* MULTI CONFIG INSTANCES */
  33. //private MultiConfigContainer<Repairable> repairableMultiConfigContainer;
  34. //private MultiConfigContainer<Salvageable> salvageableMultiConfigContainer;
  35. /* COLLECTION MANAGERS */
  36. private SimpleRepairableManager simpleRepairableManager;
  37. private SimpleSalvageableManager simpleSalvageableManager;
  38. /* MOD MANAGERS */
  39. //TODO: Add these back when modded servers become a thing again
  40. /* MISC MANAGERS */
  41. private ExperienceMapManager experienceMapManager;
  42. //private ModManager modManager;
  43. /*private ToolConfigManager toolConfigManager;
  44. private ArmorConfigManager armorConfigManager;
  45. private BlockConfigManager blockConfigManager;
  46. private EntityConfigManager entityConfigManager;*/
  47. /* CONFIG INSTANCES */
  48. private SerializedConfigLoader<ConfigDatabase> configDatabase;
  49. private SerializedConfigLoader<ConfigScoreboard> configScoreboard;
  50. private SerializedConfigLoader<ConfigLeveling> configLeveling;
  51. private MainConfig mainConfig;
  52. private FishingTreasureConfig fishingTreasureConfig;
  53. private ExcavationTreasureConfig excavationTreasureConfig;
  54. private HerbalismTreasureConfig herbalismTreasureConfig;
  55. private ExperienceConfig experienceConfig;
  56. private AdvancedConfig advancedConfig;
  57. private PotionConfig potionConfig;
  58. private CoreSkillsConfig coreSkillsConfig;
  59. private SoundConfig soundConfig;
  60. private RankConfig rankConfig;
  61. private ItemWeightConfig itemWeightConfig;
  62. private RepairConfig repairConfig;
  63. private SalvageConfig salvageConfig;
  64. /* CONFIG ERRORS */
  65. private ArrayList<String> configErrors; //Collect errors to whine about to server admins
  66. public ConfigManager()
  67. {
  68. unloadables = new ArrayList<>();
  69. userFiles = new ArrayList<>();
  70. }
  71. public void loadConfigs()
  72. {
  73. // Load Config Files
  74. // I'm pretty these are supposed to be done in a specific order, so don't rearrange them willy nilly
  75. //TODO: Not sure about the order of MainConfig
  76. //Serialized Configs
  77. configDatabase = new SerializedConfigLoader<>(ConfigDatabase.class, "database_settings.conf", null);
  78. configScoreboard = new SerializedConfigLoader<>(ConfigScoreboard.class, "scoreboard.conf", null);
  79. configLeveling = new SerializedConfigLoader<>(ConfigLeveling.class, "player_leveling.conf", null);
  80. mainConfig = new MainConfig();
  81. fishingTreasureConfig = new FishingTreasureConfig();
  82. excavationTreasureConfig = new ExcavationTreasureConfig();
  83. herbalismTreasureConfig = new HerbalismTreasureConfig();
  84. advancedConfig = new AdvancedConfig();
  85. //TODO: Not sure about the order of experience config
  86. experienceConfig = new ExperienceConfig();
  87. potionConfig = new PotionConfig();
  88. coreSkillsConfig = new CoreSkillsConfig();
  89. soundConfig = new SoundConfig();
  90. rankConfig = new RankConfig();
  91. itemWeightConfig = new ItemWeightConfig();
  92. repairConfig = new RepairConfig();
  93. salvageConfig = new SalvageConfig();
  94. /*if (MainConfig.getInstance().getToolModsEnabled()) {
  95. new ToolConfigManager();
  96. }
  97. if (MainConfig.getInstance().getArmorModsEnabled()) {
  98. new ArmorConfigManager();
  99. }
  100. if (MainConfig.getInstance().getBlockModsEnabled()) {
  101. new BlockConfigManager();
  102. }
  103. if (MainConfig.getInstance().getEntityModsEnabled()) {
  104. new EntityConfigManager();
  105. }*/
  106. // Multi Config Containers
  107. //initMultiConfigContainers();
  108. /*
  109. * Managers
  110. */
  111. // Register Managers
  112. initMiscManagers();
  113. initCollectionManagers();
  114. }
  115. /**
  116. * Misc managers
  117. */
  118. private void initMiscManagers()
  119. {
  120. experienceMapManager = new ExperienceMapManager();
  121. }
  122. /**
  123. * Initializes all of our Multi Config Containers
  124. */
  125. /*private void initMultiConfigContainers()
  126. {
  127. //Repair
  128. repairableMultiConfigContainer = new MultiConfigContainer<>("repair", CollectionClassType.REPAIR);
  129. unloadables.add(repairableMultiConfigContainer);
  130. //Salvage
  131. salvageableMultiConfigContainer = new MultiConfigContainer<>("salvage", CollectionClassType.SALVAGE);
  132. unloadables.add(salvageableMultiConfigContainer);
  133. }*/
  134. /**
  135. * Initializes any managers related to config collections
  136. */
  137. private void initCollectionManagers()
  138. {
  139. // Handles registration of repairables
  140. simpleRepairableManager = new SimpleRepairableManager(getRepairables());
  141. unloadables.add(simpleRepairableManager);
  142. // Handles registration of salvageables
  143. simpleSalvageableManager = new SimpleSalvageableManager(getSalvageables());
  144. unloadables.add(simpleSalvageableManager);
  145. }
  146. /**
  147. * Get all loaded repairables (loaded from all repairable configs)
  148. * @return the currently loaded repairables
  149. */
  150. public ArrayList<Repairable> getRepairables()
  151. {
  152. return (ArrayList<Repairable>) repairConfig.genericCollection;
  153. }
  154. /**
  155. * Get all loaded salvageables (loaded from all salvageable configs)
  156. * @return the currently loaded salvageables
  157. */
  158. public ArrayList<Salvageable> getSalvageables()
  159. {
  160. return (ArrayList<Salvageable>) salvageConfig.genericCollection;
  161. }
  162. /**
  163. * Unloads all config options (prepares for reload)
  164. */
  165. public void unloadAllConfigsAndRegisters()
  166. {
  167. //Unload
  168. for(Unload unloadable : unloadables)
  169. {
  170. unloadable.unload();
  171. }
  172. //Clear
  173. unloadables.clear();
  174. userFiles.clear();
  175. }
  176. /**
  177. * Registers an unloadable
  178. * Unloadables call unload() on plugin disable to cleanup registries
  179. */
  180. public void registerUnloadable(Unload unload)
  181. {
  182. if(!unloadables.contains(unload))
  183. unloadables.add(unload);
  184. }
  185. /**
  186. * Registers an unloadable
  187. * Unloadables call unload() on plugin disable to cleanup registries
  188. */
  189. public void registerUserFile(File userFile)
  190. {
  191. if(!userFiles.contains(userFile))
  192. userFiles.add(userFile);
  193. }
  194. /*
  195. * GETTER BOILER PLATE
  196. */
  197. /**
  198. * Used to back up our zip files real easily
  199. * @return
  200. */
  201. public ArrayList<File> getConfigFiles()
  202. {
  203. return userFiles;
  204. }
  205. public SimpleRepairableManager getSimpleRepairableManager() {
  206. return simpleRepairableManager;
  207. }
  208. public SimpleSalvageableManager getSimpleSalvageableManager() {
  209. return simpleSalvageableManager;
  210. }
  211. public MainConfig getMainConfig() {
  212. return mainConfig;
  213. }
  214. public FishingTreasureConfig getFishingTreasureConfig() {
  215. return fishingTreasureConfig;
  216. }
  217. public ExcavationTreasureConfig getExcavationTreasureConfig() {
  218. return excavationTreasureConfig;
  219. }
  220. public HerbalismTreasureConfig getHerbalismTreasureConfig() {
  221. return herbalismTreasureConfig;
  222. }
  223. public AdvancedConfig getAdvancedConfig() {
  224. return advancedConfig;
  225. }
  226. public PotionConfig getPotionConfig() {
  227. return potionConfig;
  228. }
  229. public CoreSkillsConfig getCoreSkillsConfig() {
  230. return coreSkillsConfig;
  231. }
  232. public SoundConfig getSoundConfig() {
  233. return soundConfig;
  234. }
  235. public RankConfig getRankConfig() {
  236. return rankConfig;
  237. }
  238. public ExperienceConfig getExperienceConfig() {
  239. return experienceConfig;
  240. }
  241. public ItemWeightConfig getItemWeightConfig() {
  242. return itemWeightConfig;
  243. }
  244. public ExperienceMapManager getExperienceMapManager() {
  245. return experienceMapManager;
  246. }
  247. public ConfigDatabase getConfigDatabase() { return configDatabase.getConfig(); }
  248. public ConfigScoreboard getConfigScoreboard() { return configScoreboard.getConfig(); }
  249. public ConfigLeveling getConfigLeveling() {
  250. return configLeveling.getConfig();
  251. }
  252. }