Vinetos

PacketsListener - PacketInjector

Dec 31st, 2015
440
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.66 KB | None | 0 0
  1. package fr.vinetos.packetlistener;
  2.  
  3. import io.netty.channel.Channel;
  4. import org.bukkit.entity.Player;
  5.  
  6. import java.lang.reflect.Field;
  7.  
  8. /**
  9.  * Created by VINETOS on 29/12/2015.
  10.  */
  11. public class PacketInjector {
  12.  
  13.     private Field EntityPlayer_playerConnection;
  14.     private Class<?> PlayerConnection;
  15.     private Field PlayerConnection_networkManager;
  16.  
  17.     private Class<?> NetworkManager;
  18.     private Field channel;
  19.     private Field packetListener;//net.minecraft
  20.  
  21.     public PacketInjector() {
  22.         try {
  23.             EntityPlayer_playerConnection = Reflection.getField(Reflection.getClass("{nms}.EntityPlayer"), "playerConnection");
  24.  
  25.             PlayerConnection = Reflection.getClass("{nms}.PlayerConnection");
  26.             PlayerConnection_networkManager = Reflection.getField(PlayerConnection, "networkManager");
  27.  
  28.             NetworkManager = Reflection.getClass("{nms}.NetworkManager");
  29.             if(Reflection.getNmsVersion().equals("v1_8_R2")){
  30.                 channel = Reflection.getField(NetworkManager, "k");
  31.             }else
  32.             if(Reflection.getNmsVersion().equals("v1_8_R3")){
  33.                 channel = Reflection.getField(NetworkManager, "channel");
  34.             }
  35.             packetListener = Reflection.getField(NetworkManager, "m");//PacketListener
  36.         } catch (Throwable t) {
  37.             t.printStackTrace();
  38.         }
  39.     }
  40.  
  41.     public void addPlayer(Player p) {
  42.         try {
  43.             Channel ch = getChannel(getNetworkManager(Reflection.getNmsPlayer(p)));
  44.             if(ch.pipeline().get("PacketInjector") == null) {
  45.                 PacketHandler h = new PacketHandler(p);
  46.                 ch.pipeline().addBefore("packet_handler", "PacketInjector", h);
  47.             }
  48.         } catch (Throwable t) {
  49.             t.printStackTrace();
  50.         }
  51.     }
  52.  
  53.     public void removePlayer(Player p) {
  54.         try {
  55.             Channel ch = getChannel(getNetworkManager(Reflection.getNmsPlayer(p)));
  56.             if(ch.pipeline().get("PacketInjector") != null) {
  57.                 ch.pipeline().remove("PacketInjector");
  58.             }
  59.         } catch (Throwable t) {
  60.             t.printStackTrace();
  61.         }
  62.     }
  63.  
  64.     private Object getNetworkManager(Object ep) {
  65.         return Reflection.getFieldValue(PlayerConnection_networkManager, Reflection.getFieldValue(EntityPlayer_playerConnection, ep));
  66.     }
  67.  
  68.     private Channel getChannel(Object networkManager) {
  69.         Channel ch = null;
  70.         try {
  71.             ch = Reflection.getFieldValue(channel, networkManager);
  72.         } catch (Exception e) {
  73.             ch = Reflection.getFieldValue(packetListener, networkManager);
  74.         }
  75.         return ch;
  76.     }
  77. }
Add Comment
Please, Sign In to add comment