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 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 = " has accepted your teleport request."; public static String TELEPORT_ACCEPT_TARGET = "You have accepted the teleport request from ."; public static String TELEPORT_DENIED_REQUESTER = " has denied your teleport request."; public static String TELEPORT_DENIED_TARGET = "You have denied the teleport request from ."; public static String TELEPORT_REQUEST_REQUESTER = "Teleport request sent to ."; public static String TELEPORT_REQUESTHERE_TARGET = " has requested to teleport to you. Type /tpaccept or /tpdeny."; public static String TELEPORT_REQUESTHERE_REQUESTER = "Teleport here request sent to ."; public static String TELEPORT_REQUEST_TARGET = " has requested you to teleport to them. Type /tpaccept or /tpdeny."; public static String TELEPORT_TOGGLE_SET = "Teleport requests toggled ."; public static String NO_PENDING_REQUESTS = "You do not have any pending teleport requests."; public static String TELEPORT_TOGGLED_OFF = " has teleports toggled off!"; public static String TARGET_HAS_PENDING_REQUEST = " has pending request!"; public static String REQUEST_TO_SELF = "You can not teleport to yourself!"; public static String PLAYER_ONLY_COMMAND = "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 ."; public static String INVENTORY_CLEARED_BY_OTHER = "Your inventory has been cleared by "; public static String INVENTORY_CLEARED = "You have cleared your inventory."; public static String SPECIFY_HOME = "Please specify a home!"; public static String HOME_NOT_SET = "You have not set a home!"; public static String HOME_DOES_NOT_EXIST = "Home does not exist!"; public static String HOME_TELEPORT = "Teleporting to home ."; public static String HOME_LIST = "Homes: "; public static String HOME_SET = "Home set."; public static String HOME_SET_MAX = "You have reached the maximum of homes."; public static String INVALID_HOME_NAME = "Invalid home name!"; public static String HOME_DELETED = "The home has been deleted."; public static String TOGGLED_FLIGHT_BY_OTHER = "Toggled flight on ."; public static String TOGGLED_FLIGHT_PLAYER = " toggled flight ."; public static String TOGGLED_FLIGHT = "Toggled fly ."; 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 ."; public static String GAMEMODE_SET_OTHER = "Gamemode for set to ."; public static String GAMEMODE_SET_BY_OTHER = "Gamemode set to by ."; public static String HEAL_SELF = "Your health has been restored."; public static String HEAL_OTHER = "'s health has been restored."; public static String HEAL_BY_OTHER = " has restored your health."; public static String FEED_SELF = "You just fed yourself."; public static String FEED_OTHER = "You have fed ."; public static String FEED_BY_OTHER = " has fed you."; public static String BURN_SELF = "You have set yourself on fire."; public static String BURN_OTHER = "'s has been set in fire."; public static String BURN_BY_OTHER = " 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); } }