ChestShop-3/com/Acrobot/Breeze/Configuration/Configuration.java
2012-11-29 20:28:16 +01:00

84 lines
2.5 KiB
Java

package com.Acrobot.Breeze.Configuration;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
/**
* A class which can be used to make configs easier to load
*
* @author Acrobot
*/
public class Configuration {
/**
* Loads a YAML-formatted file into a class and modifies the file if some of class's fields are missing
*
* @param file File to load
* @param clazz Class to modify
*/
public static void pairFileAndClass(File file, Class clazz) {
FileConfiguration config = YamlConfiguration.loadConfiguration(file);
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(file, true));
for (Field field : clazz.getDeclaredFields()) {
if (!Modifier.isStatic(field.getModifiers()) || Modifier.isTransient(field.getModifiers()) || !Modifier.isPublic(field.getModifiers())) {
continue;
}
String path = field.getName();
try {
if (path.toLowerCase().replace("_", "").startsWith("newline")) {
writer.write('\n');
continue;
}
if (config.isSet(path)) {
field.set(null, ValueParser.parseToJava(config.get(path)));
} else {
writer.write('\n' + FieldParser.parse(field));
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Converts a java value to config-compatible value
*
* @param value Value to parse
* @return Parsed output
*/
public static String parseToConfig(Object value) {
return ValueParser.parseToYAML(value);
}
/**
* Colourises a string (using '&' character)
*
* @param string String to colourise
* @return Colourised string
*/
public static String getColoured(String string) {
return ChatColor.translateAlternateColorCodes('&', string);
}
}