diff --git a/src/main/java/no/vestlandetmc/fv/bukkit/FVBukkit.java b/src/main/java/no/vestlandetmc/fv/bukkit/FVBukkit.java index 062d15b..b7cc3d2 100644 --- a/src/main/java/no/vestlandetmc/fv/bukkit/FVBukkit.java +++ b/src/main/java/no/vestlandetmc/fv/bukkit/FVBukkit.java @@ -34,10 +34,9 @@ public void onEnable() { Config.initialize(); MessageHandler.sendConsole("[" + getDescription().getPrefix() + "] Kontakter databasen..."); - new MySqlPool().initialize(); try { - MySqlPool.getConnection(); + new MySqlPool().initialize(); MessageHandler.sendConsole("[" + getDescription().getPrefix() + "] Kontakt med database er oppnådd"); this.getServer().getPluginManager().registerEvents(new PlayerListener(), this); MySQLHandler.sqlEnabled = true; @@ -80,4 +79,20 @@ private void downloadLibs() throws IOException { } } } + + @Override + public void onDisable() { + try { + MessageHandler.sendConsole("[" + getDescription().getPrefix() + "] Stenger databasen..."); + + if(!MySqlPool.getDataSource().getConnection().isClosed()) { + MySqlPool.getDataSource().getConnection().close(); + } + + MessageHandler.sendConsole("[" + getDescription().getPrefix() + "] Kontakten til database er stengt..."); + + } catch (final SQLException e) { + e.printStackTrace(); + } + } } diff --git a/src/main/java/no/vestlandetmc/fv/bukkit/commands/SubCommands.java b/src/main/java/no/vestlandetmc/fv/bukkit/commands/SubCommands.java index 487f560..d5ff6f4 100644 --- a/src/main/java/no/vestlandetmc/fv/bukkit/commands/SubCommands.java +++ b/src/main/java/no/vestlandetmc/fv/bukkit/commands/SubCommands.java @@ -169,23 +169,24 @@ public void reload() { if(!isConsole) { MessageHandler.sendMessage(player, message); } else { MessageHandler.sendConsole(message); } - new MySqlPool().initialize(); - try { - MySqlPool.getConnection(); - if(!isConsole) { MessageHandler.sendMessage(player, sqlEnabled); } - else { MessageHandler.sendConsole(sqlEnabled); } + new MySqlPool().initialize(); + } catch (final SQLException e) { + e.printStackTrace(); + } - if(!isConsole) { MessageHandler.sendMessage(player, sqlSS); } - else { MessageHandler.sendConsole(sqlSS); } + if(!isConsole) { MessageHandler.sendMessage(player, sqlEnabled); } + else { MessageHandler.sendConsole(sqlEnabled); } - MySQLHandler.sqlEnabled = true; - } catch (final SQLException e) { - if(!isConsole) { MessageHandler.sendMessage(player, sqlDisable); } - else { - MySQLHandler.sqlEnabled = false; - MessageHandler.sendConsole(sqlDisable); - } + if(!isConsole) { MessageHandler.sendMessage(player, sqlSS); } + else { MessageHandler.sendConsole(sqlSS); } + + MySQLHandler.sqlEnabled = true; + + if(!isConsole) { MessageHandler.sendMessage(player, sqlDisable); } + else { + MySQLHandler.sqlEnabled = false; + MessageHandler.sendConsole(sqlDisable); } if(!isConsole) { MessageHandler.sendMessage(player, litebans); } diff --git a/src/main/java/no/vestlandetmc/fv/bukkit/database/MySQLHandler.java b/src/main/java/no/vestlandetmc/fv/bukkit/database/MySQLHandler.java index f42784d..5b80b3b 100644 --- a/src/main/java/no/vestlandetmc/fv/bukkit/database/MySQLHandler.java +++ b/src/main/java/no/vestlandetmc/fv/bukkit/database/MySQLHandler.java @@ -15,28 +15,8 @@ public class MySQLHandler { public static boolean sqlEnabled = false; - private Connection connection; - public MySQLHandler() { - try { - if(connection == null) { - connection = MySqlPool.getConnection(); - } - } catch (final SQLException e) { - e.printStackTrace(); - } - } - - public void close() throws SQLException { - if (connection != null) { - connection.close(); - } - } - - public boolean execute(String sql) throws SQLException { - final boolean success = connection.createStatement().execute(sql); - return success; - } + public MySQLHandler() { } /** * Sjekk om en spiller har blitt varslet. @@ -47,20 +27,25 @@ public boolean execute(String sql) throws SQLException { */ public boolean erVarslet(UUID uuid) throws SQLException { final String sql = "SELECT uuid FROM fellesvarsling WHERE uuid=?"; - final PreparedStatement statement = connection.prepareStatement(sql); - statement.setString(1, uuid.toString()); - final ResultSet set = statement.executeQuery(); + try(Connection connection = MySqlPool.getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement(sql);) { + statement.setString(1, uuid.toString()); - while (set.next()) { - return true; - } + final ResultSet set = statement.executeQuery(); - if(connection != null) - connection.close(); + while (set.next()) { + return true; + } - if(statement != null) - statement.close(); + if(connection != null) + connection.close(); + + if(statement != null) + statement.close(); + + } catch(final Exception e) { + e.printStackTrace(); + } return false; @@ -75,51 +60,55 @@ public boolean erVarslet(UUID uuid) throws SQLException { */ public void getInfo(Player player, UUID uuid) throws SQLException { final String sql = "SELECT id, type, server, expire, reason FROM fellesvarsling WHERE uuid=? ORDER BY timestamp DESC"; - final PreparedStatement statement = connection.prepareStatement(sql); - statement.setString(1, uuid.toString()); - final String user = NameFetcher.getName(uuid); - final ResultSet set = statement.executeQuery(); - final long unixTime = System.currentTimeMillis(); - int i = 1; + try(Connection connection = MySqlPool.getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement(sql);) { + statement.setString(1, uuid.toString()); - if(player == null) { MessageHandler.sendConsole("&e--- ==== &6Varslinger - " + user + " &e==== ---"); } - else { MessageHandler.sendMessage(player, "&e--- ==== &6Varslinger - " + user + " &e==== ---"); } + final String user = NameFetcher.getName(uuid); + final ResultSet set = statement.executeQuery(); + final long unixTime = System.currentTimeMillis(); + int i = 1; - while (set.next()) { - final int id = set.getInt("id"); - final String type = set.getString("type"); - final String server = set.getString("server"); - String expire = set.getLong("expire") >= unixTime ? " &8[&aAktiv&8] " : " &8[&cUtgått&8] "; - final String reason = set.getString("reason"); + if(player == null) { MessageHandler.sendConsole("&e--- ==== &6Varslinger - " + user + " &e==== ---"); } + else { MessageHandler.sendMessage(player, "&e--- ==== &6Varslinger - " + user + " &e==== ---"); } - String typeText = null; + while (set.next()) { + final int id = set.getInt("id"); + final String type = set.getString("type"); + final String server = set.getString("server"); + String expire = set.getLong("expire") >= unixTime ? " &8[&aAktiv&8] " : " &8[&cUtgått&8] "; + final String reason = set.getString("reason"); - if(set.getLong("expire") == -1) { expire = " &8[&aAktiv&8] "; } - else if(type.equals("manuell")) { expire = " "; } + String typeText = null; - if(type.equals("ban")) { typeText = "&eHar blitt utestengt" + expire + "&efra"; } - else if(type.equals("mute")) { typeText = "&eHar fått mute" + expire + "&epå"; } - else if(type.equals("warning")) { typeText = "&eHar fått advarsel" + expire + "&epå"; } - else if(type.equals("kick")) { typeText = "&eHar fått kick på"; } - else if(type.equals("manuell")) { typeText = "&eBle lagt til av"; } + if(set.getLong("expire") == -1) { expire = " &8[&aAktiv&8] "; } + else if(type.equals("manuell")) { expire = " "; } - final String messageConsole = "&eID: &6" + id + " " + typeText + " &6" + server + "&e: " + reason; - final String messagePlayer = "&eID: &6" + id + " " + typeText + " &6" + server + "."; + if(type.equals("ban")) { typeText = "&eHar blitt utestengt" + expire + "&efra"; } + else if(type.equals("mute")) { typeText = "&eHar fått mute" + expire + "&epå"; } + else if(type.equals("warning")) { typeText = "&eHar fått advarsel" + expire + "&epå"; } + else if(type.equals("kick")) { typeText = "&eHar fått kick på"; } + else if(type.equals("manuell")) { typeText = "&eBle lagt til av"; } - if(player == null) { MessageHandler.sendConsole(messageConsole); } - else { MessageHandler.clickableMessage(player, messagePlayer, reason, null); } + final String messageConsole = "&eID: &6" + id + " " + typeText + " &6" + server + "&e: " + reason; + final String messagePlayer = "&eID: &6" + id + " " + typeText + " &6" + server + "."; - i++; + if(player == null) { MessageHandler.sendConsole(messageConsole); } + else { MessageHandler.clickableMessage(player, messagePlayer, reason, null); } - if(i == 10) { break; } - } + i++; - if(connection != null) - connection.close(); + if(i == 10) { break; } + } - if(statement != null) - statement.close(); + if(connection != null) + connection.close(); + + if(statement != null) + statement.close(); + } catch(final Exception e) { + e.printStackTrace(); + } } @@ -135,23 +124,26 @@ public void getInfo(Player player, UUID uuid) throws SQLException { public void setUser(UUID uuid, String type, long expire, String reason) throws SQLException { final long timestamp = System.currentTimeMillis() / 1000L; final String sql = "INSERT INTO fellesvarsling (uuid, type, server, timestamp, expire, reason) VALUES (?, ?, ?, ?, ?, ?)"; - final PreparedStatement statement = connection.prepareStatement(sql); - statement.setString(1, uuid.toString()); - statement.setString(2, type); - statement.setString(3, Config.SERVERNAME); - statement.setLong(4, timestamp); - statement.setLong(5, expire); - statement.setString(6, reason); + try(Connection connection = MySqlPool.getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement(sql);) { + statement.setString(1, uuid.toString()); + statement.setString(2, type); + statement.setString(3, Config.SERVERNAME); + statement.setLong(4, timestamp); + statement.setLong(5, expire); + statement.setString(6, reason); - statement.executeUpdate(); + statement.executeUpdate(); - if(connection != null) - connection.close(); + if(connection != null) + connection.close(); - if(statement != null) - statement.close(); + if(statement != null) + statement.close(); + } catch(final Exception e) { + e.printStackTrace(); + } } /** @@ -162,23 +154,26 @@ public void setUser(UUID uuid, String type, long expire, String reason) throws S * @throws SQLException */ public boolean deleteUser(int id) throws SQLException { - boolean complete; + boolean complete = false; final String sql = "DELETE FROM fellesvarsling WHERE id=? AND server=?"; - final PreparedStatement statement = connection.prepareStatement(sql); - statement.setInt(1, id); - statement.setString(2, Config.SERVERNAME); + try(Connection connection = MySqlPool.getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement(sql);) { + statement.setInt(1, id); + statement.setString(2, Config.SERVERNAME); - if(statement.executeUpdate() == 0) { - complete = false; - } else { complete = true; } + if(statement.executeUpdate() == 0) { + complete = false; + } else { complete = true; } - if(connection != null) - connection.close(); + if(connection != null) + connection.close(); - if(statement != null) - statement.close(); + if(statement != null) + statement.close(); + } catch(final Exception e) { + e.printStackTrace(); + } return complete; } @@ -193,16 +188,17 @@ public void deleteOld(int days) throws SQLException { final long daysSeconds = days * 24 * 60 * 60; final long unixTime = System.currentTimeMillis() / 1000L - daysSeconds; final String sql = "DELETE FROM fellesvarsling WHERE timestamp= unixTime ? " &8[&aAktiv&8] " : " &8[&cUtgått&8] "; - final String reason = set.getString("reason"); + if(player == null) { MessageHandler.sendConsole("&e--- ==== &6Varslinger - " + user + " &e==== ---"); } + else { MessageHandler.sendMessage(player, "&e--- ==== &6Varslinger - " + user + " &e==== ---"); } - String typeText = null; + while (set.next()) { + final int id = set.getInt("id"); + final String type = set.getString("type"); + final String server = set.getString("server"); + String expire = set.getLong("expire") >= unixTime ? " &8[&aAktiv&8] " : " &8[&cUtgått&8] "; + final String reason = set.getString("reason"); - if(set.getLong("expire") == -1) { expire = " &8[&aAktiv&8] "; } - else if(type.equals("manuell")) { expire = " "; } + String typeText = null; - if(type.equals("ban")) { typeText = "&eHar blitt utestengt" + expire + "&efra"; } - else if(type.equals("mute")) { typeText = "&eHar fått mute" + expire + "&epå"; } - else if(type.equals("warning")) { typeText = "&eHar fått advarsel" + expire + "&epå"; } - else if(type.equals("kick")) { typeText = "&eHar fått kick på"; } - else if(type.equals("manuell")) { typeText = "&eBle lagt til av"; } + if(set.getLong("expire") == -1) { expire = " &8[&aAktiv&8] "; } + else if(type.equals("manuell")) { expire = " "; } - final String messageConsole = "&eID: &6" + id + " " + typeText + " &6" + server + "&e: " + reason; - final String messagePlayer = "&eID: &6" + id + " " + typeText + " &6" + server + "."; + if(type.equals("ban")) { typeText = "&eHar blitt utestengt" + expire + "&efra"; } + else if(type.equals("mute")) { typeText = "&eHar fått mute" + expire + "&epå"; } + else if(type.equals("warning")) { typeText = "&eHar fått advarsel" + expire + "&epå"; } + else if(type.equals("kick")) { typeText = "&eHar fått kick på"; } + else if(type.equals("manuell")) { typeText = "&eBle lagt til av"; } - if(player == null) { MessageHandler.sendConsole(messageConsole); } - else { MessageHandler.clickableMessage(player, messagePlayer, reason, null); } + final String messageConsole = "&eID: &6" + id + " " + typeText + " &6" + server + "&e: " + reason; + final String messagePlayer = "&eID: &6" + id + " " + typeText + " &6" + server + "."; - i++; + if(player == null) { MessageHandler.sendConsole(messageConsole); } + else { MessageHandler.clickableMessage(player, messagePlayer, reason, null); } - if(i == 10) { break; } - } + i++; - if(connection != null) - connection.close(); + if(i == 10) { break; } + } - if(statement != null) - statement.close(); + if(connection != null) + connection.close(); + + if(statement != null) + statement.close(); + } catch(final Exception e) { + e.printStackTrace(); + } } @@ -134,23 +123,26 @@ public void getInfo(ProxiedPlayer player, UUID uuid) throws SQLException { public void setUser(UUID uuid, String type, long expire, String reason) throws SQLException { final long timestamp = System.currentTimeMillis() / 1000L; final String sql = "INSERT INTO fellesvarsling (uuid, type, server, timestamp, expire, reason) VALUES (?, ?, ?, ?, ?, ?)"; - final PreparedStatement statement = connection.prepareStatement(sql); - statement.setString(1, uuid.toString()); - statement.setString(2, type); - statement.setString(3, Config.SERVERNAME); - statement.setLong(4, timestamp); - statement.setLong(5, expire); - statement.setString(6, reason); + try(Connection connection = MySqlPool.getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement(sql);) { + statement.setString(1, uuid.toString()); + statement.setString(2, type); + statement.setString(3, Config.SERVERNAME); + statement.setLong(4, timestamp); + statement.setLong(5, expire); + statement.setString(6, reason); - statement.executeUpdate(); + statement.executeUpdate(); - if(connection != null) - connection.close(); + if(connection != null) + connection.close(); - if(statement != null) - statement.close(); + if(statement != null) + statement.close(); + } catch(final Exception e) { + e.printStackTrace(); + } } /** @@ -161,23 +153,26 @@ public void setUser(UUID uuid, String type, long expire, String reason) throws S * @throws SQLException */ public boolean deleteUser(int id) throws SQLException { - boolean complete; + boolean complete = false; final String sql = "DELETE FROM fellesvarsling WHERE id=? AND server=?"; - final PreparedStatement statement = connection.prepareStatement(sql); - statement.setInt(1, id); - statement.setString(2, Config.SERVERNAME); + try(Connection connection = MySqlPool.getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement(sql);) { + statement.setInt(1, id); + statement.setString(2, Config.SERVERNAME); - if(statement.executeUpdate() == 0) { - complete = false; - } else { complete = true; } + if(statement.executeUpdate() == 0) { + complete = false; + } else { complete = true; } - if(connection != null) - connection.close(); + if(connection != null) + connection.close(); - if(statement != null) - statement.close(); + if(statement != null) + statement.close(); + } catch(final Exception e) { + e.printStackTrace(); + } return complete; } @@ -192,16 +187,18 @@ public void deleteOld(int days) throws SQLException { final long daysSeconds = days * 24 * 60 * 60; final long unixTime = System.currentTimeMillis() / 1000L - daysSeconds; final String sql = "DELETE FROM fellesvarsling WHERE timestamp { + ProxyServer.getInstance().getScheduler().schedule(FVBungee.getInstance(), () -> { + if(!player.isConnected()) { return; } + try { if(sql.erVarslet(uuid)) { MessageHandler.clickableAnnounce("&c" + player.getName() + " har varslinger. Klikk her for mer informasjon.", "/fellesvarsling lookup " + player.getName()); @@ -28,6 +31,6 @@ public void onPlayerJoin(PostLoginEvent e) { } catch (final SQLException ex) { ex.printStackTrace(); } - }); + }, 1, TimeUnit.SECONDS); } }