@@ -5,21 +5,21 @@ Subject: [PATCH] Dont show spectator players in tablist
55
66
77diff --git a/net/minecraft/server/level/ServerPlayerGameMode.java b/net/minecraft/server/level/ServerPlayerGameMode.java
8- index f7a05fd098ef7b303254cd410414d50d68225395..3d34861ef5611bd304a30608c69341b998e91bd1 100644
8+ index be5da5a81246b4f4abe19f7c0cf68990d6bdf5bd..38661e8aa55a795cb3fdd4f08e3251ca8a309b2b 100644
99--- a/net/minecraft/server/level/ServerPlayerGameMode.java
1010+++ b/net/minecraft/server/level/ServerPlayerGameMode.java
1111@@ -75,10 +75,16 @@ public class ServerPlayerGameMode {
1212 // CraftBukkit end
1313 this.setGameModeForPlayer(gameModeForPlayer, this.gameModeForPlayer); // Paper - Fix MC-259571
1414 this.player.onUpdateAbilities();
15- - this.player
16- - .server
15+ - this.level
16+ - .getServer()
1717- .getPlayerList()
1818- .broadcastAll(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_GAME_MODE, this.player), this.player); // CraftBukkit
1919+ // Deepslate start - Don't send spectator mode packets to other players
2020+ if(de.pascalpex.deepslatemc.files.Config.getSendSpectatorModePackets() || gameModeForPlayer != GameType.SPECTATOR) {
21- + this.player
22- + .server
21+ + this.level
22+ + .getServer()
2323+ .getPlayerList()
2424+ .broadcastAll(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_GAME_MODE, this.player), this.player); // CraftBukkit
2525+ } else {
@@ -30,76 +30,76 @@ index f7a05fd098ef7b303254cd410414d50d68225395..3d34861ef5611bd304a30608c69341b9
3030 if (gameModeForPlayer == GameType.CREATIVE) {
3131 this.player.resetCurrentImpulseContext();
3232diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
33- index 4b43231c9ca77129606bf99c066e5f3beda29d8f..7d4aeb1c0baec05ba17c53ce9a1a0e0b580418c7 100644
33+ index 4c42f4cb5e5ea21b28824467fae54255ffa868c9..a2757f5458243ce608a1c982bde5e5eb738d00f2 100644
3434--- a/net/minecraft/server/players/PlayerList.java
3535+++ b/net/minecraft/server/players/PlayerList.java
36- @@ -490 ,6 +490 ,25 @@ public abstract class PlayerList {
37- // CraftBukkit start - sendAll above replaced with this loop
38- ClientboundPlayerInfoUpdatePacket packet = ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(player)); // Paper - Add Listing API for Player
36+ @@ -491 ,6 +491 ,25 @@ public abstract class PlayerList {
37+ // CraftBukkit start - sendAll above replaced with this loop
38+ ClientboundPlayerInfoUpdatePacket packet = ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(player)); // Paper - Add Listing API for Player
3939
40- + // Deepslate start - Don't send spectator mode packets to other players
41- + ClientboundPlayerInfoUpdatePacket modifiedPacket = null;
42- + if (!de.pascalpex.deepslatemc.files.Config.getSendSpectatorModePackets()) {
43- + ClientboundPlayerInfoUpdatePacket.Entry entry = packet.entries().getFirst();
44- + ClientboundPlayerInfoUpdatePacket.Entry entryWithoutSpectator = new ClientboundPlayerInfoUpdatePacket.Entry(
45- + entry.profileId(),
46- + entry.profile(),
47- + entry.listed(),
48- + entry.latency(),
49- + entry.gameMode() == net.minecraft.world.level.GameType.SPECTATOR ? net.minecraft.world.level.GameType.SURVIVAL : entry.gameMode(),
50- + entry.displayName(),
51- + entry.showHat(),
52- + entry.listOrder(),
53- + entry.chatSession());
54- +
55- + modifiedPacket = new ClientboundPlayerInfoUpdatePacket(packet.actions(), List.of(entryWithoutSpectator));
56- + }
57- + // Deepslate end - Don't send spectator mode packets to other players
58- +
59- final List<ServerPlayer> onlinePlayers = Lists.newArrayListWithExpectedSize(this.players.size() - 1); // Paper - Use single player info update packet on join
60- for (int i = 0; i < this.players.size(); ++i) {
61- ServerPlayer entityplayer1 = (ServerPlayer) this.players.get(i);
62- @@ -498,7 +517,13 @@ public abstract class PlayerList {
63- // Paper start - Add Listing API for Player
64- if (entityplayer1.getBukkitEntity().isListed(bukkitPlayer)) {
65- // Paper end - Add Listing API for Player
66- - entityplayer1.connection.send(packet);
67- + // Deepslate start - Don't send spectator mode packets to other players
68- + if (de.pascalpex.deepslatemc.files.Config.getSendSpectatorModePackets() || entityplayer1 == player) {
69- + entityplayer1.connection.send(packet);
70- + } else {
71- + entityplayer1.connection.send(modifiedPacket);
72- + }
73- + // Deepslate end - Don't send spectator mode packets to other players
74- // Paper start - Add Listing API for Player
75- } else {
76- entityplayer1.connection.send(ClientboundPlayerInfoUpdatePacket.createSinglePlayerInitializing(player, false));
77- @@ -520,7 +545,27 @@ public abstract class PlayerList {
78- }
79- // Paper start - Use single player info update packet on join
80- if (!onlinePlayers.isEmpty()) {
81- - player.connection.send(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(onlinePlayers, player)); // Paper - Add Listing API for Player
8240+ // Deepslate start - Don't send spectator mode packets to other players
83- + ClientboundPlayerInfoUpdatePacket updatePacket = ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(onlinePlayers, player) ;
41+ + ClientboundPlayerInfoUpdatePacket modifiedPacket = null ;
8442+ if (!de.pascalpex.deepslatemc.files.Config.getSendSpectatorModePackets()) {
85- + List<ClientboundPlayerInfoUpdatePacket.Entry> newEntries = new java.util.ArrayList<>();
86- + for (ClientboundPlayerInfoUpdatePacket.Entry entry : updatePacket.entries()) {
87- + ClientboundPlayerInfoUpdatePacket.Entry newEntry = new ClientboundPlayerInfoUpdatePacket.Entry(
88- + entry.profileId(),
89- + entry.profile(),
90- + entry.listed(),
91- + entry.latency(),
92- + entry.gameMode() == net.minecraft.world.level.GameType.SPECTATOR ? net.minecraft.world.level.GameType.SURVIVAL : entry.gameMode(),
93- + entry.displayName(),
94- + entry.showHat(),
95- + entry.listOrder(),
96- + entry.chatSession());
97- + newEntries.add(newEntry);
98- + }
99- + updatePacket = new ClientboundPlayerInfoUpdatePacket(updatePacket.actions(), newEntries);
43+ + ClientboundPlayerInfoUpdatePacket.Entry entry = packet.entries().getFirst();
44+ + ClientboundPlayerInfoUpdatePacket.Entry entryWithoutSpectator = new ClientboundPlayerInfoUpdatePacket.Entry(
45+ + entry.profileId(),
46+ + entry.profile(),
47+ + entry.listed(),
48+ + entry.latency(),
49+ + entry.gameMode() == net.minecraft.world.level.GameType.SPECTATOR ? net.minecraft.world.level.GameType.SURVIVAL : entry.gameMode(),
50+ + entry.displayName(),
51+ + entry.showHat(),
52+ + entry.listOrder(),
53+ + entry.chatSession());
54+ +
55+ + modifiedPacket = new ClientboundPlayerInfoUpdatePacket(packet.actions(), List.of(entryWithoutSpectator));
10056+ }
101- + player.connection.send(updatePacket); // Paper - Add Listing API for Player
10257+ // Deepslate end - Don't send spectator mode packets to other players
103- }
104- // Paper end - Use single player info update packet on join
105- player.sentListPacket = true;
58+ +
59+ final List<ServerPlayer> onlinePlayers = Lists.newArrayListWithExpectedSize(this.players.size() - 1); // Paper - Use single player info update packet on join
60+ for (int i = 0; i < this.players.size(); ++i) {
61+ ServerPlayer entityplayer1 = (ServerPlayer) this.players.get(i);
62+ @@ -499,7 +518,13 @@ public abstract class PlayerList {
63+ // Paper start - Add Listing API for Player
64+ if (entityplayer1.getBukkitEntity().isListed(bukkitPlayer)) {
65+ // Paper end - Add Listing API for Player
66+ - entityplayer1.connection.send(packet);
67+ + // Deepslate start - Don't send spectator mode packets to other players
68+ + if (de.pascalpex.deepslatemc.files.Config.getSendSpectatorModePackets() || entityplayer1 == player) {
69+ + entityplayer1.connection.send(packet);
70+ + } else {
71+ + entityplayer1.connection.send(modifiedPacket);
72+ + }
73+ + // Deepslate end - Don't send spectator mode packets to other players
74+ // Paper start - Add Listing API for Player
75+ } else {
76+ entityplayer1.connection.send(ClientboundPlayerInfoUpdatePacket.createSinglePlayerInitializing(player, false));
77+ @@ -521,7 +546,27 @@ public abstract class PlayerList {
78+ }
79+ // Paper start - Use single player info update packet on join
80+ if (!onlinePlayers.isEmpty()) {
81+ - player.connection.send(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(onlinePlayers, player)); // Paper - Add Listing API for Player
82+ + // Deepslate start - Don't send spectator mode packets to other players
83+ + ClientboundPlayerInfoUpdatePacket updatePacket = ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(onlinePlayers, player);
84+ + if (!de.pascalpex.deepslatemc.files.Config.getSendSpectatorModePackets()) {
85+ + List<ClientboundPlayerInfoUpdatePacket.Entry> newEntries = new java.util.ArrayList<>();
86+ + for (ClientboundPlayerInfoUpdatePacket.Entry entry : updatePacket.entries()) {
87+ + ClientboundPlayerInfoUpdatePacket.Entry newEntry = new ClientboundPlayerInfoUpdatePacket.Entry(
88+ + entry.profileId(),
89+ + entry.profile(),
90+ + entry.listed(),
91+ + entry.latency(),
92+ + entry.gameMode() == net.minecraft.world.level.GameType.SPECTATOR ? net.minecraft.world.level.GameType.SURVIVAL : entry.gameMode(),
93+ + entry.displayName(),
94+ + entry.showHat(),
95+ + entry.listOrder(),
96+ + entry.chatSession());
97+ + newEntries.add(newEntry);
98+ + }
99+ + updatePacket = new ClientboundPlayerInfoUpdatePacket(updatePacket.actions(), newEntries);
100+ + }
101+ + player.connection.send(updatePacket); // Paper - Add Listing API for Player
102+ + // Deepslate end - Don't send spectator mode packets to other players
103+ }
104+ // Paper end - Use single player info update packet on join
105+ player.sentListPacket = true;
0 commit comments