diff --git a/src/main/java/me/totalfreedom/tfguilds/TFGuilds.java b/src/main/java/me/totalfreedom/tfguilds/TFGuilds.java index 2436829..75d9cf4 100644 --- a/src/main/java/me/totalfreedom/tfguilds/TFGuilds.java +++ b/src/main/java/me/totalfreedom/tfguilds/TFGuilds.java @@ -6,6 +6,11 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; import me.totalfreedom.tfguilds.command.*; import me.totalfreedom.tfguilds.config.Config; import me.totalfreedom.tfguilds.guild.Guild; @@ -34,7 +39,7 @@ public class TFGuilds extends JavaPlugin public void onEnable() { plugin = this; - config = new Config("config.yml"); + config = new Config(this,"config.yml"); sqlDatabase = new SQLDatabase(this); User.loadAll(); Guild.loadAll(); @@ -88,6 +93,19 @@ public class TFGuilds extends JavaPlugin return commands; } + private void forcedSQLPostLoad() { + ExecutorService ex = Executors.newCachedThreadPool(); + Future future = ex.submit(() -> new SQLDatabase(getPlugin())); + try + { + sqlDatabase = future.get(); + } + catch (InterruptedException | ExecutionException e) + { + e.printStackTrace(); + } + } + private void loadSubCommands() { subCommands.put("create", new CreateSubCommand()); diff --git a/src/main/java/me/totalfreedom/tfguilds/config/Config.java b/src/main/java/me/totalfreedom/tfguilds/config/Config.java index 01dbe2e..cb65dcf 100644 --- a/src/main/java/me/totalfreedom/tfguilds/config/Config.java +++ b/src/main/java/me/totalfreedom/tfguilds/config/Config.java @@ -22,10 +22,11 @@ public class Config extends YamlConfiguration private final TFGuilds plugin; private final String fileName; - public Config(String fileName) + public Config(TFGuilds plugin, String fileName) { + this.fileName = fileName; - plugin = TFGuilds.getPlugin(); + this.plugin = plugin; this.file = new File(plugin.getDataFolder(), fileName); if (!file.exists()) @@ -67,10 +68,23 @@ public class Config extends YamlConfiguration YamlConfiguration reader = YamlConfiguration.loadConfiguration(stream); YamlConfiguration writer = YamlConfiguration.loadConfiguration(file); - reader.getKeys(true).forEach(key -> { - if (!writer.contains(key)) { - writer.set(key, reader.get(key)); + AtomicBoolean shouldSave = new AtomicBoolean(false); + + try { + reader.getKeys(true).forEach(key -> { + if (!writer.contains(key)) writer.set(key, reader.get(key)); + if (!shouldSave.get()) shouldSave.set(true); + }); + if (shouldSave.get()) { + writer.save(file); } - }); + } catch (IOException ex) { + TFGuilds.getPlugin() + .getLogger() + .severe("Error attempting to verify configuration: \n" + + ex.getMessage() + + "\nCaused by: " + + ex.getCause()); + } } } diff --git a/src/main/java/me/totalfreedom/tfguilds/sql/SQLDatabase.java b/src/main/java/me/totalfreedom/tfguilds/sql/SQLDatabase.java index 5209c46..1b3bbc4 100644 --- a/src/main/java/me/totalfreedom/tfguilds/sql/SQLDatabase.java +++ b/src/main/java/me/totalfreedom/tfguilds/sql/SQLDatabase.java @@ -22,21 +22,18 @@ public class SQLDatabase } try { - switch (ConfigEntry.CONNECTION_TYPE.getString().toLowerCase()) + if ("mysql".equals(ConfigEntry.CONNECTION_TYPE.getString().toLowerCase())) { - case "sqlite": - connection = DriverManager.getConnection("jdbc:sqlite:" + createDBFile(plugin).getAbsolutePath().replace("%20", " ")); - break; - case "mysql": - connection = DriverManager.getConnection(String.format("jdbc:mysql://%s:%d/%s", - ConfigEntry.MYSQL_HOST.getString(), - ConfigEntry.MYSQL_PORT.getInteger(), - ConfigEntry.MYSQL_DATABASE.getString()), - ConfigEntry.MYSQL_USERNAME.getString(), - password); - break; - default: - connection = DriverManager.getConnection("jdbc:sqlite:" + createDBFile(plugin).getAbsolutePath().replace("%20", " ")); + connection = DriverManager.getConnection(String.format("jdbc:mysql://%s:%d/%s", + ConfigEntry.MYSQL_HOST.getString(), + ConfigEntry.MYSQL_PORT.getInteger(), + ConfigEntry.MYSQL_DATABASE.getString()), + ConfigEntry.MYSQL_USERNAME.getString(), + password); + } + else + { + connection = DriverManager.getConnection("jdbc:sqlite:" + createDBFile(plugin).getAbsolutePath().replace("%20", " ")); } createTables();