From 5b6d214e6fe50dc04861449cdc353311abec1b08 Mon Sep 17 00:00:00 2001 From: dawson Date: Sat, 30 Dec 2023 14:06:44 -0500 Subject: [PATCH] Patches bug on Bukkit/Spigot servers may result in some players not being kicked on VPN detection. I believe this occurs when the API response is below 50ms, and we attempt to Player#kickPlayer() or run commands on console that attempt to kick the player. The problem is that if this is running before the tick PlayerLoginEvent runs on ends, the player wouldn't be considered "online". Therefore, the player would never be removed from the server even if desired. I assumed wrongly that the async processing of the query would always end up on the next tick. So now I update the PlayerLoginEvent result to KICK_BANNED no matter if the processing is async or in the same thread stack as the event. --- Assembly/pom.xml | 2 +- Bukkit/pom.xml | 10 +++---- .../antivpn/bukkit/BukkitListener.java | 28 +++++++++++++++++-- Bungee/pom.xml | 4 +-- Common/pom.xml | 2 +- .../antivpn/depends/LibraryLoader.java | 1 - Sponge/pom.xml | 4 +-- Velocity/pom.xml | 4 +-- pom.xml | 6 +++- 9 files changed, 44 insertions(+), 17 deletions(-) diff --git a/Assembly/pom.xml b/Assembly/pom.xml index 97be620..12a478a 100644 --- a/Assembly/pom.xml +++ b/Assembly/pom.xml @@ -5,7 +5,7 @@ AntiVPN dev.brighten.antivpn - 1.9.2 + 1.9.3-DEV 4.0.0 diff --git a/Bukkit/pom.xml b/Bukkit/pom.xml index 87ddad2..2eb649b 100644 --- a/Bukkit/pom.xml +++ b/Bukkit/pom.xml @@ -5,7 +5,7 @@ AntiVPN dev.brighten.antivpn - 1.9.2 + 1.9.3-DEV 4.0.0 @@ -70,15 +70,15 @@ - org.github.spigot - 1.13.2 - 1.13.2 + org.spigotmc + spigot-api + 1.20.2-R0.1-SNAPSHOT provided dev.brighten.antivpn Common - 1.9.2 + 1.9.3-DEV provided 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 343b649..02951e2 100644 --- a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitListener.java +++ b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitListener.java @@ -123,10 +123,22 @@ public class BukkitListener extends VPNExecutor implements Listener { && AntiVPN.getInstance().getVpnConfig().countryList() .contains(result.getCountryCode()) != AntiVPN.getInstance().getVpnConfig().whitelistCountries()) { + final String kickReason = AntiVPN.getInstance().getVpnConfig() + .countryVanillaKickReason(); + + // Start "online" fix + // In case the response was so fast from API the player wouldn't be "online". + event.setResult(PlayerLoginEvent.Result.KICK_BANNED); + event.setKickMessage(ChatColor + .translateAlternateColorCodes('&', + kickReason + .replace("%player%", event.getPlayer().getName()) + .replace("%country%", result.getCountryName()) + .replace("%code%", result.getCountryCode()))); + // End "online" fix + //Using our built in kicking system if no commands are configured if(AntiVPN.getInstance().getVpnConfig().countryKickCommands().isEmpty()) { - final String kickReason = AntiVPN.getInstance().getVpnConfig() - .countryVanillaKickReason(); // Kicking our player event.getPlayer().kickPlayer(ChatColor .translateAlternateColorCodes('&', @@ -146,6 +158,18 @@ public class BukkitListener extends VPNExecutor implements Listener { } } } else if(result.isProxy()) { + + // Start "online" fix + // In case the response was so fast from API the player wouldn't be "online". + event.setResult(PlayerLoginEvent.Result.KICK_BANNED); + event.setKickMessage(ChatColor + .translateAlternateColorCodes('&', + AntiVPN.getInstance().getVpnConfig().getKickString() + .replace("%player%", event.getPlayer().getName()) + .replace("%country%", result.getCountryName()) + .replace("%code%", result.getCountryCode()))); + // End "online" fix + if(AntiVPN.getInstance().getVpnConfig().kickPlayersOnDetect()) player.kickPlayer(org.bukkit.ChatColor.translateAlternateColorCodes('&', AntiVPN.getInstance().getVpnConfig().getKickString())); diff --git a/Bungee/pom.xml b/Bungee/pom.xml index fb5f8bc..93d0fea 100644 --- a/Bungee/pom.xml +++ b/Bungee/pom.xml @@ -5,7 +5,7 @@ AntiVPN dev.brighten.antivpn - 1.9.2 + 1.9.3-DEV 4.0.0 @@ -71,7 +71,7 @@ dev.brighten.antivpn Common - 1.9.2 + 1.9.3-DEV provided diff --git a/Common/pom.xml b/Common/pom.xml index 2040fe8..ed83b14 100644 --- a/Common/pom.xml +++ b/Common/pom.xml @@ -5,7 +5,7 @@ AntiVPN dev.brighten.antivpn - 1.9.2 + 1.9.3-DEV 4.0.0 diff --git a/Common/src/main/java/dev/brighten/antivpn/depends/LibraryLoader.java b/Common/src/main/java/dev/brighten/antivpn/depends/LibraryLoader.java index 23c92e4..5ee3961 100644 --- a/Common/src/main/java/dev/brighten/antivpn/depends/LibraryLoader.java +++ b/Common/src/main/java/dev/brighten/antivpn/depends/LibraryLoader.java @@ -45,7 +45,6 @@ import java.util.Objects; @NonnullByDefault public final class LibraryLoader { - @SuppressWarnings("Guava") private static final Supplier URL_INJECTOR = Suppliers.memoize(() -> URLClassLoaderAccess.create((URLClassLoader) AntiVPN.getInstance().getClass().getClassLoader())); /** diff --git a/Sponge/pom.xml b/Sponge/pom.xml index 4a784e5..e8be5b9 100644 --- a/Sponge/pom.xml +++ b/Sponge/pom.xml @@ -5,7 +5,7 @@ AntiVPN dev.brighten.antivpn - 1.9.2 + 1.9.3-DEV 4.0.0 @@ -28,7 +28,7 @@ dev.brighten.antivpn Common - 1.9.2 + 1.9.3-DEV provided diff --git a/Velocity/pom.xml b/Velocity/pom.xml index 940b04e..e74bc6d 100644 --- a/Velocity/pom.xml +++ b/Velocity/pom.xml @@ -5,7 +5,7 @@ AntiVPN dev.brighten.antivpn - 1.9.2 + 1.9.3-DEV 4.0.0 @@ -33,7 +33,7 @@ dev.brighten.antivpn Common - 1.9.2 + 1.9.3-DEV provided diff --git a/pom.xml b/pom.xml index 767cdde..7a1108d 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ dev.brighten.antivpn AntiVPN pom - 1.9.2 + 1.9.3-DEV Common @@ -53,6 +53,10 @@ + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + funkemunky-releases https://nexus.funkemunky.cc/content/repositories/releases/