From bea9a76895bbd72c6848c9e18e21fdd0a5e4ab63 Mon Sep 17 00:00:00 2001 From: Melledy <52122272+Melledy@users.noreply.github.com> Date: Fri, 29 Apr 2022 14:36:02 -0700 Subject: [PATCH] Optimize GetOnlinePlayerListRsp --- .../emu/grasscutter/game/player/Player.java | 2 +- .../send/PacketGetOnlinePlayerListRsp.java | 37 +++++-------------- 2 files changed, 11 insertions(+), 28 deletions(-) diff --git a/src/main/java/emu/grasscutter/game/player/Player.java b/src/main/java/emu/grasscutter/game/player/Player.java index f440fcb1b..0637e3d43 100644 --- a/src/main/java/emu/grasscutter/game/player/Player.java +++ b/src/main/java/emu/grasscutter/game/player/Player.java @@ -822,7 +822,7 @@ public class Player { .setProfilePicture(ProfilePicture.newBuilder().setAvatarId(this.getHeadImage())); if (this.getWorld() != null) { - onlineInfo.setCurPlayerNumInWorld(this.getWorld().getPlayers().indexOf(this) + 1); + onlineInfo.setCurPlayerNumInWorld(getWorld().getPlayerCount()); } else { onlineInfo.setCurPlayerNumInWorld(1); } diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketGetOnlinePlayerListRsp.java b/src/main/java/emu/grasscutter/server/packet/send/PacketGetOnlinePlayerListRsp.java index 85cf5429e..4ea8a02a5 100644 --- a/src/main/java/emu/grasscutter/server/packet/send/PacketGetOnlinePlayerListRsp.java +++ b/src/main/java/emu/grasscutter/server/packet/send/PacketGetOnlinePlayerListRsp.java @@ -18,36 +18,19 @@ import java.util.Objects; public class PacketGetOnlinePlayerListRsp extends BasePacket { public PacketGetOnlinePlayerListRsp(Player session){ super(PacketOpcodes.GetOnlinePlayerListRsp); - Map playersMap = Grasscutter.getGameServer().getPlayers(); + + List players = Grasscutter.getGameServer().getPlayers().values().stream().limit(50).toList(); + GetOnlinePlayerListRsp.Builder proto = GetOnlinePlayerListRsp.newBuilder(); - if(playersMap.size() != 0){ - List playerInfoList = new ArrayList<>(); - - for(Player player:playersMap.values()){ - ProfilePicture.Builder picture = ProfilePicture.newBuilder(); - OnlinePlayerInfo.Builder playerInfo = OnlinePlayerInfo.newBuilder(); - - if(player.getUid() == session.getUid())continue; - picture.setAvatarId(player.getProfile().getAvatarId()) - .build(); - System.out.println(player.getHeadImage()); - playerInfo.setUid(player.getUid()) - .setNickname(player.getNickname()) - .setPlayerLevel(player.getLevel()) - .setMpSettingType(MpSettingTypeOuterClass.MpSettingType.MP_SETTING_ENTER_AFTER_APPLY) - .setCurPlayerNumInWorld(player.getWorld().getPlayerCount()) - .setWorldLevel(player.getWorldLevel()) - .setNameCardId(player.getNameCardId()) - .setProfilePicture(picture); - if(!Objects.equals(player.getSignature(), "")){ - playerInfo.setSignature(player.getSignature()); - } - playerInfoList.add(playerInfo.build()); - } - for (OnlinePlayerInfo onlinePlayerInfo : playerInfoList) { - proto.addPlayerInfoList(onlinePlayerInfo).build(); + + if (players.size() != 0) { + for(Player player : players) { + if (player.getUid() == session.getUid()) continue; + + proto.addPlayerInfoList(player.getOnlinePlayerInfo()); } } + this.setData(proto); } }