Skip to content

Commit e75e7f7

Browse files
committed
Spigot 1649 - Compatible
1 parent 92d412c commit e75e7f7

2 files changed

Lines changed: 110 additions & 32 deletions

File tree

TabAPI/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,12 @@
9696
<artifactId>ProtocolLib-Spigot</artifactId>
9797
<version>3.6.0-SNAPSHOT</version>
9898
</dependency>
99+
<dependency>
100+
<groupId>org.bukkit</groupId>
101+
<artifactId>minecraft-server</artifactId>
102+
<version>1.7.10</version>
103+
<type>jar</type>
104+
</dependency>
99105
</dependencies>
100106
</project>
101107

TabAPI/src/main/java/org/mcsg/double0negative/tabapi/TabAPI.java

Lines changed: 104 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
package 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;
312
import java.io.IOException;
413
import java.lang.reflect.InvocationTargetException;
514
import java.util.ArrayList;
@@ -13,20 +22,11 @@
1322
import org.bukkit.configuration.file.FileConfiguration;
1423
import org.bukkit.entity.Player;
1524
import org.bukkit.event.EventHandler;
16-
import org.bukkit.event.EventPriority;
1725
import org.bukkit.event.Listener;
1826
import org.bukkit.event.player.PlayerQuitEvent;
1927
import org.bukkit.plugin.Plugin;
2028
import org.bukkit.plugin.PluginDescriptionFile;
2129
import 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

Comments
 (0)