Skip to content

Commit

Permalink
Fixed Multiple Disconnect Message Issue
Browse files Browse the repository at this point in the history
  • Loading branch information
beanbeanjuice committed Jun 9, 2024
1 parent 6819ae1 commit 5372698
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 6 deletions.
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ plugins {
}

group = "com.beanbeanjuice"
version = "0.5.0"
version = "0.5.1"

java {
sourceCompatibility = JavaVersion.VERSION_17
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -113,17 +118,23 @@ 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.

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(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}

Expand Down

0 comments on commit 5372698

Please sign in to comment.