fix: accidentally removed vanish enable detector

This commit is contained in:
ChomeNS
2025-04-02 09:34:14 +07:00
parent 1d7190dd44
commit b8bea93754
2 changed files with 22 additions and 6 deletions

View File

@@ -1 +1 @@
2341
2343

View File

@@ -15,10 +15,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode;
import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundPlayerInfoRemovePacket;
import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundPlayerInfoUpdatePacket;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.UUID;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
@@ -29,6 +26,8 @@ public class PlayersPlugin extends Bot.Listener implements TickPlugin.Listener {
private final List<Listener> listeners = new ArrayList<>();
private final List<PlayerEntry> pendingLeftPlayers = Collections.synchronizedList(new ArrayList<>());
public PlayersPlugin (Bot bot) {
this.bot = bot;
@@ -256,6 +255,13 @@ public class PlayersPlugin extends Bot.Listener implements TickPlugin.Listener {
}
private void check (PlayerEntry target) {
final PlayerEntry pending = pendingLeftPlayers.stream()
.filter(player -> player.equals(target))
.findAny()
.orElse(null);
if (pending != null) pendingLeftPlayers.remove(pending);
final CompletableFuture<String> future = getLastKnownName(target.profile.getIdAsString());
future.thenApply(lastKnownName -> {
@@ -296,6 +302,13 @@ public class PlayersPlugin extends Bot.Listener implements TickPlugin.Listener {
list.remove(target);
for (Listener listener : listeners) listener.playerChangedUsername(newTarget);
} else if (pending != null) {
// we already passed all the left and username check,
// so the only one left is vanish
target.listed = false;
for (Listener listener : listeners) listener.playerVanished(target);
}
return null;
@@ -303,8 +316,9 @@ public class PlayersPlugin extends Bot.Listener implements TickPlugin.Listener {
}
private void onLastKnownNameTick () {
// hasNamespaces also means vanilla/non-bukkit
if (!bot.loggedIn || !bot.core.ready || !bot.serverFeatures.hasNamespaces)
return; // hasNamespaces also means vanilla/non-bukkit
return;
for (PlayerEntry target : new ArrayList<>(list)) {
check(target);
@@ -323,6 +337,8 @@ public class PlayersPlugin extends Bot.Listener implements TickPlugin.Listener {
for (Listener listener : listeners) listener.playerLeft(target);
}
} else {
pendingLeftPlayers.add(target);
check(target);
}
}