11package org .mcsg .double0negative .tabapi ;
22
3+ import com .comphenix .protocol .PacketType ;
4+ import com .comphenix .protocol .ProtocolLibrary ;
5+ import com .comphenix .protocol .ProtocolManager ;
6+ import com .comphenix .protocol .events .ListenerPriority ;
7+ import com .comphenix .protocol .events .PacketAdapter ;
8+ import com .comphenix .protocol .events .PacketContainer ;
9+ import com .comphenix .protocol .events .PacketEvent ;
10+ import com .comphenix .protocol .wrappers .WrappedGameProfile ;
11+ import com .google .common .base .Charsets ;
312import java .io .IOException ;
413import java .lang .reflect .InvocationTargetException ;
514import java .util .ArrayList ;
1322import org .bukkit .configuration .file .FileConfiguration ;
1423import org .bukkit .entity .Player ;
1524import org .bukkit .event .EventHandler ;
16- import org .bukkit .event .EventPriority ;
1725import org .bukkit .event .Listener ;
1826import org .bukkit .event .player .PlayerQuitEvent ;
1927import org .bukkit .plugin .Plugin ;
2028import org .bukkit .plugin .PluginDescriptionFile ;
2129import org .bukkit .plugin .java .JavaPlugin ;
22- import com .comphenix .protocol .Packets ;
23- import com .comphenix .protocol .ProtocolLibrary ;
24- import com .comphenix .protocol .ProtocolManager ;
25- import com .comphenix .protocol .events .ConnectionSide ;
26- import com .comphenix .protocol .events .ListenerPriority ;
27- import com .comphenix .protocol .events .PacketAdapter ;
28- import com .comphenix .protocol .events .PacketContainer ;
29- import com .comphenix .protocol .events .PacketEvent ;
3030
3131/**
3232 * TabAPI
@@ -89,26 +89,37 @@ public void onEnable()
8989 resetTabList (p );
9090 setPriority (plugin , p , -2 );
9191 }
92- protocolManager .addPacketListener (new PacketAdapter (this ,
93- ConnectionSide .SERVER_SIDE , ListenerPriority .NORMAL , Packets .Server .PLAYER_INFO ) {
92+ protocolManager .addPacketListener (new PacketAdapter (
93+ this ,
94+ ListenerPriority .NORMAL ,
95+ PacketType .Play .Server .PLAYER_INFO ) {
9496 @ Override
9597 public void onPacketSending (PacketEvent event )
9698 {
97- switch (event .getPacketID ())
99+ PacketContainer p = event .getPacket ();
100+ if (protocolManager .getProtocolVersion (event .getPlayer ()) >= 47 )
98101 {
99- case Packets .Server .PLAYER_INFO :
100- PacketContainer p = event .getPacket ();
101- String s = p .getStrings ().read (0 );
102- if (s .startsWith ("$" ))
103- { // this is a packet sent by TabAPI **Work around until I figure out how to make my own
104- p .getStrings ().write (0 , s .substring (1 )); // packets bypass this block**
105- event .setPacket (p );
106- }
107- else
108- {
109- event .setCancelled (true );
110- }
111- break ;
102+ // 1.8 >
103+ String s = p .getStrings ().read (0 );
104+ if (s .startsWith ("$" ))
105+ {
106+ event .setCancelled (true );
107+ }
108+ event .setPacket (p );
109+ }
110+ else
111+ {
112+ // 1.7.10 <
113+ String s = p .getStrings ().read (0 );
114+ if (s .startsWith ("$" ))
115+ {
116+ p .getStrings ().write (0 , s .substring (1 ));
117+ event .setPacket (p );
118+ }
119+ else
120+ {
121+ event .setCancelled (true );
122+ }
112123 }
113124 }
114125 });
@@ -149,6 +160,38 @@ public boolean onCommand(CommandSender sender, Command cmd1, String commandLabel
149160 else
150161 {
151162 player .sendMessage (ChatColor .DARK_RED + "" + ChatColor .BOLD + "TabAPI - Double0negative" + ChatColor .RESET + ChatColor .RED + " Version: " + pdfFile .getVersion ());
163+ int iii = 0 ;
164+ for (int i = 0 ; i <= 19 ; i ++)
165+ {
166+ PacketContainer message = protocolManager .createPacket (PacketType .Play .Server .PLAYER_INFO );
167+ String msg = "-" + iii ;
168+ String nameToShow = ((!shuttingdown ) ? "$" : "" ) + msg ;
169+ boolean b = true ;
170+ int ping = 0 ;
171+ int action ;
172+ if (b )
173+ {
174+ action = 0 ;
175+ }
176+ else
177+ {
178+ action = 4 ;
179+ }
180+ message .getIntegers ().write (0 , action ); // int - ACTION
181+ message .getGameProfiles ().write (0 , new WrappedGameProfile (java .util .UUID .nameUUIDFromBytes (("OfflinePlayer:" + nameToShow ).getBytes (Charsets .UTF_8 )), nameToShow ));
182+ message .getIntegers ().write (1 , 0 ); // int - GAMEMODE
183+ message .getIntegers ().write (2 , ping ); // int - PING
184+ message .getStrings ().write (0 , nameToShow ); // string - DISPLAYNAME
185+ try
186+ {
187+ protocolManager .sendServerPacket (player , message );
188+ }
189+ catch (InvocationTargetException e )
190+ {
191+ throw new RuntimeException ("Cannot send packet " + message , e );
192+ }
193+ iii ++;
194+ }
152195 }
153196 }
154197 else
@@ -161,10 +204,36 @@ public boolean onCommand(CommandSender sender, Command cmd1, String commandLabel
161204
162205 private static void addPacket (Player p , String msg , boolean b , int ping )
163206 {
164- PacketContainer message = protocolManager .createPacket (Packets .Server .PLAYER_INFO );
165- message .getStrings ().write (0 , ((!shuttingdown ) ? "$" : "" ) + msg );
166- message .getBooleans ().write (0 , b );
167- message .getIntegers ().write (0 , ping );
207+ PacketContainer message = protocolManager .createPacket (PacketType .Play .Server .PLAYER_INFO );
208+ String nameToShow = ((!shuttingdown ) ? "$" : "" ) + msg ;
209+ // 1.8 >
210+ /*
211+ getIntegers = 3
212+ getStrings = 1
213+ getModifier = 5
214+ [
215+ int
216+ class net.minecraft.util.com.mojang.authlib.GameProfile
217+ int
218+ int
219+ class java.lang.String
220+ ]
221+ */
222+ int action ;
223+ if (b )
224+ {
225+ action = 0 ;
226+ }
227+ else
228+ {
229+ action = 4 ;
230+ }
231+ message .getIntegers ().write (0 , action ); // int - ACTION
232+ message .getGameProfiles ().write (0 , new WrappedGameProfile (java .util .UUID .nameUUIDFromBytes (("OfflinePlayer:" + nameToShow ).getBytes (Charsets .UTF_8 )), nameToShow ));
233+ message .getIntegers ().write (1 , 0 ); // int - GAMEMODE
234+ message .getIntegers ().write (2 , ping ); // int - PING
235+ message .getStrings ().write (0 , nameToShow ); // string - DISPLAYNAME
236+ //
168237 ArrayList <PacketContainer > packetList = cachedPackets .get (p );
169238 if (packetList == null )
170239 {
@@ -240,6 +309,9 @@ private static TabObject getTab(Player p)
240309 * -2 = no longer active, remove -1 = background, only show if nothing else is there 0 = normal 1 = high priority 2
241310 * = always show, only use if MUST show
242311 *
312+ * @param plugin
313+ * @param player
314+ * @param pri
243315 */
244316 public static void setPriority (Plugin plugin , Player player , int pri )
245317 {
@@ -305,9 +377,9 @@ public static void setTabString(Plugin plugin, Player p, int x, int y, String ms
305377 tabo .setTab (plugin , x , y , msg , ping );
306378 playerTab .put (p .getName (), tabo );
307379 }
308- catch (Exception e )
380+ catch (Exception ex )
309381 {
310- e .printStackTrace ();
382+ ex .printStackTrace ();
311383 }
312384 }
313385
@@ -405,7 +477,7 @@ public static String nextNull()
405477 return s ;
406478 }
407479
408- @ EventHandler ( priority = EventPriority . HIGHEST )
480+ @ EventHandler
409481 public void PlayerLeave (PlayerQuitEvent e )
410482 {
411483 //cleanup
0 commit comments