fix: afk state isn't revoked after disconnection

This commit is contained in:
iceBear67 committed 2024-07-15 14:27:55 +08:00
1 parent ccef3e374c
commit f0deb01f5f
1 file changed
+22 -4
@@ -25,6 +25,16 @@ public class AFKModule extends ServerModule {
public void onInitialize() { public void onInitialize() {
SFCallbacks.PLAYER_IDLE.register(this::onAFK); SFCallbacks.PLAYER_IDLE.register(this::onAFK);
ServerPlayConnectionEvents.JOIN.register(this::onJoin); ServerPlayConnectionEvents.JOIN.register(this::onJoin);
ServerPlayConnectionEvents.DISCONNECT.register(this::onDisconnect);
}
private void onDisconnect(ServerPlayNetworkHandler serverPlayNetworkHandler, MinecraftServer server) {
if (team != null) {
var name = serverPlayNetworkHandler.getPlayer().getName().getLiteralString();
team.getPlayerList().remove(name);
server.getPlayerManager().sendToAll(TeamS2CPacket.updateTeam(team, true));
server.getPlayerManager().sendToAll(TeamS2CPacket.changePlayerTeam(team, name, TeamS2CPacket.Operation.REMOVE));
}
} }
@Override @Override
@@ -36,16 +46,25 @@ public class AFKModule extends ServerModule {
} }
private void onAFK(ServerPlayerEntity player, boolean afk) { private void onAFK(ServerPlayerEntity player, boolean afk) {
String playerName = player.getName().getLiteralString();
Objects.requireNonNull(playerName);
if (afk) { if (afk) {
enAFK(player);
} else {
deAFK(player);
}
}
private void enAFK(ServerPlayerEntity player) {
String playerName = player.getName().getLiteralString();
team.getPlayerList().add(playerName); team.getPlayerList().add(playerName);
player.server.getPlayerManager().sendToAll(TeamS2CPacket.updateTeam(team, true)); player.server.getPlayerManager().sendToAll(TeamS2CPacket.updateTeam(team, true));
player.server.getPlayerManager().broadcast( player.server.getPlayerManager().broadcast(
Text.literal(" * " + playerName + " 正在挂机.").withColor(Colors.LIGHT_GRAY), Text.literal(" * " + playerName + " 正在挂机.").withColor(Colors.LIGHT_GRAY),
false false
); );
} else { }
public void deAFK(ServerPlayerEntity player) {
String playerName = player.getName().getLiteralString();
team.getPlayerList().remove(playerName); team.getPlayerList().remove(playerName);
player.server.getPlayerManager().sendToAll(TeamS2CPacket.updateTeam(team, true)); player.server.getPlayerManager().sendToAll(TeamS2CPacket.updateTeam(team, true));
player.server.getPlayerManager().sendToAll(TeamS2CPacket.changePlayerTeam(team, playerName, TeamS2CPacket.Operation.REMOVE)); player.server.getPlayerManager().sendToAll(TeamS2CPacket.changePlayerTeam(team, playerName, TeamS2CPacket.Operation.REMOVE));
@@ -54,7 +73,6 @@ public class AFKModule extends ServerModule {
false false
); );
} }
}
private void onJoin(ServerPlayNetworkHandler serverPlayNetworkHandler, PacketSender packetSender, MinecraftServer minecraftServer) { private void onJoin(ServerPlayNetworkHandler serverPlayNetworkHandler, PacketSender packetSender, MinecraftServer minecraftServer) {
if (team != null) { if (team != null) {