ConfigManager.java 8.8 KB

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