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
|
|
|
|
2022-02-07 17:07:48 +00:00
|
|
|
/**
|
|
|
|
* Creates a custom Config object
|
|
|
|
*/
|
2020-10-31 15:09:13 +00:00
|
|
|
public class Config extends YamlConfiguration
|
2020-10-28 03:49:56 +00:00
|
|
|
{
|
2022-02-07 17:07:48 +00:00
|
|
|
/**
|
|
|
|
* The plugin instance
|
|
|
|
*/
|
2020-10-29 02:10:47 +00:00
|
|
|
private Plex plugin;
|
2022-02-24 04:55:04 +00:00
|
|
|
|
2022-02-07 17:07:48 +00:00
|
|
|
/**
|
|
|
|
* The File instance
|
|
|
|
*/
|
2020-10-29 02:10:47 +00:00
|
|
|
private File file;
|
2022-02-07 17:07:48 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The file name
|
|
|
|
*/
|
2020-10-31 15:09:13 +00:00
|
|
|
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;
|
|
|
|
|
2022-02-07 17:07:48 +00:00
|
|
|
/**
|
|
|
|
* Creates a config object
|
2022-02-22 09:30:23 +00:00
|
|
|
*
|
2022-02-07 17:07:48 +00:00
|
|
|
* @param plugin The plugin instance
|
2022-02-22 09:30:23 +00:00
|
|
|
* @param name The file name
|
2022-02-07 17:07:48 +00:00
|
|
|
*/
|
2020-10-31 15:09:13 +00:00
|
|
|
public Config(Plex plugin, String name)
|
2020-10-28 03:49:56 +00:00
|
|
|
{
|
|
|
|
this.plugin = plugin;
|
2020-10-31 15:09:13 +00:00
|
|
|
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
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-02-07 17:07:48 +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();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-02-07 17:07:48 +00:00
|
|
|
/**
|
|
|
|
* Saves the configuration file
|
|
|
|
*/
|
2020-10-28 03:49:56 +00:00
|
|
|
public void save()
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
super.save(file);
|
|
|
|
}
|
|
|
|
catch (Exception ex)
|
|
|
|
{
|
|
|
|
ex.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-02-07 17:07:48 +00:00
|
|
|
/**
|
|
|
|
* 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
|
|
|
{
|
2020-10-31 15:09:13 +00:00
|
|
|
plugin.saveResource(name, false);
|
2020-10-28 03:49:56 +00:00
|
|
|
}
|
|
|
|
}
|