3
3
import com .comphenix .protocol .PacketType ;
4
4
import com .comphenix .protocol .events .PacketAdapter ;
5
5
import com .comphenix .protocol .events .PacketEvent ;
6
+ import com .comphenix .protocol .wrappers .EnumWrappers ;
6
7
import com .comphenix .protocol .wrappers .PlayerInfoData ;
8
+ import com .google .common .collect .Lists ;
7
9
import org .bukkit .entity .EntityType ;
8
10
import org .bukkit .event .EventHandler ;
9
11
import org .bukkit .event .Listener ;
10
12
import org .bukkit .event .entity .EntitySpawnEvent ;
11
13
import org .bukkit .event .player .PlayerCommandPreprocessEvent ;
14
+ import org .bukkit .event .world .ChunkUnloadEvent ;
12
15
import org .bukkit .plugin .java .JavaPlugin ;
13
16
14
17
import java .util .HashSet ;
@@ -37,8 +40,7 @@ public void onPacketReceiving(PacketEvent ev) {
37
40
38
41
@ Override
39
42
public void onPacketSending (PacketEvent ev ) {
40
-
41
- // these are needed or a notchian client will not join
43
+ // these are needed or a notch-ian client will not join
42
44
if (ev .getPacketType () == PacketType .Play .Server .KEEP_ALIVE ) return ;
43
45
if (ev .getPacketType () == PacketType .Play .Server .LOGIN ) return ;
44
46
if (ev .getPacketType () == PacketType .Play .Server .POSITION ) return ;
@@ -53,13 +55,23 @@ public void onPacketSending(PacketEvent ev) {
53
55
// this keeps clients from showing server as lagging
54
56
if (ev .getPacketType () == PacketType .Play .Server .UPDATE_TIME ) return ;
55
57
56
- // if we dont send this, player has default skin lol
58
+ // if we don't send this, player has default skin lol
57
59
if (ev .getPacketType () == PacketType .Play .Server .PLAYER_INFO ) {
58
- for (List <PlayerInfoData > list : ev .getPacket ().getPlayerInfoDataLists ().getValues ()) {
59
- if (list == null ) continue ;
60
- list .removeIf (data -> data != null &&
61
- !data .getProfile ().getUUID ().equals (ev .getPlayer ().getUniqueId ()));
60
+ List <PlayerInfoData > newInfoData = Lists .newArrayList ();
61
+
62
+ // only show the player in the tab-list
63
+ for (PlayerInfoData infoData : ev .getPacket ().getPlayerInfoDataLists ().read (1 )) {
64
+ if (ev .getPlayer ().getUniqueId () != infoData .getProfileId ())
65
+ continue ;
66
+
67
+ newInfoData .add (new PlayerInfoData (
68
+ infoData .getProfile (),
69
+ infoData .getLatency (),
70
+ EnumWrappers .NativeGameMode .SPECTATOR ,
71
+ infoData .getDisplayName ()));
62
72
}
73
+
74
+ ev .getPacket ().getPlayerInfoDataLists ().write (1 , newInfoData );
63
75
return ;
64
76
}
65
77
@@ -77,4 +89,9 @@ public void onCommand(PlayerCommandPreprocessEvent ev) {
77
89
ev .setCancelled (true );
78
90
}
79
91
92
+ @ EventHandler
93
+ public void onChunkSave (ChunkUnloadEvent ev ) {
94
+ ev .setSaveChunk (false );
95
+ }
96
+
80
97
}
0 commit comments