mirror of
https://github.com/songoda/SongodaCore.git
synced 2024-10-22 12:20:26 +02:00
Cleaned up config system.
This commit is contained in:
parent
7d04ff4c96
commit
f218da4fea
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user