Essentia/plugin/src/main/java/com/alttd/essentia/configuration/Config.java
2024-07-28 12:52:55 +02:00

267 lines
15 KiB
Java
Executable File

package com.alttd.essentia.configuration;
import com.alttd.essentia.EssentiaPlugin;
import com.google.common.base.Throwables;
import org.bukkit.Bukkit;
import org.bukkit.Sound;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.List;
import java.util.logging.Level;
public class Config {
private static final String HEADER = """
Essentia main configuration file
""";
private static File CONFIG_FILE;
public static File CONFIG_PATH;
public static YamlConfiguration config;
static int version;
public static void init() {
CONFIG_PATH = EssentiaPlugin.instance().getDataFolder();
CONFIG_FILE = new File(CONFIG_PATH, "config.yml");
config = new YamlConfiguration();
try {
config.load(CONFIG_FILE);
} catch (IOException ignore) {
} catch (InvalidConfigurationException ex) {
Bukkit.getLogger().log(Level.SEVERE, "Could not load config.yml, please correct your syntax errors", ex);
Throwables.throwIfUnchecked(ex);
}
config.options().header(HEADER);
config.options().copyDefaults(true);
version = getInt("config-version", 1);
set("config-version", 1);
readConfig(Config.class, null);
}
static void readConfig(Class<?> clazz, Object instance) {
for (Method method : clazz.getDeclaredMethods()) {
if (Modifier.isPrivate(method.getModifiers())) {
if (method.getParameterTypes().length == 0 && method.getReturnType() == Void.TYPE) {
try {
method.setAccessible(true);
method.invoke(instance);
} catch (InvocationTargetException ex) {
Throwables.throwIfUnchecked(ex);
} catch (Exception ex) {
Bukkit.getLogger().log(Level.SEVERE, "Error invoking " + method, ex);
}
}
}
}
saveConfig();
}
static void saveConfig() {
try {
config.save(CONFIG_FILE);
} catch (IOException ex) {
Bukkit.getLogger().log(Level.SEVERE, "Could not save " + CONFIG_FILE, ex);
}
}
private static void set(String path, Object val) {
config.addDefault(path, val);
config.set(path, val);
}
private static boolean getBoolean(String path, boolean def) {
config.addDefault(path, def);
return config.getBoolean(path, config.getBoolean(path));
}
private static double getDouble(String path, double def) {
config.addDefault(path, def);
return config.getDouble(path, config.getDouble(path));
}
private static int getInt(String path, int def) {
config.addDefault(path, def);
return config.getInt(path, config.getInt(path));
}
private static <T> List getList(String path, T def) {
config.addDefault(path, def);
return config.getList(path, config.getList(path));
}
private static String getString(String path, String def) {
config.addDefault(path, def);
return config.getString(path, config.getString(path));
}
protected static void log(Level level, String s) {
Bukkit.getLogger().log(level, s);
}
public static int TELEPORT_REQUEST_TIMEOUT = 30;
public static boolean TELEPORT_REQUEST_TIMEOUT_MESSAGES = true;
public static boolean BACK_ON_DEATH = false;
public static boolean TELEPORT_SOUNDS = true;
public static Sound SOUND_TO;
public static Sound SOUND_FROM;
public static int BACK_COOLDOWN = 60;
public static boolean UNSAFE_ENCHANTMENTS = false;
public static String SPAWN_WORLD = "Skyblock";
private static void settings() {
TELEPORT_REQUEST_TIMEOUT = getInt("teleport-request-timeout", TELEPORT_REQUEST_TIMEOUT);
TELEPORT_REQUEST_TIMEOUT_MESSAGES = getBoolean("teleport-request-timeout-message", TELEPORT_REQUEST_TIMEOUT_MESSAGES);
BACK_ON_DEATH = getBoolean("back-on-death", BACK_ON_DEATH);
TELEPORT_SOUNDS = getBoolean("use-teleport-sounds", TELEPORT_SOUNDS);
SPAWN_WORLD = getString("spawn-world", SPAWN_WORLD);
try {
SOUND_TO = Sound.valueOf(config.getString("sound-to", "ENTITY_ENDERMAN_TELEPORT"));
} catch (IllegalArgumentException e) {
SOUND_TO = Sound.ENTITY_ENDERMAN_TELEPORT;
}
try {
SOUND_FROM = Sound.valueOf(config.getString("sound-from", "ENTITY_ENDERMAN_TELEPORT"));
} catch (IllegalArgumentException e) {
SOUND_FROM = Sound.ENTITY_ENDERMAN_TELEPORT;
}
UNSAFE_ENCHANTMENTS = getBoolean("unsafe-enchantments", UNSAFE_ENCHANTMENTS);
BACK_COOLDOWN = getInt("back-cooldown", BACK_COOLDOWN);
}
public static String REQUEST_TIMED_OUT = "Your teleport request has timed out!";
public static String TELEPORT_ACCEPT_REQUESTER = "<target> has accepted your teleport request.";
public static String TELEPORT_ACCEPT_TARGET = "You have accepted the teleport request from <requester>.";
public static String TELEPORT_DENIED_REQUESTER = "<target> has denied your teleport request.";
public static String TELEPORT_DENIED_TARGET = "You have denied the teleport request from <requester>.";
public static String TELEPORT_REQUEST_REQUESTER = "Teleport request sent to <target>.";
public static String TELEPORT_REQUESTHERE_TARGET = "<requester> has requested to teleport to you. Type /tpaccept or /tpdeny.";
public static String TELEPORT_REQUESTHERE_REQUESTER = "Teleport here request sent to <target>.";
public static String TELEPORT_REQUEST_TARGET = "<requester> has requested you to teleport to them. Type <gold>/tpaccept</gold> or <gold>/tpdeny</gold>.";
public static String TELEPORT_TOGGLE_SET = "Teleport requests toggled <gold><toggle></gold>.";
public static String NO_PENDING_REQUESTS = "You do not have any pending teleport requests.";
public static String TELEPORT_TOGGLED_OFF = "<target> has teleports toggled off!";
public static String TARGET_HAS_PENDING_REQUEST = "<target> has pending request!";
public static String REQUEST_TO_SELF = "You can not teleport to yourself!";
public static String PLAYER_ONLY_COMMAND = "<red>This command is only available to players.";
public static String NO_PLAYER_SPECIFIED = "You must specify a player name!";
public static String PLAYER_NOT_FOUND = "That player does not exist!";
public static String PLAYER_NOT_ONLINE = "That player is not online right now!";
public static String COMMAND_NO_PERMISSION = "You do not have permission for that command!";
public static String PLAYER_INVENTORY_CLEARED = "You have cleared the inventory of <target>.";
public static String INVENTORY_CLEARED_BY_OTHER = "Your inventory has been cleared by <requester>";
public static String INVENTORY_CLEARED = "You have cleared your inventory.";
public static String SPECIFY_HOME = "Please specify a home!<newline><homelist>";
public static String HOME_NOT_SET = "You have not set a home!";
public static String HOME_DOES_NOT_EXIST = "Home <home> does not exist!";
public static String HOME_TELEPORT = "Teleporting to home <home>.";
public static String HOME_LIST = "Homes: <homelist>";
public static String HOME_SET = "Home <home> set.";
public static String HOME_SET_MAX = "You have reached the maximum of <limit> homes.";
public static String INVALID_HOME_NAME = "Invalid home name!";
public static String HOME_DELETED = "The home <home> has been deleted.";
public static String TOGGLED_FLIGHT_BY_OTHER = "Toggled flight <status> on <target>.";
public static String TOGGLED_FLIGHT_PLAYER = "<player> toggled flight <status>.";
public static String TOGGLED_FLIGHT = "Toggled fly <status>.";
public static String NO_BACK_LOCATION = "No back location found!";
public static String TELEPORTING_BACK = "Teleporting back to previous location.";
public static String NO_DEATH_LOCATION = "No death location found!";
public static String TELEPORTING_BACK_DEATH = "Teleporting back to previous death location.";
public static String BACK_DEATH_HINT = "Type /dback to go back to where you died.";
public static String GAMEMODE_SET = "Gamemode set to <gamemode>.";
public static String GAMEMODE_SET_OTHER = "Gamemode for <target> set to <gamemode>.";
public static String GAMEMODE_SET_BY_OTHER = "Gamemode set to <gamemode> by <requester>.";
public static String HEAL_SELF = "Your health has been restored.";
public static String HEAL_OTHER = "<target>'s health has been restored.";
public static String HEAL_BY_OTHER = "<requester> has restored your health.";
public static String FEED_SELF = "You just fed yourself.";
public static String FEED_OTHER = "You have fed <target>.";
public static String FEED_BY_OTHER = "<requester> has fed you.";
public static String BURN_SELF = "You have set yourself on fire.";
public static String BURN_OTHER = "<target>'s has been set in fire.";
public static String BURN_BY_OTHER = "<requester> has set you on fire.";
private static void messages() {
REQUEST_TIMED_OUT = getString("messages.request.time-out", REQUEST_TIMED_OUT);
TELEPORT_ACCEPT_TARGET = getString("messages.request.teleport-accept-target", TELEPORT_ACCEPT_TARGET);
TELEPORT_ACCEPT_REQUESTER = getString("messages.request.teleport-accept-requester", TELEPORT_ACCEPT_REQUESTER);
TELEPORT_DENIED_TARGET = getString("messages.request.teleport-denied-target", TELEPORT_DENIED_TARGET);
TELEPORT_DENIED_REQUESTER = getString("messages.request.teleport-denied-requester", TELEPORT_DENIED_REQUESTER);
TELEPORT_REQUESTHERE_TARGET = getString("messages.request.teleport-requesthere-target", TELEPORT_REQUESTHERE_TARGET);
TELEPORT_REQUEST_TARGET = getString("messages.request.teleport-request-target", TELEPORT_REQUEST_TARGET);
TELEPORT_TOGGLE_SET = getString("messages.request.teleport-toggle-set", TELEPORT_TOGGLE_SET);
NO_PENDING_REQUESTS = getString("messages.request.no-pending-requests", NO_PENDING_REQUESTS);
TELEPORT_TOGGLED_OFF = getString("messages.request.target-toggled-off", TELEPORT_TOGGLED_OFF);
TARGET_HAS_PENDING_REQUEST = getString("messages.request.target-has-pending-request", TARGET_HAS_PENDING_REQUEST);
REQUEST_TO_SELF = getString("messages.request.request-to-self", REQUEST_TO_SELF);
PLAYER_ONLY_COMMAND = getString("messages.command.player-only-command", PLAYER_ONLY_COMMAND);
NO_PLAYER_SPECIFIED = getString("messages.command.no-player-specified", NO_PLAYER_SPECIFIED);
PLAYER_NOT_FOUND = getString("messages.command.player-not-found", PLAYER_NOT_FOUND);
PLAYER_NOT_ONLINE = getString("messages.command.player-not-online", PLAYER_NOT_ONLINE);
COMMAND_NO_PERMISSION = getString("messages.command.no-permission", COMMAND_NO_PERMISSION);
PLAYER_INVENTORY_CLEARED = getString("messages.command.clear-inventory.player-inventory-cleared", PLAYER_INVENTORY_CLEARED);
INVENTORY_CLEARED_BY_OTHER = getString("messages.command.clear-inventory.inventory-clear-by-other", INVENTORY_CLEARED_BY_OTHER);
INVENTORY_CLEARED = getString("messages.command.clear-inventory.inventory-cleared", INVENTORY_CLEARED);
SPECIFY_HOME = getString("messages.command.home.specify-home", SPECIFY_HOME);
HOME_NOT_SET = getString("messages.command.home.home-not-set", HOME_NOT_SET);
HOME_DOES_NOT_EXIST = getString("messages.command.home.home-does-not-exist", HOME_DOES_NOT_EXIST);
HOME_TELEPORT = getString("messages.command.home.home-teleport", HOME_TELEPORT);
HOME_LIST = getString("messages.command.home.home-list", HOME_LIST);
HOME_SET = getString("messages.command.home.home-set", HOME_SET);
HOME_SET_MAX = getString("messages.command.home.home-set-max", HOME_SET_MAX);
INVALID_HOME_NAME = getString("messages.command.home.invalid-home-name", INVALID_HOME_NAME);
HOME_DELETED = getString("messages.command.home.invalid-home-name", HOME_DELETED);
TOGGLED_FLIGHT_BY_OTHER = getString("messages.command.fly.toggled-by-other", TOGGLED_FLIGHT_BY_OTHER);
TOGGLED_FLIGHT_PLAYER = getString("messages.command.fly.toggled-flight-other", TOGGLED_FLIGHT_PLAYER);
TOGGLED_FLIGHT = getString("messages.command.fly.toggled-flight", TOGGLED_FLIGHT);
NO_BACK_LOCATION = getString("messages.command.back.no-back-location", NO_BACK_LOCATION);
TELEPORTING_BACK = getString("messages.command.back.teleporting-back", TELEPORTING_BACK);
NO_DEATH_LOCATION = getString("messages.command.back.no-death-location", NO_DEATH_LOCATION);
TELEPORTING_BACK_DEATH = getString("messages.command.back.teleporting-back-death", TELEPORTING_BACK_DEATH);
BACK_DEATH_HINT = getString("messages.command.back.dback-hint", BACK_DEATH_HINT);
GAMEMODE_SET = getString("messages.command.gamemode.gamemode-set", GAMEMODE_SET);
GAMEMODE_SET_OTHER = getString("messages.command.gamemode.gamemode-set-other", GAMEMODE_SET_OTHER);
GAMEMODE_SET_BY_OTHER = getString("messages.command.gamemode.gamemode-set-by-other", GAMEMODE_SET_BY_OTHER);
HEAL_SELF = getString("messages.command.heal.heal-self", HEAL_SELF);
HEAL_OTHER = getString("messages.command.heal.heal-other", HEAL_OTHER);
HEAL_BY_OTHER = getString("messages.command.heal.heal-by-other", HEAL_BY_OTHER);
FEED_SELF = getString("messages.command.feed.feed-self", FEED_SELF);
FEED_OTHER = getString("messages.command.feed.feed-other", FEED_OTHER);
FEED_BY_OTHER = getString("messages.command.feed.feed-by-other", FEED_BY_OTHER);
}
public static String STORAGE_TYPE = "mysql";
public static boolean AUTO_SAVE = true;
public static int AUTO_SAVE_DELAY = 60;
public static String MYSQL_IP = "localhost";
public static String MYSQL_PORT = "3306";
public static String MYSQL_DATABASE_NAME = "essentia";
public static String MYSQL_USERNAME = "root";
public static String MYSQL_PASSWORD = "root";
public static int MYSQL_CONNECTIONS = 10;
public static int MYSQL_QUEUE_DELAY = 5;
private static void storage() {
STORAGE_TYPE = getString("storage.type", STORAGE_TYPE);
AUTO_SAVE = getBoolean("storage.auto-save", AUTO_SAVE);
AUTO_SAVE_DELAY = getInt("storaeg.auto-save-delay", AUTO_SAVE_DELAY);
MYSQL_IP = getString("storage.mysql.ip", MYSQL_IP);
MYSQL_PORT = getString("storage.mysql.port", MYSQL_PORT);
MYSQL_DATABASE_NAME = getString("storage.mysql.database", MYSQL_DATABASE_NAME);
MYSQL_USERNAME = getString("storage.mysql.username", MYSQL_USERNAME);
MYSQL_PASSWORD = getString("storage.mysql.password", MYSQL_PASSWORD);
}
}