hugo4715
6/16/2016 - 10:34 AM

PacketUtil.java

package fr.hugo4715.crackedskywars.util;

import org.bukkit.entity.Player;

import fr.hugo4715.crackedskywars.util.Reflection.FieldAccessor;
import fr.hugo4715.crackedskywars.util.Reflection.MethodInvoker;

public class PacketUtil {
	private static PacketUtil instance;

	public static PacketUtil getInstance() {
		if (null == instance) {
			instance = new PacketUtil();
		}
		return instance;
	}

	
	private MethodInvoker methodGetPlayerHandle;
	private MethodInvoker methodSendPacket;
	
	 private FieldAccessor<?> fieldPlayerConnection;
	
	private PacketUtil() {
		methodGetPlayerHandle = Reflection.getMethod("{obc}.entity.CraftPlayer", "getHandle");
		methodSendPacket = Reflection.getMethod("{nms}.PlayerConnection","sendPacket", Object.class);
		
		 fieldPlayerConnection = Reflection.getField("{nms}.EntityPlayer", "playerConnection", Object.class);
	}
	
	public void sendPacket(Player p, Object packet){
		Object nmsPlayer = methodGetPlayerHandle.invoke(p);
		Object connection = fieldPlayerConnection.get(nmsPlayer);
		methodSendPacket.invoke(connection, packet);
		
	}

}