mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-25 22:56:45 +01:00
Change for only advanced.yml and config.yml to be auto-updated
This commit is contained in:
parent
54ca6e78f5
commit
3b05bb96e3
@ -1,6 +1,6 @@
|
|||||||
package com.gmail.nossr50.config;
|
package com.gmail.nossr50.config;
|
||||||
|
|
||||||
public class AdvancedConfig extends ConfigLoader {
|
public class AdvancedConfig extends AutoUpdateConfigLoader {
|
||||||
private static AdvancedConfig instance;
|
private static AdvancedConfig instance;
|
||||||
|
|
||||||
private AdvancedConfig() {
|
private AdvancedConfig() {
|
||||||
|
@ -0,0 +1,128 @@
|
|||||||
|
package com.gmail.nossr50.config;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.BufferedWriter;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.util.metrics.MetricsManager;
|
||||||
|
|
||||||
|
public abstract class AutoUpdateConfigLoader extends ConfigLoader {
|
||||||
|
public AutoUpdateConfigLoader(String relativePath, String fileName) {
|
||||||
|
super(relativePath, fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public AutoUpdateConfigLoader(String fileName) {
|
||||||
|
super(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void loadFile() {
|
||||||
|
super.loadFile();
|
||||||
|
FileConfiguration internalConfig = YamlConfiguration.loadConfiguration(plugin.getResource(fileName));
|
||||||
|
|
||||||
|
Set<String> configKeys = config.getKeys(true);
|
||||||
|
Set<String> internalConfigKeys = internalConfig.getKeys(true);
|
||||||
|
|
||||||
|
boolean needSave = false;
|
||||||
|
|
||||||
|
Set<String> oldKeys = new HashSet<String>(configKeys);
|
||||||
|
oldKeys.removeAll(internalConfigKeys);
|
||||||
|
|
||||||
|
Set<String> newKeys = new HashSet<String>(internalConfigKeys);
|
||||||
|
newKeys.removeAll(configKeys);
|
||||||
|
|
||||||
|
// Don't need a re-save if we have old keys sticking around?
|
||||||
|
// Would be less saving, but less... correct?
|
||||||
|
if (!newKeys.isEmpty() || !oldKeys.isEmpty()) {
|
||||||
|
needSave = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (String key : oldKeys) {
|
||||||
|
plugin.debug("Removing unused key: " + key);
|
||||||
|
config.set(key, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (String key : newKeys) {
|
||||||
|
plugin.debug("Adding new key: " + key + " = " + internalConfig.get(key));
|
||||||
|
config.set(key, internalConfig.get(key));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (needSave) {
|
||||||
|
// Get Bukkit's version of an acceptable config with new keys, and no old keys
|
||||||
|
String output = config.saveToString();
|
||||||
|
|
||||||
|
// Convert to the superior 4 space indentation
|
||||||
|
output = output.replace(" ", " ");
|
||||||
|
|
||||||
|
// Rip out Bukkit's attempt to save comments at the top of the file
|
||||||
|
while (output.indexOf('#') != -1) {
|
||||||
|
output = output.substring(output.indexOf('\n', output.indexOf('#'))+1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read the internal config to get comments, then put them in the new one
|
||||||
|
try {
|
||||||
|
// Read internal
|
||||||
|
BufferedReader reader = new BufferedReader(new InputStreamReader(plugin.getResource(fileName)));
|
||||||
|
HashMap<String, String> comments = new HashMap<String, String>();
|
||||||
|
String temp = "";
|
||||||
|
|
||||||
|
String line;
|
||||||
|
while ((line = reader.readLine()) != null) {
|
||||||
|
if (line.contains("#")) {
|
||||||
|
temp += line + "\n";
|
||||||
|
}
|
||||||
|
else if (line.contains(":")) {
|
||||||
|
line = line.substring(0, line.indexOf(":") + 1);
|
||||||
|
if(!temp.isEmpty()) {
|
||||||
|
comments.put(line, temp);
|
||||||
|
temp = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dump to the new one
|
||||||
|
for (String key : comments.keySet()) {
|
||||||
|
if (output.indexOf(key) != -1) {
|
||||||
|
output = output.substring(0, output.indexOf(key)) + comments.get(key) + output.substring(output.indexOf(key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save it
|
||||||
|
try {
|
||||||
|
String saveName = fileName;
|
||||||
|
// At this stage we cannot guarantee that Config has been loaded, so we do the check directly here
|
||||||
|
if (!plugin.getConfig().getBoolean("General.Config_Update_Overwrite", true)) {
|
||||||
|
saveName += ".new";
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferedWriter writer = new BufferedWriter(new FileWriter(new File(plugin.getDataFolder(), saveName)));
|
||||||
|
writer.write(output);
|
||||||
|
writer.flush();
|
||||||
|
writer.close();
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (String key : configKeys) {
|
||||||
|
if (!config.isConfigurationSection(key) && !config.get(key).equals(internalConfig.get(key))) {
|
||||||
|
MetricsManager.customConfig();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -10,7 +10,7 @@ import com.gmail.nossr50.skills.utilities.AbilityType;
|
|||||||
import com.gmail.nossr50.skills.utilities.SkillType;
|
import com.gmail.nossr50.skills.utilities.SkillType;
|
||||||
import com.gmail.nossr50.util.StringUtils;
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
|
|
||||||
public class Config extends ConfigLoader {
|
public class Config extends AutoUpdateConfigLoader {
|
||||||
private static Config instance;
|
private static Config instance;
|
||||||
|
|
||||||
private Config() {
|
private Config() {
|
||||||
@ -45,6 +45,7 @@ public class Config extends ConfigLoader {
|
|||||||
public boolean getBackupsEnabled() { return config.getBoolean("General.Generate_Backups", true); }
|
public boolean getBackupsEnabled() { return config.getBoolean("General.Generate_Backups", true); }
|
||||||
public boolean getVerboseLoggingEnabled() { return config.getBoolean("General.Verbose_Logging", false); }
|
public boolean getVerboseLoggingEnabled() { return config.getBoolean("General.Verbose_Logging", false); }
|
||||||
public boolean getConfigOverwriteEnabled() { return config.getBoolean("General.Config_Update_Overwrite", true); }
|
public boolean getConfigOverwriteEnabled() { return config.getBoolean("General.Config_Update_Overwrite", true); }
|
||||||
|
|
||||||
public boolean getPartyDisplayNames() { return config.getBoolean("Commands.p.Use_Display_Names", true); }
|
public boolean getPartyDisplayNames() { return config.getBoolean("Commands.p.Use_Display_Names", true); }
|
||||||
public boolean getAdminDisplayNames() { return config.getBoolean("Commands.a.Use_Display_Names", true); }
|
public boolean getAdminDisplayNames() { return config.getBoolean("Commands.a.Use_Display_Names", true); }
|
||||||
|
|
||||||
|
@ -46,104 +46,6 @@ public abstract class ConfigLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
config = YamlConfiguration.loadConfiguration(configFile);
|
config = YamlConfiguration.loadConfiguration(configFile);
|
||||||
FileConfiguration internalConfig = YamlConfiguration.loadConfiguration(plugin.getResource(fileName));
|
|
||||||
|
|
||||||
Set<String> configKeys = config.getKeys(true);
|
|
||||||
Set<String> internalConfigKeys = internalConfig.getKeys(true);
|
|
||||||
|
|
||||||
boolean needSave = false;
|
|
||||||
|
|
||||||
Set<String> oldKeys = new HashSet<String>(configKeys);
|
|
||||||
oldKeys.removeAll(internalConfigKeys);
|
|
||||||
|
|
||||||
Set<String> newKeys = new HashSet<String>(internalConfigKeys);
|
|
||||||
newKeys.removeAll(configKeys);
|
|
||||||
|
|
||||||
// Don't need a re-save if we have old keys sticking around?
|
|
||||||
// Would be less saving, but less... correct?
|
|
||||||
if (!newKeys.isEmpty() || !oldKeys.isEmpty()) {
|
|
||||||
needSave = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (String key : oldKeys) {
|
|
||||||
plugin.debug("Removing unused key: " + key);
|
|
||||||
config.set(key, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (String key : newKeys) {
|
|
||||||
plugin.debug("Adding new key: " + key + " = " + internalConfig.get(key));
|
|
||||||
config.set(key, internalConfig.get(key));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (needSave) {
|
|
||||||
// Get Bukkit's version of an acceptable config with new keys, and no old keys
|
|
||||||
String output = config.saveToString();
|
|
||||||
|
|
||||||
// Convert to the superior 4 space indentation
|
|
||||||
output = output.replace(" ", " ");
|
|
||||||
|
|
||||||
// Rip out Bukkit's attempt to save comments at the top of the file
|
|
||||||
while (output.indexOf('#') != -1) {
|
|
||||||
output = output.substring(output.indexOf('\n', output.indexOf('#'))+1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Read the internal config to get comments, then put them in the new one
|
|
||||||
try {
|
|
||||||
// Read internal
|
|
||||||
BufferedReader reader = new BufferedReader(new InputStreamReader(plugin.getResource(fileName)));
|
|
||||||
HashMap<String, String> comments = new HashMap<String, String>();
|
|
||||||
String temp = "";
|
|
||||||
|
|
||||||
String line;
|
|
||||||
while ((line = reader.readLine()) != null) {
|
|
||||||
if (line.contains("#")) {
|
|
||||||
temp += line + "\n";
|
|
||||||
}
|
|
||||||
else if (line.contains(":")) {
|
|
||||||
line = line.substring(0, line.indexOf(":") + 1);
|
|
||||||
if(!temp.isEmpty()) {
|
|
||||||
comments.put(line, temp);
|
|
||||||
temp = "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Dump to the new one
|
|
||||||
for (String key : comments.keySet()) {
|
|
||||||
if (output.indexOf(key) != -1) {
|
|
||||||
output = output.substring(0, output.indexOf(key)) + comments.get(key) + output.substring(output.indexOf(key));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Save it
|
|
||||||
try {
|
|
||||||
String saveName = fileName;
|
|
||||||
// At this stage we cannot guarantee that Config has been loaded, so we do the check directly here
|
|
||||||
if (!plugin.getConfig().getBoolean("General.Config_Update_Overwrite", true)) {
|
|
||||||
saveName += ".new";
|
|
||||||
}
|
|
||||||
|
|
||||||
BufferedWriter writer = new BufferedWriter(new FileWriter(new File(plugin.getDataFolder(), saveName)));
|
|
||||||
writer.write(output);
|
|
||||||
writer.flush();
|
|
||||||
writer.close();
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
for (String key : configKeys) {
|
|
||||||
if (!config.isConfigurationSection(key) && !config.get(key).equals(internalConfig.get(key))) {
|
|
||||||
MetricsManager.customConfig();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract void loadKeys();
|
protected abstract void loadKeys();
|
||||||
|
Loading…
Reference in New Issue
Block a user