Traverse/src/main/java/mc/unraveled/reforged/config/Yaml.java

117 lines
2.9 KiB
Java

package mc.unraveled.reforged.config;
import mc.unraveled.reforged.api.Baker;
import mc.unraveled.reforged.plugin.Traverse;
import org.bukkit.Bukkit;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.YamlConfiguration;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
public abstract class Yaml extends YamlConfiguration implements Baker {
private final String fileName;
private final File dataFolder;
private final Traverse plugin;
private final File yamlFile;
private boolean baked = false;
Yaml(@NotNull Traverse plugin, String fileName, File dataFolder, boolean copyDefaults) {
this.fileName = fileName;
this.plugin = plugin;
this.dataFolder = dataFolder;
this.yamlFile = new File(dataFolder, fileName);
if (copyDefaults) {
plugin.saveResource(fileName, true);
}
bake();
}
Yaml(@NotNull Traverse plugin, String fileName, boolean copyDefaults) {
this(plugin, fileName, plugin.getDataFolder(), copyDefaults);
}
Yaml(@NotNull Traverse plugin, String fileName) {
this(plugin, fileName, false);
}
public String getFileName() {
return fileName;
}
public File getDataFolder() {
return dataFolder;
}
public Traverse getPlugin() {
return plugin;
}
public File getYamlFile() {
return yamlFile;
}
public boolean isBaked() {
return baked;
}
/**
* Makes the file read only after saving to disk.
*/
@Override
public void bake() {
if (baked) return;
try {
super.save(yamlFile);
} catch (IOException e) {
Bukkit.getLogger().severe(e.getMessage());
}
if (yamlFile.setWritable(false)) {
getPlugin().getLogger().info("Baked " + getFileName());
baked = true;
} else {
getPlugin().getLogger().warning("Failed to bake " + getFileName());
}
}
/**
* Allows read and write access to the file.
*/
@Override
public void unbake() {
if (!baked) return;
if (yamlFile.setWritable(true)) {
getPlugin().getLogger().info("Unbaked " + getFileName());
baked = false;
} else {
getPlugin().getLogger().warning("Failed to unbake " + getFileName());
}
}
public void saveToFile() {
unbake();
try {
super.save(yamlFile);
} catch (IOException e) {
Bukkit.getLogger().severe(e.getMessage());
}
bake();
}
public void loadFromFile() {
unbake();
try {
super.load(yamlFile);
} catch (IOException | InvalidConfigurationException e) {
Bukkit.getLogger().severe(e.getMessage());
}
bake();
}
}