Vinetos

Bukkit NMS | Server Info (#06) - PacketInjector

Mar 6th, 2016
331
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.62 KB | None | 0 0
  1. import io.netty.channel.Channel;
  2. import net.minecraft.server.v1_9_R1.MinecraftServer;
  3. import net.minecraft.server.v1_9_R1.NetworkManager;
  4. import net.minecraft.server.v1_9_R1.ServerConnection;
  5. import org.bukkit.Bukkit;
  6. import org.bukkit.craftbukkit.v1_9_R1.CraftServer;
  7. import org.bukkit.entity.Player;
  8. import org.bukkit.event.EventHandler;
  9. import org.bukkit.event.Listener;
  10. import org.bukkit.event.player.PlayerJoinEvent;
  11. import org.bukkit.event.server.ServerListPingEvent;
  12.  
  13. import java.lang.reflect.Field;
  14. import java.lang.reflect.Method;
  15. import java.util.Collections;
  16. import java.util.List;
  17.  
  18. /**
  19.  * Created by VINETOS on 29/12/2015.
  20.  */
  21. public class PacketInjector implements Listener{
  22.  
  23.     private MinecraftServer server;
  24.     private List<?> networkManagers;
  25.  
  26.     public PacketInjector() {
  27.         try {
  28.             CraftServer craftserver = (CraftServer) Bukkit.getServer();
  29.             Field console = craftserver.getClass().getDeclaredField("console");
  30.             console.setAccessible(true);
  31.             this.server = (MinecraftServer) console.get(craftserver);
  32.             ServerConnection conn = this.server.getServerConnection();
  33.             networkManagers = Collections.synchronizedList((List<?>) this.getNetworkManagerList(conn));
  34.         } catch(Exception e) {
  35.             e.printStackTrace();
  36.         }
  37.     }
  38.  
  39.     public void injectOpenConnections() {
  40.         try {
  41.             Field field = Reflection.getField(NetworkManager.class, "channel");
  42.             field.setAccessible(true);
  43.             for(Object manager : networkManagers) {
  44.                 Channel channel = (Channel) field.get(manager);
  45.                 if(channel.pipeline().context("VInjector") == null && (channel.pipeline().context("packet_handler") != null)) {
  46.                     channel.pipeline().addBefore("packet_handler", "VInjector", new PacketHandler());
  47.                 }
  48.             }
  49.         } catch(Exception e) {
  50.             e.printStackTrace();
  51.         }
  52.     }
  53.  
  54.     public Object getNetworkManagerList(ServerConnection conn) {
  55.         try {
  56.             for(Method method : conn.getClass().getDeclaredMethods()) {
  57.                 method.setAccessible(true);
  58.                 if(method.getReturnType() == List.class) {
  59.                     Object object = method.invoke(null, conn);
  60.                     return object;
  61.                 }
  62.             }
  63.         } catch(Exception e) {
  64.             e.printStackTrace();
  65.         }
  66.         return null;
  67.     }
  68.  
  69.     @EventHandler
  70.     public void serverListPing(ServerListPingEvent event) {
  71.         this.injectOpenConnections();
  72.     }
  73.  
  74.     @EventHandler
  75.     public void onJoin(PlayerJoinEvent event) {
  76.         this.injectOpenConnections();
  77.     }
  78. }
Advertisement
Add Comment
Please, Sign In to add comment