From 3a765e11645de3acfb674b9dca38b9323f560be6 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Sat, 16 Feb 2019 15:09:56 -0800 Subject: [PATCH] new config pt 8 (moving to configurable branch to test..) --- .../com/gmail/nossr50/core/api/PartyAPI.java | 15 ++- .../nossr50/core/chat/PartyChatManager.java | 3 +- .../nossr50/core/config/ConfigCollection.java | 7 ++ ...eyRegister.java => ConfigCollections.java} | 6 +- .../collectionconfigs/MultiConfigManager.java | 107 ++++++++++++++++++ .../RepairConfig.java | 25 ++-- .../SalvageConfig.java | 34 ++++-- .../core/config/mods/CustomArmorConfig.java | 4 +- .../core/config/mods/CustomBlockConfig.java | 4 +- .../skills/repair/RepairConfigManager.java | 42 ------- .../skills/salvage/SalvageConfigManager.java | 42 ------- 11 files changed, 170 insertions(+), 119 deletions(-) create mode 100644 core/src/main/java/com/gmail/nossr50/core/config/ConfigCollection.java rename core/src/main/java/com/gmail/nossr50/core/config/{ConfigKeyRegister.java => ConfigCollections.java} (63%) create mode 100644 core/src/main/java/com/gmail/nossr50/core/config/collectionconfigs/MultiConfigManager.java rename core/src/main/java/com/gmail/nossr50/core/config/{skills/repair => collectionconfigs}/RepairConfig.java (92%) rename core/src/main/java/com/gmail/nossr50/core/config/{skills/salvage => collectionconfigs}/SalvageConfig.java (92%) delete mode 100644 core/src/main/java/com/gmail/nossr50/core/config/skills/repair/RepairConfigManager.java delete mode 100644 core/src/main/java/com/gmail/nossr50/core/config/skills/salvage/SalvageConfigManager.java diff --git a/core/src/main/java/com/gmail/nossr50/core/api/PartyAPI.java b/core/src/main/java/com/gmail/nossr50/core/api/PartyAPI.java index 64d60d3d7..58d953746 100644 --- a/core/src/main/java/com/gmail/nossr50/core/api/PartyAPI.java +++ b/core/src/main/java/com/gmail/nossr50/core/api/PartyAPI.java @@ -1,15 +1,14 @@ package com.gmail.nossr50.core.api; +import com.gmail.nossr50.core.McmmoCore; import com.gmail.nossr50.core.config.MainConfig; import com.gmail.nossr50.core.data.UserManager; import com.gmail.nossr50.core.datatypes.interactions.NotificationType; import com.gmail.nossr50.core.datatypes.party.Party; import com.gmail.nossr50.core.datatypes.party.PartyLeader; -import com.gmail.nossr50.mcMMO; -import com.gmail.nossr50.party.PartyManager; -import com.gmail.nossr50.util.player.NotificationManager; -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; +import com.gmail.nossr50.core.mcmmo.entity.Player; +import com.gmail.nossr50.core.party.PartyManager; +import com.gmail.nossr50.core.util.player.NotificationManager; import java.util.*; @@ -83,7 +82,7 @@ public final class PartyAPI { Party party = PartyManager.getParty(partyName); if (party == null) { - party = new Party(new PartyLeader(player.getUniqueId(), player.getName()), partyName); + party = new Party(new PartyLeader(player.getUUID(), player.getName()), partyName); } else { if (PartyManager.isPartyFull(player, party)) { NotificationManager.sendPlayerInformation(player, NotificationType.PARTY_MESSAGE, "Commands.Party.PartyFull", party.toString()); @@ -117,7 +116,7 @@ public final class PartyAPI { Party party = PartyManager.getParty(partyName); if (party == null) { - party = new Party(new PartyLeader(player.getUniqueId(), player.getName()), partyName); + party = new Party(new PartyLeader(player.getUUID(), player.getName()), partyName); } PartyManager.addToParty(UserManager.getPlayer(player), party); @@ -156,7 +155,7 @@ public final class PartyAPI { */ @Deprecated public static void setPartyLeader(String partyName, String playerName) { - PartyManager.setPartyLeader(mcMMO.p.getServer().getOfflinePlayer(playerName).getUniqueId(), PartyManager.getParty(partyName)); + PartyManager.setPartyLeader(McmmoCore.getServer().getOfflinePlayer(playerName).getUniqueId(), PartyManager.getParty(partyName)); } /** diff --git a/core/src/main/java/com/gmail/nossr50/core/chat/PartyChatManager.java b/core/src/main/java/com/gmail/nossr50/core/chat/PartyChatManager.java index 4e85dab1c..512cbc791 100644 --- a/core/src/main/java/com/gmail/nossr50/core/chat/PartyChatManager.java +++ b/core/src/main/java/com/gmail/nossr50/core/chat/PartyChatManager.java @@ -2,9 +2,8 @@ package com.gmail.nossr50.core.chat; import com.gmail.nossr50.core.config.MainConfig; import com.gmail.nossr50.core.datatypes.party.Party; +import com.gmail.nossr50.core.events.chat.McMMOPartyChatEvent; import com.gmail.nossr50.core.runnables.party.PartyChatTask; -import com.gmail.nossr50.events.chat.McMMOPartyChatEvent; -import org.bukkit.plugin.Plugin; public class PartyChatManager extends ChatManager { private Party party; diff --git a/core/src/main/java/com/gmail/nossr50/core/config/ConfigCollection.java b/core/src/main/java/com/gmail/nossr50/core/config/ConfigCollection.java new file mode 100644 index 000000000..845dc1a1a --- /dev/null +++ b/core/src/main/java/com/gmail/nossr50/core/config/ConfigCollection.java @@ -0,0 +1,7 @@ +package com.gmail.nossr50.core.config; + +import java.util.Collection; + +public interface ConfigCollection { + Collection getLoadedCollection(); +} diff --git a/core/src/main/java/com/gmail/nossr50/core/config/ConfigKeyRegister.java b/core/src/main/java/com/gmail/nossr50/core/config/ConfigCollections.java similarity index 63% rename from core/src/main/java/com/gmail/nossr50/core/config/ConfigKeyRegister.java rename to core/src/main/java/com/gmail/nossr50/core/config/ConfigCollections.java index 3c91e53ed..01238cc84 100644 --- a/core/src/main/java/com/gmail/nossr50/core/config/ConfigKeyRegister.java +++ b/core/src/main/java/com/gmail/nossr50/core/config/ConfigCollections.java @@ -5,14 +5,14 @@ import java.io.File; /** * Represents a config file that registers keys after its initialized */ -public abstract class ConfigKeyRegister extends Config implements RegistersKeys { +public abstract class ConfigCollections extends Config implements RegistersKeys, ConfigCollection { - public ConfigKeyRegister(String pathToParentFolder, String relativePath, boolean mergeNewKeys) { + public ConfigCollections(String pathToParentFolder, String relativePath, boolean mergeNewKeys) { super(pathToParentFolder, relativePath, mergeNewKeys); loadKeys(); } - public ConfigKeyRegister(File pathToParentFolder, String relativePath, boolean mergeNewKeys) { + public ConfigCollections(File pathToParentFolder, String relativePath, boolean mergeNewKeys) { super(pathToParentFolder, relativePath, mergeNewKeys); loadKeys(); } diff --git a/core/src/main/java/com/gmail/nossr50/core/config/collectionconfigs/MultiConfigManager.java b/core/src/main/java/com/gmail/nossr50/core/config/collectionconfigs/MultiConfigManager.java new file mode 100644 index 000000000..5a3fc25ed --- /dev/null +++ b/core/src/main/java/com/gmail/nossr50/core/config/collectionconfigs/MultiConfigManager.java @@ -0,0 +1,107 @@ +package com.gmail.nossr50.core.config.collectionconfigs; + +import com.gmail.nossr50.core.McmmoCore; +import com.gmail.nossr50.core.config.ConfigCollection; +import com.gmail.nossr50.core.config.ConfigCollections; +import com.gmail.nossr50.core.skills.child.salvage.salvageables.Salvageable; +import com.gmail.nossr50.core.skills.primary.repair.repairables.Repairable; + +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 RepairConfig vanillaRepairConfig; //This is the main config file that mcMMO will copy out + public SalvageConfig vanillaSalvageConfig; + + private static List repairables; + private static List salvageables; + + public MultiConfigManager(String fileNamePrefix) + { + //init Collections + repairables = new ArrayList<>(); + salvageables = new ArrayList<>(); + + //init vanilla configs + vanillaRepairConfig = new RepairConfig(getVanillaConfigName("repair")); + vanillaSalvageConfig = new 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, RepairConfig.class); + loadCustomCollections("salvage", salvageables, 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 configClass) + { + String vanillaConfigFileName = getVanillaConfigName(configPrefix); + + //Find other files + Pattern pattern = Pattern.compile(configPrefix+"\\.(?:.+)\\.yml"); + File dataFolder = McmmoCore.getDataFolderPath(); + + 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 { + ConfigCollections customConfig = configClass.getClass().getConstructor(fileName).newInstance(); + 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; + } + +} diff --git a/core/src/main/java/com/gmail/nossr50/core/config/skills/repair/RepairConfig.java b/core/src/main/java/com/gmail/nossr50/core/config/collectionconfigs/RepairConfig.java similarity index 92% rename from core/src/main/java/com/gmail/nossr50/core/config/skills/repair/RepairConfig.java rename to core/src/main/java/com/gmail/nossr50/core/config/collectionconfigs/RepairConfig.java index f5d50ce5a..dfe1b213a 100644 --- a/core/src/main/java/com/gmail/nossr50/core/config/skills/repair/RepairConfig.java +++ b/core/src/main/java/com/gmail/nossr50/core/config/collectionconfigs/RepairConfig.java @@ -1,7 +1,7 @@ -package com.gmail.nossr50.core.config.skills.repair; +package com.gmail.nossr50.core.config.collectionconfigs; import com.gmail.nossr50.core.McmmoCore; -import com.gmail.nossr50.core.config.ConfigKeyRegister; +import com.gmail.nossr50.core.config.ConfigCollections; import com.gmail.nossr50.core.mcmmo.item.ItemStack; import com.gmail.nossr50.core.skills.ConfigItemCategory; import com.gmail.nossr50.core.skills.MaterialType; @@ -13,23 +13,28 @@ import com.gmail.nossr50.core.util.skills.SkillUtils; import ninja.leaping.configurate.ConfigurationNode; import java.util.ArrayList; +import java.util.Collection; import java.util.Iterator; import java.util.List; /** * This config */ -public class RepairConfig extends ConfigKeyRegister { +public class RepairConfig extends ConfigCollections { private List repairables; public RepairConfig(String fileName) { super(McmmoCore.getDataFolderPath().getAbsoluteFile(), fileName, false); - loadKeys(); } @Override public void unload() { + repairables = null; + } + @Override + public Collection getLoadedCollection() { + return repairables == null ? new ArrayList() : repairables; } /** @@ -59,8 +64,6 @@ public class RepairConfig extends ConfigKeyRegister { // Validate all the things! List reason = new ArrayList(); - - try { // ItemStack Material ConfigItemCategory configItemCategory = ItemUtils.matchItemType(key); @@ -167,13 +170,15 @@ public class RepairConfig extends ConfigKeyRegister { } } - protected List getLoadedRepairables() { - return repairables == null ? new ArrayList() : repairables; - } + /** + * Check if there are any errors for this repairable and if there are reports them to console + * @param issues errors related to loading a repairable + * @return returns true if there are no errors for this repairable + */ private boolean noErrorsInRepairable(List issues) { for (String issue : issues) { - plugin.getLogger().warning(issue); + McmmoCore.getLogger().warning(issue); } return issues.isEmpty(); diff --git a/core/src/main/java/com/gmail/nossr50/core/config/skills/salvage/SalvageConfig.java b/core/src/main/java/com/gmail/nossr50/core/config/collectionconfigs/SalvageConfig.java similarity index 92% rename from core/src/main/java/com/gmail/nossr50/core/config/skills/salvage/SalvageConfig.java rename to core/src/main/java/com/gmail/nossr50/core/config/collectionconfigs/SalvageConfig.java index 7a431fbd6..ececbbac2 100644 --- a/core/src/main/java/com/gmail/nossr50/core/config/skills/salvage/SalvageConfig.java +++ b/core/src/main/java/com/gmail/nossr50/core/config/collectionconfigs/SalvageConfig.java @@ -1,7 +1,9 @@ -package com.gmail.nossr50.core.config.skills.salvage; +package com.gmail.nossr50.core.config.collectionconfigs; import com.gmail.nossr50.core.McmmoCore; import com.gmail.nossr50.core.config.Config; +import com.gmail.nossr50.core.config.ConfigCollection; +import com.gmail.nossr50.core.config.ConfigCollections; import com.gmail.nossr50.core.mcmmo.item.ItemStack; import com.gmail.nossr50.core.skills.MaterialType; import com.gmail.nossr50.core.skills.child.salvage.salvageables.Salvageable; @@ -10,15 +12,35 @@ import com.gmail.nossr50.core.util.ItemUtils; import com.gmail.nossr50.core.util.skills.SkillUtils; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Set; -public class SalvageConfig extends Config { +public class SalvageConfig extends ConfigCollections { private List salvageables; public SalvageConfig(String fileName) { - super(McmmoCore.getDataFolderPath().getAbsoluteFile(), fileName); - loadKeys(); + super(McmmoCore.getDataFolderPath().getAbsoluteFile(), fileName, false); + } + + @Override + public Collection getLoadedCollection() { + return salvageables == null ? new ArrayList() : salvageables; + } + + @Override + public void unload() { + salvageables = null; + } + + /** + * The version of this config + * + * @return + */ + @Override + public double getConfigVersion() { + return 1; } @Override @@ -132,10 +154,6 @@ public class SalvageConfig extends Config { } } - protected List getLoadedSalvageables() { - return salvageables == null ? new ArrayList() : salvageables; - } - private boolean noErrorsInSalvageable(List issues) { if (!issues.isEmpty()) { plugin.getLogger().warning("Errors have been found in: " + fileName); diff --git a/core/src/main/java/com/gmail/nossr50/core/config/mods/CustomArmorConfig.java b/core/src/main/java/com/gmail/nossr50/core/config/mods/CustomArmorConfig.java index ae7fc4136..7cc576f52 100644 --- a/core/src/main/java/com/gmail/nossr50/core/config/mods/CustomArmorConfig.java +++ b/core/src/main/java/com/gmail/nossr50/core/config/mods/CustomArmorConfig.java @@ -1,7 +1,7 @@ package com.gmail.nossr50.core.config.mods; import com.gmail.nossr50.core.McmmoCore; -import com.gmail.nossr50.core.config.ConfigKeyRegister; +import com.gmail.nossr50.core.config.ConfigCollections; import com.gmail.nossr50.core.mcmmo.item.ItemStack; import com.gmail.nossr50.core.skills.ConfigItemCategory; import com.gmail.nossr50.core.skills.MaterialType; @@ -13,7 +13,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; -public class CustomArmorConfig extends ConfigKeyRegister { +public class CustomArmorConfig extends ConfigCollections { public List customBoots = new ArrayList(); public List customChestplates = new ArrayList(); public List customHelmets = new ArrayList(); diff --git a/core/src/main/java/com/gmail/nossr50/core/config/mods/CustomBlockConfig.java b/core/src/main/java/com/gmail/nossr50/core/config/mods/CustomBlockConfig.java index 4ab5dcddd..173424845 100644 --- a/core/src/main/java/com/gmail/nossr50/core/config/mods/CustomBlockConfig.java +++ b/core/src/main/java/com/gmail/nossr50/core/config/mods/CustomBlockConfig.java @@ -1,14 +1,14 @@ package com.gmail.nossr50.core.config.mods; import com.gmail.nossr50.core.McmmoCore; -import com.gmail.nossr50.core.config.ConfigKeyRegister; +import com.gmail.nossr50.core.config.ConfigCollections; import com.gmail.nossr50.core.datatypes.mods.CustomBlock; import java.util.ArrayList; import java.util.HashMap; import java.util.Set; -public class CustomBlockConfig extends ConfigKeyRegister { +public class CustomBlockConfig extends ConfigCollections { public List customExcavationBlocks = new ArrayList<>(); public List customHerbalismBlocks = new ArrayList<>(); public List customMiningBlocks = new ArrayList<>(); diff --git a/core/src/main/java/com/gmail/nossr50/core/config/skills/repair/RepairConfigManager.java b/core/src/main/java/com/gmail/nossr50/core/config/skills/repair/RepairConfigManager.java deleted file mode 100644 index eb0b0f098..000000000 --- a/core/src/main/java/com/gmail/nossr50/core/config/skills/repair/RepairConfigManager.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.gmail.nossr50.core.config.skills.repair; - -import com.gmail.nossr50.core.config.skills.repair.RepairConfig; -import com.gmail.nossr50.core.skills.primary.repair.repairables.Repairable; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Pattern; - -public class RepairConfigManager { - private final List repairables = new ArrayList(); - - public RepairConfigManager(mcMMO plugin) { - Pattern pattern = Pattern.compile("repair\\.(?:.+)\\.yml"); - File dataFolder = plugin.getDataFolder(); - File vanilla = new File(dataFolder, "repair.vanilla.yml"); - - if (!vanilla.exists()) { - plugin.saveResource("repair.vanilla.yml", false); - } - - for (String fileName : dataFolder.list()) { - if (!pattern.matcher(fileName).matches()) { - continue; - } - - File file = new File(dataFolder, fileName); - - if (file.isDirectory()) { - continue; - } - - RepairConfig rConfig = new RepairConfig(fileName); - repairables.addAll(rConfig.getLoadedRepairables()); - } - } - - public List getLoadedRepairables() { - return repairables; - } -} diff --git a/core/src/main/java/com/gmail/nossr50/core/config/skills/salvage/SalvageConfigManager.java b/core/src/main/java/com/gmail/nossr50/core/config/skills/salvage/SalvageConfigManager.java deleted file mode 100644 index 3324a0ce2..000000000 --- a/core/src/main/java/com/gmail/nossr50/core/config/skills/salvage/SalvageConfigManager.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.gmail.nossr50.core.config.skills.salvage; - - -import com.gmail.nossr50.core.skills.child.salvage.salvageables.Salvageable; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Pattern; - -public class SalvageConfigManager { - private final List salvageables = new ArrayList(); - - public SalvageConfigManager(mcMMO plugin) { - Pattern pattern = Pattern.compile("salvage\\.(?:.+)\\.yml"); - File dataFolder = plugin.getDataFolder(); - File vanilla = new File(dataFolder, "salvage.vanilla.yml"); - - if (!vanilla.exists()) { - plugin.saveResource("salvage.vanilla.yml", false); - } - - for (String fileName : dataFolder.list()) { - if (!pattern.matcher(fileName).matches()) { - continue; - } - - File file = new File(dataFolder, fileName); - - if (file.isDirectory()) { - continue; - } - - com.gmail.nossr50.config.skills.salvage.SalvageConfig salvageConfig = new com.gmail.nossr50.config.skills.salvage.SalvageConfig(fileName); - salvageables.addAll(salvageConfig.getLoadedSalvageables()); - } - } - - public List getLoadedSalvageables() { - return salvageables; - } -}