Cleaned up config system.

This commit is contained in:
Brianna 2019-08-23 17:40:21 -04:00
parent 7d04ff4c96
commit f218da4fea
4 changed files with 197 additions and 167 deletions

View File

@ -1,26 +1,27 @@
package com.songoda.core.library.settings;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.*;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class Category {
private final JavaPlugin plugin;
private final Config config;
private final String key;
private final String[] comments;
private final Map<String, Setting> settings = new HashMap<>();
public Category(JavaPlugin plugin, String key, String... comments) {
this.plugin = plugin;
public Category(Config config, String key, String... comments) {
this.config = config;
this.key = key;
this.comments = comments;
}
public Category(JavaPlugin plugin, String key) {
this(plugin, key, null);
public Category(Config config, String key) {
this(config, key, null);
}
public Category addSetting(String key, Object defaultValue, String... comments) {
@ -45,7 +46,7 @@ public class Category {
return comments;
}
public JavaPlugin getPlugin() {
return plugin;
public Config getConfig() {
return config;
}
}

View File

@ -1,7 +1,11 @@
package com.songoda.core.library.settings;
import org.bukkit.configuration.MemorySection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.*;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
@ -9,27 +13,173 @@ import java.util.Set;
public class Config {
private static final Map<String, Category> categories = new HashMap<>();
private final JavaPlugin plugin;
public static Category addCategory(JavaPlugin plugin, String key, String... comments) {
return categories.put(key, new Category(plugin, key, comments));
private final String folderName, fileName;
private FileConfiguration fileConfiguration;
private File configFile;
private final Map<String, Category> categories = new HashMap<>();
public Config(JavaPlugin plugin, String folderName, String fileName) {
this.plugin = plugin;
this.folderName = folderName;
this.fileName = fileName;
}
public static Category getCategory(String key) {
public Category addCategory(String key, String... comments) {
return categories.put(key, new Category(this, key, comments));
}
public Category getCategory(String key) {
return categories.get(key);
}
public static Setting getSetting(String key) {
public Setting getSetting(String key) {
String[] split = key.split(".", 2);
Category category = categories.get(split[0]);
return category.getSetting(split[1]);
}
public static Set<Setting> getSettings() {
public Set<Setting> getSettings() {
Set<Setting> settings = new HashSet<>();
for (Category category : categories.values()) {
settings.addAll(category.getSettings());
}
return settings;
}
public void reload() {
if (configFile == null) {
configFile = new File(plugin.getDataFolder() + folderName, fileName);
}
fileConfiguration = YamlConfiguration.loadConfiguration(configFile);
this.setup();
}
public void setup() {
FileConfiguration config = plugin.getConfig();
for (Setting setting : getSettings()) {
config.addDefault(setting.getCompleteKey(), setting.getDefaultValue());
}
plugin.getConfig().options().copyDefaults(true);
save();
}
void save() {
// Delete old config values.
for (String line : fileConfiguration.getConfigurationSection("").getKeys(true)) {
if (line.contains(".") && getSetting(line) == null)
fileConfiguration.set(line, null);
else if (!line.contains(".")) {
if (((MemorySection) fileConfiguration.get(line)).getKeys(true).size() == 0)
fileConfiguration.set(line, null);
}
}
// Add comments.
String dump = fileConfiguration.saveToString();
StringBuilder config = new StringBuilder();
BufferedReader bufReader = new BufferedReader(new StringReader(dump));
try {
boolean first = true;
String line;
int currentTab = 0;
String category = "";
while ((line = bufReader.readLine()) != null) {
if (line.trim().startsWith("#")) continue;
int tabChange = line.length() - line.trim().length();
if (currentTab != tabChange) {
category = category.contains(".") && tabChange != 0 ? category.substring(0, category.indexOf(".")) : "";
currentTab = tabChange;
}
if (line.endsWith(":")) {
bufReader.mark(1000);
String found = bufReader.readLine();
bufReader.reset();
if (!found.trim().startsWith("-")) {
String newCategory = line.substring(0, line.length() - 1).trim();
if (category.equals(""))
category = newCategory;
else
category += "." + newCategory;
currentTab = tabChange + 2;
if (!first) {
config.append("\n\n");
} else {
first = false;
}
if (!category.contains("."))
config.append("#").append("\n");
try {
Category categoryObj = getCategory(category);
config.append(new String(new char[tabChange]).replace('\0', ' '));
for (String l : categoryObj.getComments())
config.append("# ").append(l).append("\n");
} catch (IllegalArgumentException e) {
config.append("# ").append(category).append("\n");
}
if (!category.contains("."))
config.append("#").append("\n");
config.append(line).append("\n");
continue;
}
}
if (line.trim().startsWith("-")) {
config.append(line).append("\n");
continue;
}
String key = category + "." + (line.split(":")[0].trim());
for (Setting setting : getSettings()) {
if (!setting.getCompleteKey().equals(key) || setting.getComments() == null) continue;
config.append(" ").append("\n");
for (String l : setting.getComments()) {
config.append(new String(new char[currentTab]).replace('\0', ' '));
config.append("# ").append(l).append("\n");
}
}
config.append(line).append("\n");
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if (!plugin.getDataFolder().exists())
plugin.getDataFolder().mkdir();
BufferedWriter writer =
new BufferedWriter(new FileWriter(new File(plugin.getDataFolder() + File.separator + "config.yml")));
writer.write(config.toString());
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public FileConfiguration getFileConfiguration() {
return fileConfiguration;
}
public JavaPlugin getPlugin() {
return plugin;
}
}

View File

@ -1,14 +1,13 @@
package com.songoda.core.library.settings;
import org.bukkit.Material;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.configuration.file.FileConfiguration;
import java.util.List;
public class Setting {
private final Category category;
private final JavaPlugin plugin;
private final String key;
private final Object defaultValue;
@ -16,7 +15,6 @@ public class Setting {
public Setting(Category category, String key, Object defaultValue, String... comments) {
this.category = category;
this.plugin = category.getPlugin();
this.key = key;
this.defaultValue = defaultValue;
this.comments = comments;
@ -25,7 +23,7 @@ public class Setting {
public String getKey() {
return key;
}
public String getCompleteKey() {
return category.getKey() + "." + key;
}
@ -37,40 +35,41 @@ public class Setting {
public String[] getComments() {
return comments;
}
public List<Integer> getIntegerList() {
return plugin.getConfig().getIntegerList(getCompleteKey());
return getConfig().getIntegerList(getCompleteKey());
}
public List<String> getStringList() {
return plugin.getConfig().getStringList(getCompleteKey());
return getConfig().getStringList(getCompleteKey());
}
public boolean getBoolean() {
return plugin.getConfig().getBoolean(getCompleteKey());
return getConfig().getBoolean(getCompleteKey());
}
public int getInt() {
return plugin.getConfig().getInt(getCompleteKey());
return getConfig().getInt(getCompleteKey());
}
public long getLong() {
return plugin.getConfig().getLong(getCompleteKey());
return getConfig().getLong(getCompleteKey());
}
public String getString() {
return plugin.getConfig().getString(getCompleteKey());
return getConfig().getString(getCompleteKey());
}
public char getChar() {
return plugin.getConfig().getString(getCompleteKey()).charAt(0);
return getConfig().getString(getCompleteKey()).charAt(0);
}
public double getDouble() {
return plugin.getConfig().getDouble(getCompleteKey());
return getConfig().getDouble(getCompleteKey());
}
public Material getMaterial() {
String materialStr = plugin.getConfig().getString(getCompleteKey());
String materialStr = getConfig().getString(getCompleteKey());
Material material = Material.getMaterial(materialStr);
if (material == null) {
@ -79,4 +78,8 @@ public class Setting {
return material;
}
public FileConfiguration getConfig() {
return category.getConfig().getFileConfiguration();
}
}

View File

@ -5,7 +5,6 @@ import com.songoda.core.utils.Methods;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.configuration.MemorySection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@ -18,20 +17,22 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.*;
import java.util.*;
/**
* Created by songoda on 6/4/2017.
*/
public abstract class SettingsManager implements Listener {
public class SettingsManager implements Listener {
private final JavaPlugin plugin;
private final Config config;
private Map<Player, String> cat = new HashMap<>();
private Map<Player, String> current = new HashMap<>();
public SettingsManager(JavaPlugin plugin) {
this.plugin = plugin;
public SettingsManager(Config config) {
this.plugin = config.getPlugin();
this.config = config;
Bukkit.getPluginManager().registerEvents(this, plugin);
}
@ -61,8 +62,8 @@ public abstract class SettingsManager implements Listener {
String key = cat.get(player) + "." + ChatColor.stripColor(clickedItem.getItemMeta().getDisplayName());
if (plugin.getConfig().get(key).getClass().getName().equals("java.lang.Boolean")) {
this.plugin.getConfig().set(key, !plugin.getConfig().getBoolean(key));
if (config.getFileConfiguration().get(key).getClass().getName().equals("java.lang.Boolean")) {
this.config.getFileConfiguration().set(key, !config.getFileConfiguration().getBoolean(key));
this.finishEditing(player);
} else {
this.editObject(player, key);
@ -76,7 +77,7 @@ public abstract class SettingsManager implements Listener {
if (!current.containsKey(player)) return;
String value = current.get(player);
FileConfiguration config = plugin.getConfig();
FileConfiguration config = this.config.getFileConfiguration();
if (config.isLong(value)) {
config.set(value, Long.parseLong(event.getMessage()));
} else if (config.isInt(value)) {
@ -95,7 +96,7 @@ public abstract class SettingsManager implements Listener {
private void finishEditing(Player player) {
this.current.remove(player);
this.saveConfig();
this.config.save();
this.openEditor(player);
}
@ -105,7 +106,7 @@ public abstract class SettingsManager implements Listener {
player.closeInventory();
player.sendMessage("");
player.sendMessage(Methods.formatText("&7Please enter a value for &6" + current + "&7."));
if (plugin.getConfig().isInt(current) || plugin.getConfig().isDouble(current)) {
if (config.getFileConfiguration().isInt(current) || config.getFileConfiguration().isDouble(current)) {
player.sendMessage(Methods.formatText("&cUse only numbers."));
}
player.sendMessage("");
@ -115,7 +116,7 @@ public abstract class SettingsManager implements Listener {
Inventory inventory = Bukkit.createInventory(null, 27, plugin.getName() + " Settings Manager");
int slot = 10;
for (String key : plugin.getConfig().getDefaultSection().getKeys(false)) {
for (String key : config.getFileConfiguration().getDefaultSection().getKeys(false)) {
ItemStack item = new ItemStack(ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13) ? Material.LEGACY_WOOL : Material.valueOf("WOOL"), 1, (byte) (slot - 9));
ItemMeta meta = item.getItemMeta();
meta.setLore(Collections.singletonList(Methods.formatText("&6Click To Edit This Category.")));
@ -130,7 +131,7 @@ public abstract class SettingsManager implements Listener {
private void openEditor(Player player) {
Inventory inventory = Bukkit.createInventory(null, 54, plugin.getName() + " Settings Editor");
FileConfiguration config = plugin.getConfig();
FileConfiguration config = this.config.getFileConfiguration();
int slot = 0;
for (String key : config.getConfigurationSection(cat.get(player)).getKeys(true)) {
@ -157,7 +158,7 @@ public abstract class SettingsManager implements Listener {
lore.add(Methods.formatText("&7" + config.getDouble(fKey)));
}
Setting setting = Config.getSetting(fKey);
Setting setting = this.config.getSetting(fKey);
if (setting != null && setting.getComments() != null) {
lore.add("");
@ -189,129 +190,4 @@ public abstract class SettingsManager implements Listener {
player.openInventory(inventory);
}
public void reloadConfig() {
plugin.reloadConfig();
this.setupConfig();
}
public void setupConfig() {
FileConfiguration config = plugin.getConfig();
for (Setting setting : Config.getSettings()) {
config.addDefault(setting.getCompleteKey(), setting.getDefaultValue());
}
plugin.getConfig().options().copyDefaults(true);
saveConfig();
}
private void saveConfig() {
// Delete old config values.
FileConfiguration configuration = plugin.getConfig();
for (String line : configuration.getConfigurationSection("").getKeys(true)) {
if (line.contains(".") && Config.getSetting(line) == null)
configuration.set(line, null);
else if (!line.contains(".")) {
if (((MemorySection) configuration.get(line)).getKeys(true).size() == 0)
configuration.set(line, null);
}
}
// Add comments.
String dump = plugin.getConfig().saveToString();
StringBuilder config = new StringBuilder();
BufferedReader bufReader = new BufferedReader(new StringReader(dump));
try {
boolean first = true;
String line;
int currentTab = 0;
String category = "";
while ((line = bufReader.readLine()) != null) {
if (line.trim().startsWith("#")) continue;
int tabChange = line.length() - line.trim().length();
if (currentTab != tabChange) {
category = category.contains(".") && tabChange != 0 ? category.substring(0, category.indexOf(".")) : "";
currentTab = tabChange;
}
if (line.endsWith(":")) {
bufReader.mark(1000);
String found = bufReader.readLine();
bufReader.reset();
if (!found.trim().startsWith("-")) {
String newCategory = line.substring(0, line.length() - 1).trim();
if (category.equals(""))
category = newCategory;
else
category += "." + newCategory;
currentTab = tabChange + 2;
if (!first) {
config.append("\n\n");
} else {
first = false;
}
if (!category.contains("."))
config.append("#").append("\n");
try {
Category categoryObj = Config.getCategory(category);
config.append(new String(new char[tabChange]).replace('\0', ' '));
for (String l : categoryObj.getComments())
config.append("# ").append(l).append("\n");
} catch (IllegalArgumentException e) {
config.append("# ").append(category).append("\n");
}
if (!category.contains("."))
config.append("#").append("\n");
config.append(line).append("\n");
continue;
}
}
if (line.trim().startsWith("-")) {
config.append(line).append("\n");
continue;
}
String key = category + "." + (line.split(":")[0].trim());
for (Setting setting : Config.getSettings()) {
if (!setting.getCompleteKey().equals(key) || setting.getComments() == null) continue;
config.append(" ").append("\n");
for (String l : setting.getComments()) {
config.append(new String(new char[currentTab]).replace('\0', ' '));
config.append("# ").append(l).append("\n");
}
}
config.append(line).append("\n");
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if (!plugin.getDataFolder().exists())
plugin.getDataFolder().mkdir();
BufferedWriter writer =
new BufferedWriter(new FileWriter(new File(plugin.getDataFolder() + File.separator + "config.yml")));
writer.write(config.toString());
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}