Skip to content

Commit

Permalink
Reflection update
Browse files Browse the repository at this point in the history
  • Loading branch information
narumii committed Apr 15, 2021
1 parent bab96e3 commit 7c72dfc
Showing 1 changed file with 19 additions and 8 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package uwu.narumi.packetlib.api.helper;

import io.netty.channel.Channel;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;

Expand All @@ -9,25 +11,34 @@ public class ReflectionHelper {
private static String BUKKIT;
private static String NMS;

private static Class<?> CRAFT_PLAYER;
private static Method getHandleMethod;
private static Field playerConnectionField;
private static Field networkManagerField;
private static Field channelField;

static {
try {
BUKKIT = Bukkit.getServer().getClass().getName().replace(".CraftServer", "");
NMS = BUKKIT.replace("org.bukkit.craftbukkit", "net.minecraft.server");

CRAFT_PLAYER = Class.forName(BUKKIT + ".entity.CraftPlayer");
Class<?> craftPlayerClass = Class.forName(BUKKIT + ".entity.CraftPlayer");
Class<?> entityPlayerClass = Class.forName(NMS + ".EntityPlayer");
Class<?> playerConnectionClass = Class.forName(NMS + ".PlayerConnection");
Class<?> networkManagerClass = Class.forName(NMS + ".NetworkManager");

getHandleMethod = craftPlayerClass.getMethod("getHandle");
playerConnectionField = entityPlayerClass.getField("playerConnection");
networkManagerField = playerConnectionClass.getField("networkManager");
channelField = networkManagerClass.getField("channel");
} catch (Exception e) {
e.printStackTrace();
}
}

public static Channel getChannel(Player player) throws Exception {
Object entityPlayer = CRAFT_PLAYER.getMethod("getHandle").invoke(player);
Object playerConnection = entityPlayer.getClass().getField("playerConnection")
.get(entityPlayer);
Object networkManager = playerConnection.getClass().getField("networkManager")
.get(playerConnection);
return (Channel) networkManager.getClass().getField("channel").get(networkManager);
Object entityPlayer = getHandleMethod.invoke(player);
Object playerConnection = playerConnectionField.get(entityPlayer);
Object networkManager = networkManagerField.get(playerConnection);
return (Channel) channelField.get(networkManager);
}
}

0 comments on commit 7c72dfc

Please sign in to comment.