Plex/src/main/java/dev/plex/config/Config.java

113 lines
3.0 KiB
Java
Raw Normal View History

2021-01-03 07:21:15 +00:00
package dev.plex.config;
2020-10-28 03:49:56 +00:00
2021-01-03 07:21:15 +00:00
import dev.plex.Plex;
2022-02-24 04:55:04 +00:00
import dev.plex.util.PlexLog;
2022-01-04 03:04:39 +00:00
import java.io.File;
2022-02-24 04:55:04 +00:00
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
2022-01-27 21:23:01 +00:00
import org.bukkit.configuration.file.YamlConfiguration;
2022-01-04 03:04:39 +00:00
/**
* Creates a custom Config object
*/
public class Config extends YamlConfiguration
2020-10-28 03:49:56 +00:00
{
/**
* The plugin instance
*/
private Plex plugin;
2022-02-24 04:55:04 +00:00
/**
* The File instance
*/
private File file;
/**
* The file name
*/
private String name;
2020-10-28 03:49:56 +00:00
2022-02-24 04:55:04 +00:00
/**
* Whether new entries were added to the file automatically
*/
private boolean added = false;
/**
* Creates a config object
2022-02-22 09:30:23 +00:00
*
* @param plugin The plugin instance
2022-02-22 09:30:23 +00:00
* @param name The file name
*/
public Config(Plex plugin, String name)
2020-10-28 03:49:56 +00:00
{
this.plugin = plugin;
this.file = new File(plugin.getDataFolder(), name);
this.name = name;
2020-10-28 03:49:56 +00:00
if (!file.exists())
{
2020-10-29 00:54:23 +00:00
saveDefault();
2020-10-28 03:49:56 +00:00
}
}
/**
* Loads the configuration file
*/
2020-10-28 03:49:56 +00:00
public void load()
{
try
{
2022-02-24 04:55:04 +00:00
YamlConfiguration externalYamlConfig = YamlConfiguration.loadConfiguration(file);
InputStreamReader internalConfigFileStream = new InputStreamReader(Plex.get().getResource(name), StandardCharsets.UTF_8);
YamlConfiguration internalYamlConfig = YamlConfiguration.loadConfiguration(internalConfigFileStream);
// Gets all the keys inside the internal file and iterates through all of it's key pairs
for (String string : internalYamlConfig.getKeys(true))
{
// Checks if the external file contains the key already.
if (!externalYamlConfig.contains(string))
{
// If it doesn't contain the key, we set the key based off what was found inside the plugin jar
2022-03-03 23:24:15 +00:00
externalYamlConfig.setComments(string, internalYamlConfig.getComments(string));
2022-02-24 04:55:04 +00:00
externalYamlConfig.set(string, internalYamlConfig.get(string));
2022-02-24 06:24:27 +00:00
PlexLog.log("Setting key: " + string + " in " + this.name + " to the default value(s) since it does not exist!");
2022-02-24 04:55:04 +00:00
added = true;
}
}
if (added)
{
externalYamlConfig.save(file);
2022-02-24 06:24:27 +00:00
PlexLog.log("Saving new file...");
2022-03-03 23:24:15 +00:00
added = false;
2022-02-24 04:55:04 +00:00
}
2020-10-28 03:49:56 +00:00
super.load(file);
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
/**
* Saves the configuration file
*/
2020-10-28 03:49:56 +00:00
public void save()
{
try
{
super.save(file);
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
/**
* Moves the configuration file from the plugin's resources folder to the data folder (plugins/Plex/)
*/
2020-10-29 00:54:23 +00:00
private void saveDefault()
2020-10-28 03:49:56 +00:00
{
plugin.saveResource(name, false);
2020-10-28 03:49:56 +00:00
}
}