You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
2.7 KiB
104 lines
2.7 KiB
package cx.sfy.TheBridge.packets;
|
|
|
|
import java.lang.reflect.Field;
|
|
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.entity.Player;
|
|
|
|
import io.netty.channel.Channel;
|
|
|
|
public class PacketInjector {
|
|
private static Field channel;
|
|
private static Field networkManager;
|
|
private static Field playerConnection;
|
|
|
|
public static void Enabler() {
|
|
try {
|
|
PacketInjector.playerConnection = Reflection.getClass("{nms}.EntityPlayer").getField("playerConnection");
|
|
PacketInjector.networkManager = Reflection.getClass("{nms}.PlayerConnection").getField("networkManager");
|
|
|
|
PacketInjector.channel = Reflection.getClass("{nms}.NetworkManager").getField("channel");
|
|
|
|
PacketInjector.refreshSessions();
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
public static void Disabler() {
|
|
for (Player p : Bukkit.getOnlinePlayers()) {
|
|
removePlayer(p);
|
|
}
|
|
}
|
|
|
|
public static void addPlayer(final Player p) {
|
|
if (p == null) {
|
|
return;
|
|
}
|
|
try {
|
|
final Channel channel = PacketInjector
|
|
.getChannel(PacketInjector.getNetworkManager(Reflection.getNmsPlayer(p)));
|
|
if (channel == null) {
|
|
return;
|
|
}
|
|
if (channel.pipeline().get("TheBridgePck") == null) {
|
|
final PacketHandler packetHandler = new PacketHandler(p);
|
|
channel.pipeline().addBefore("packet_handler", "TheBridgePck", packetHandler);
|
|
}
|
|
} catch (final Exception t) {
|
|
t.printStackTrace();
|
|
}
|
|
}
|
|
|
|
private static Channel getChannel(final Object networkManager) {
|
|
if (networkManager == null) {
|
|
return null;
|
|
}
|
|
Channel channel = null;
|
|
try {
|
|
channel = (Channel) PacketInjector.channel.get(networkManager);
|
|
} catch (final Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
return channel;
|
|
}
|
|
|
|
private static Object getNetworkManager(final Object entityPlayer) {
|
|
if (entityPlayer == null) {
|
|
return null;
|
|
}
|
|
Object networkManager = null;
|
|
try {
|
|
networkManager = PacketInjector.networkManager.get(PacketInjector.playerConnection.get(entityPlayer));
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
return networkManager;
|
|
}
|
|
|
|
public static void refreshSessions() {
|
|
for (final Player player : Bukkit.getOnlinePlayers()) {
|
|
PacketInjector.removePlayer(player);
|
|
PacketInjector.addPlayer(player);
|
|
}
|
|
}
|
|
|
|
public static void removePlayer(final Player p) {
|
|
if (p == null) {
|
|
return;
|
|
}
|
|
try {
|
|
final Channel channel = PacketInjector
|
|
.getChannel(PacketInjector.getNetworkManager(Reflection.getNmsPlayer(p)));
|
|
if (channel == null) {
|
|
return;
|
|
}
|
|
if (channel.pipeline().get("LagAssistPck") != null) {
|
|
channel.pipeline().remove("LagAssistPck");
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|