diff --git a/build.gradle.kts b/build.gradle.kts index 04f9480..881f63d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -10,7 +10,7 @@ plugins { } group = "com.beanbeanjuice" -version = "0.5.0" +version = "0.5.1" java { sourceCompatibility = JavaVersion.VERSION_17 diff --git a/src/main/java/com/beanbeanjuice/simpleproxychat/utility/listeners/bungee/BungeeServerListener.java b/src/main/java/com/beanbeanjuice/simpleproxychat/utility/listeners/bungee/BungeeServerListener.java index 4b133de..d3337ff 100644 --- a/src/main/java/com/beanbeanjuice/simpleproxychat/utility/listeners/bungee/BungeeServerListener.java +++ b/src/main/java/com/beanbeanjuice/simpleproxychat/utility/listeners/bungee/BungeeServerListener.java @@ -18,6 +18,7 @@ import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.event.EventHandler; import net.md_5.bungee.event.EventPriority; +import org.jetbrains.annotations.Nullable; import java.util.concurrent.TimeUnit; @@ -75,11 +76,15 @@ public void onPlayerLeaveServer(ServerDisconnectEvent event) { */ @EventHandler public void onPlayerKick(ServerKickEvent event) { + if (event.getState() == ServerKickEvent.State.CONNECTING) return; + if (!event.getPlayer().getGroups().contains("successful-connection")) return; previousServerHandler.put(event.getPlayer().getName(), event.getKickedFrom()); } @EventHandler public void onPlayerLeaveProxy(PlayerDisconnectEvent event) { + if (!event.getPlayer().getGroups().contains("successful-connection")) return; + if (!event.getPlayer().getGroups().contains("not-first-join")) return; if (plugin.getConfig().getAsBoolean(ConfigDataKey.VANISH_ENABLED) && BungeeVanishAPI.isInvisible(event.getPlayer())) return; // Ignore if invisible. leave(event.getPlayer(), false); @@ -113,9 +118,15 @@ public void onPreLogin(PreLoginEvent event) { event.setReason(Helper.convertToBungee("You are banned from the proxy.")[0]); } + @EventHandler + public void onPostLogin(PostLoginEvent event) { + event.getPlayer().addGroups("successful-connection"); + } + @EventHandler public void onPlayerJoinProxy(ServerConnectedEvent event) { if (event.getPlayer().getGroups().contains("not-first-join")) return; // If not first join, don't do anything. + if (!event.getPlayer().getGroups().contains("successful-connection")) return; event.getPlayer().addGroups("not-first-join"); if (plugin.getConfig().getAsBoolean(ConfigDataKey.VANISH_ENABLED) && BungeeVanishAPI.isInvisible(event.getPlayer())) return; // Ignore if invisible. @@ -123,7 +134,7 @@ public void onPlayerJoinProxy(ServerConnectedEvent event) { join(event.getPlayer(), event.getServer(), false); } - public void join(ProxiedPlayer player, Server server, boolean isFake) { + public void join(ProxiedPlayer player, @Nullable Server server, boolean isFake) { // Bungee is "dumb" and needs to be delayed... try { plugin.getProxy().getScheduler().schedule( diff --git a/src/main/java/com/beanbeanjuice/simpleproxychat/utility/listeners/velocity/VelocityServerListener.java b/src/main/java/com/beanbeanjuice/simpleproxychat/utility/listeners/velocity/VelocityServerListener.java index 07ba137..3e08229 100644 --- a/src/main/java/com/beanbeanjuice/simpleproxychat/utility/listeners/velocity/VelocityServerListener.java +++ b/src/main/java/com/beanbeanjuice/simpleproxychat/utility/listeners/velocity/VelocityServerListener.java @@ -12,9 +12,9 @@ import com.velocitypowered.api.event.Subscribe; import com.velocitypowered.api.event.connection.DisconnectEvent; import com.velocitypowered.api.event.connection.PreLoginEvent; +import com.velocitypowered.api.event.player.KickedFromServerEvent; import com.velocitypowered.api.event.player.PlayerChatEvent; import com.velocitypowered.api.event.player.ServerConnectedEvent; -import com.velocitypowered.api.event.player.ServerPreConnectEvent; import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.server.RegisteredServer; import de.myzelyam.api.vanish.VelocityVanishAPI; @@ -72,10 +72,23 @@ public void onDisconnect(DisconnectEvent event) { leave(event.getPlayer()); } + @Subscribe + public void kickedFromServerEvent(KickedFromServerEvent event) { + KickedFromServerEvent.ServerKickResult result = event.getResult(); + if (result.toString().contains("velocity.error.cant-connect")) return; + if (event.getServerKickReason().isEmpty()) return; + if (plugin.getConfig().getAsBoolean(ConfigDataKey.VANISH_ENABLED) && VelocityVanishAPI.isInvisible(event.getPlayer())) return; // Ignore if invisible. + + leave(event.getPlayer(), event.getServer().getServerInfo().getName()); + } + protected void leave(Player player) { - String serverName = "no-server"; - if (player.getCurrentServer().isPresent()) - serverName = player.getCurrentServer().get().getServerInfo().getName(); + if (player.getCurrentServer().isEmpty()) return; + + leave(player, player.getCurrentServer().get().getServerInfo().getName()); + } + + protected void leave(Player player, String serverName) { chatHandler.runProxyLeaveMessage(player.getUsername(), player.getUniqueId(), serverName, this::sendToAllServers); }