package cc.funkemunky.fiona.packetapi.packetlistener.packet.wrapped; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import java.lang.reflect.InvocationTargetException; public class WrappedPacketPlayOutWorldParticle { private String type; private String version; private boolean j; private float x; private float y; private float z; private float xOffset; private float yOffset; private float zOffset; private float speed; private int amount; private int[] data; public WrappedPacketPlayOutWorldParticle(String type, boolean var2, float x, float y, float z, float xOffset, float yOffset, float ZOffset, float speed, int amount, int... data) { this.type = type; this.j = var2; this.x = x; this.y = y; this.z = z; this.xOffset = xOffset; this.yOffset = yOffset; this.zOffset = ZOffset; this.speed = speed; this.amount = amount; this.data = data; version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3]; } public void sendPacket(Player player) { try { Object enumPart = getEnum(getNMSClass("EnumParticle"), type); Object packet = getNMSClass("PacketPlayOutWorldParticles").getConstructor(getNMSClass("EnumParticle"), boolean.class, float.class, float.class, float.class, float.class, float.class, float.class, float.class, int.class, int[].class).newInstance(enumPart, j, x, y, z, xOffset, yOffset, zOffset, speed, amount, data); Object pCon = getNMSClass("EntityPlayer").getDeclaredField("playerConnection").get(getEntityPlayer(player)); getNMSClass("PlayerConnection").getMethod("sendPacket", getNMSClass("Packet")).invoke(pCon, packet); } catch(Exception e) { e.printStackTrace(); } } private Object getEntityPlayer(Player player) { try { return getCBClass("entity.CraftPlayer").getMethod("getHandle").invoke(player); } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e1) { e1.printStackTrace(); return null; } } private Class getNMSClass(String string) { try { return Class.forName("net.minecraft.server." + version + "." + string); } catch (ClassNotFoundException e1) { e1.printStackTrace(); return null; } } private Class getCBClass(String string) { try { return Class.forName("org.bukkit.craftbukkit." + version + "." + string); } catch (ClassNotFoundException e1) { e1.printStackTrace(); return null; } } private Enum getEnum(Class clazz, String enumName) { return Enum.valueOf((Class) clazz, enumName); } }