diff --git a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitListener.java b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitListener.java index d3e8ade..0f2f730 100644 --- a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitListener.java +++ b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitListener.java @@ -23,6 +23,7 @@ import java.util.UUID; import java.util.concurrent.TimeUnit; import java.util.logging.Level; +@SuppressWarnings("unchecked") public class BukkitListener extends VPNExecutor implements Listener { private final Cache responseCache = CacheBuilder.newBuilder() .expireAfterWrite(5, TimeUnit.MINUTES) @@ -50,19 +51,22 @@ public class BukkitListener extends VPNExecutor implements Listener { log(Level.INFO, String.format(log, objects)); } + @Override + public void logException(String message, Exception ex) { + Bukkit.getLogger().log(Level.SEVERE, message, ex); + } + @EventHandler public void onJoin(final PlayerJoinEvent event) { AntiVPN.getInstance().getPlayerExecutor().getPlayer(event.getPlayer().getUniqueId()) - .ifPresent(player -> { - AntiVPN.getInstance().getDatabase().alertsState(player.getUuid(), enabled -> { - if(enabled) { - player.setAlertsEnabled(true); - player.sendMessage(AntiVPN.getInstance().getMessageHandler() - .getString("command-alerts-toggled") - .getFormattedMessage(new VpnString.Var<>("state", true))); - } - }); - }); + .ifPresent(player -> AntiVPN.getInstance().getDatabase().alertsState(player.getUuid(), enabled -> { + if(enabled) { + player.setAlertsEnabled(true); + player.sendMessage(AntiVPN.getInstance().getMessageHandler() + .getString("command-alerts-toggled") + .getFormattedMessage(new VpnString.Var<>("state", true))); + } + })); } @EventHandler diff --git a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeListener.java b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeListener.java index 26afe43..826d04e 100644 --- a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeListener.java +++ b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeListener.java @@ -56,6 +56,11 @@ public class BungeeListener extends VPNExecutor implements Listener { log(Level.INFO, String.format(log, objects)); } + @Override + public void logException(String message, Exception ex) { + BungeeCord.getInstance().getLogger().log(Level.SEVERE, message, ex); + } + @EventHandler(priority = EventPriority.LOWEST) public void onListener(final PreLoginEvent event) { if(!responseCache.asMap().containsKey(event.getConnection().getUniqueId())) return; @@ -99,14 +104,14 @@ public class BungeeListener extends VPNExecutor implements Listener { responseCache.put(event.getPlayer().getUniqueId(), result); - if(AntiVPN.getInstance().getVpnConfig().countryList().size() > 0 + if(!AntiVPN.getInstance().getVpnConfig().countryList().isEmpty() // This bit of code will decide whether or not to kick the player // If it contains the code and it is set to whitelist, it will not kick as they are equal // and vise versa. However, if the contains does not match the state, it will kick. && AntiVPN.getInstance().getVpnConfig().countryList() .contains(result.getCountryCode()) != AntiVPN.getInstance().getVpnConfig().whitelistCountries()) { //Using our built in kicking system if no commands are configured - if(AntiVPN.getInstance().getVpnConfig().countryKickCommands().size() == 0) { + if(AntiVPN.getInstance().getVpnConfig().countryKickCommands().isEmpty()) { final String kickReason = AntiVPN.getInstance().getVpnConfig() .countryVanillaKickReason(); // Kicking our player diff --git a/Common/pom.xml b/Common/pom.xml index 7d82b79..3c8ee46 100644 --- a/Common/pom.xml +++ b/Common/pom.xml @@ -86,8 +86,6 @@ com.mysql mysql-connector-j 9.1.0 - jar - compile com.h2database diff --git a/Common/src/main/java/dev/brighten/antivpn/api/VPNExecutor.java b/Common/src/main/java/dev/brighten/antivpn/api/VPNExecutor.java index 3f59cae..84d89f1 100644 --- a/Common/src/main/java/dev/brighten/antivpn/api/VPNExecutor.java +++ b/Common/src/main/java/dev/brighten/antivpn/api/VPNExecutor.java @@ -38,6 +38,12 @@ public abstract class VPNExecutor { public abstract void log(String log, Object... objects); + public abstract void logException(String message, Exception ex); + + public void logException(Exception ex) { + logException("An exception occurred: " + ex.getMessage(), ex); + } + public boolean isWhitelisted(UUID uuid) { if(AntiVPN.getInstance().getVpnConfig().isDatabaseEnabled()) { return AntiVPN.getInstance().getDatabase().isWhitelisted(uuid); diff --git a/Common/src/main/java/dev/brighten/antivpn/command/impl/PlanCommand.java b/Common/src/main/java/dev/brighten/antivpn/command/impl/PlanCommand.java index 5b193ab..3d4ae8f 100644 --- a/Common/src/main/java/dev/brighten/antivpn/command/impl/PlanCommand.java +++ b/Common/src/main/java/dev/brighten/antivpn/command/impl/PlanCommand.java @@ -10,6 +10,7 @@ import dev.brighten.antivpn.web.FunkemunkyAPI; import dev.brighten.antivpn.web.objects.QueryResponse; import java.io.IOException; +import java.util.Collections; import java.util.List; public class PlanCommand extends Command { @@ -53,7 +54,7 @@ public class PlanCommand extends Command { VPNExecutor.threadExecutor.execute(() -> { QueryResponse result; try { - if(AntiVPN.getInstance().getVpnConfig().getLicense().equals("")) { + if(AntiVPN.getInstance().getVpnConfig().getLicense().isEmpty()) { result = FunkemunkyAPI.getQueryResponse(); } else { result = FunkemunkyAPI.getQueryResponse(AntiVPN.getInstance().getVpnConfig().getLicense()); @@ -81,11 +82,11 @@ public class PlanCommand extends Command { result.getQueries(), queryMax); executor.sendMessage(StringUtil.line("&8")); } catch(JSONException e) { - e.printStackTrace(); + AntiVPN.getInstance().getExecutor().logException(e); executor.sendMessage("&cThere was a JSONException thrown while looking up your query " + "information. Check console for more details."); } catch (IOException e) { - e.printStackTrace(); + AntiVPN.getInstance().getExecutor().logException(e); executor.sendMessage("&cThere was a IOException thrown while looking up your query " + "information. Check console for more details."); } @@ -95,6 +96,6 @@ public class PlanCommand extends Command { @Override public List tabComplete(CommandExecutor executor, String alias, String[] args) { - return null; + return Collections.emptyList(); } } diff --git a/Common/src/main/java/dev/brighten/antivpn/database/sql/utils/MySQL.java b/Common/src/main/java/dev/brighten/antivpn/database/sql/utils/MySQL.java index c643a20..5184ef4 100644 --- a/Common/src/main/java/dev/brighten/antivpn/database/sql/utils/MySQL.java +++ b/Common/src/main/java/dev/brighten/antivpn/database/sql/utils/MySQL.java @@ -1,5 +1,6 @@ package dev.brighten.antivpn.database.sql.utils; +import com.mysql.cj.jdbc.Driver; import dev.brighten.antivpn.AntiVPN; import org.h2.jdbc.JdbcConnection; @@ -15,11 +16,7 @@ public class MySQL { public static void init() { try { if (conn == null || conn.isClosed()) { - try { - Class.forName("com.mysql.cj.jdbc.Driver"); - } catch (ClassNotFoundException e) { - Class.forName("com.mysql.jdbc.Driver"); - } + DriverManager.registerDriver(new Driver()); conn = DriverManager.getConnection("jdbc:mysql://" + AntiVPN.getInstance().getVpnConfig().getIp() + ":" + AntiVPN.getInstance().getVpnConfig().getPort() + "/?useSSL=true&autoReconnect=true", @@ -33,12 +30,10 @@ public class MySQL { AntiVPN.getInstance().getExecutor().log("Connection to MySQL has been established."); } } catch (Exception e) { - AntiVPN.getInstance().getExecutor().log("Failed to load mysql: " + e.getMessage()); - e.printStackTrace(); + AntiVPN.getInstance().getExecutor().logException("Failed to load mysql: " + e.getMessage(), e); } } - private static boolean attemptedTwice = false; public static void initH2() { File dataFolder = new File(AntiVPN.getInstance().getPluginFolder(), "databases"); File databaseFile = new File(dataFolder, "database"); @@ -51,17 +46,15 @@ public class MySQL { Query.use(conn); AntiVPN.getInstance().getExecutor().log("Connection to H2 has been established."); } catch (SQLException ex) { - AntiVPN.getInstance().getExecutor().log("H2 exception on initialize"); - ex.printStackTrace(); + AntiVPN.getInstance().getExecutor().logException("H2 exception on initialize: " + ex.getMessage(), ex); } - attemptedTwice = true; } public static void use() { try { init(); } catch (Exception e) { - e.printStackTrace(); + AntiVPN.getInstance().getExecutor().logException(e); } } @@ -73,9 +66,8 @@ public class MySQL { } else conn.close(); conn = null; } - attemptedTwice = false; } catch (Exception e) { - e.printStackTrace(); + AntiVPN.getInstance().getExecutor().logException(e); } } @@ -86,7 +78,7 @@ public class MySQL { try { return conn.isClosed(); } catch (SQLException e) { - e.printStackTrace(); + AntiVPN.getInstance().getExecutor().logException(e); return true; } } diff --git a/Velocity/pom.xml b/Velocity/pom.xml index 345849d..93d2f38 100644 --- a/Velocity/pom.xml +++ b/Velocity/pom.xml @@ -27,7 +27,7 @@ com.velocitypowered velocity-api - 3.0.1 + 3.1.1 provided diff --git a/Velocity/src/main/java/dev/brighten/antivpn/velocity/VelocityListener.java b/Velocity/src/main/java/dev/brighten/antivpn/velocity/VelocityListener.java index 1cfd243..ea8b57a 100644 --- a/Velocity/src/main/java/dev/brighten/antivpn/velocity/VelocityListener.java +++ b/Velocity/src/main/java/dev/brighten/antivpn/velocity/VelocityListener.java @@ -79,11 +79,20 @@ public class VelocityListener extends VPNExecutor { final String kickReason = AntiVPN.getInstance().getVpnConfig() .countryVanillaKickReason(); // Kicking our player - event.getPlayer().disconnect(LegacyComponentSerializer.builder().character('&') + event.setResult(ResultedEvent.ComponentResult.denied(LegacyComponentSerializer.builder() + .character('&') .build().deserialize(kickReason .replace("%player%", event.getPlayer().getUsername()) .replace("%country%", result.getCountryName()) - .replace("%code%", result.getCountryCode()))); + .replace("%code%", result.getCountryCode())))); + VelocityPlugin.INSTANCE.getServer().getScheduler() + .buildTask(VelocityPlugin.INSTANCE, () -> + event.getPlayer().disconnect(LegacyComponentSerializer.builder() + .character('&') + .build().deserialize(kickReason + .replace("%player%", event.getPlayer().getUsername()) + .replace("%country%", result.getCountryName()) + .replace("%code%", result.getCountryCode())))); } else { for (String cmd : AntiVPN.getInstance().getVpnConfig().countryKickCommands()) { final String formattedCommand = StringUtils @@ -102,9 +111,25 @@ public class VelocityListener extends VPNExecutor { } } else if (result.isProxy()) { if (AntiVPN.getInstance().getVpnConfig().kickPlayersOnDetect()) { + // Delay code execution + event.setResult(ResultedEvent.ComponentResult.denied(LegacyComponentSerializer.builder() + .character('&') + .build().deserialize(AntiVPN.getInstance().getVpnConfig() + .getKickString() + .replace("%player%", event.getPlayer().getUsername()) + .replace("%country%", result.getCountryName()) + .replace("%code%", result.getCountryCode())))); - event.getPlayer().disconnect(LegacyComponentSerializer.builder().character('&') - .build().deserialize("Bad boy bad boys what you gonna do when they come for you")); + VelocityPlugin.INSTANCE.getServer().getScheduler() + .buildTask(VelocityPlugin.INSTANCE, () -> + event.getPlayer().disconnect(LegacyComponentSerializer.builder() + .character('&') + .build().deserialize(AntiVPN.getInstance().getVpnConfig() + .getKickString() + .replace("%player%", event.getPlayer().getUsername()) + .replace("%country%", result.getCountryName()) + .replace("%code%", result.getCountryCode())))) + .delay(1, TimeUnit.SECONDS).schedule(); } VelocityPlugin.INSTANCE.getLogger().info(event.getPlayer().getUsername() + " joined on a VPN/Proxy (" + result.getMethod() + ")"); @@ -170,4 +195,9 @@ public class VelocityListener extends VPNExecutor { public void log(String log, Object... objects) { log(Level.INFO, String.format(log, objects)); } + + @Override + public void logException(String message, Exception ex) { + VelocityPlugin.INSTANCE.getLogger().log(Level.SEVERE, message, ex); + } }