Hello! I've been working on a boss bar message for my server and it works, but I get an annoying error every time someone joins. I'm using http://forums.bukkit.org/threads/tutorial-utilizing-the-boss-health-bar.158018/ chasechocolate 's resource. Here's the code for the class(the resource): Code:java package me.KaiPol.Hunter; import java.lang.reflect.Field;import java.util.HashMap; import net.minecraft.server.v1_7_R1.DataWatcher;import net.minecraft.server.v1_7_R1.EntityPlayer;import net.minecraft.server.v1_7_R1.Packet;import net.minecraft.server.v1_7_R1.PacketPlayInClientCommand;import net.minecraft.server.v1_7_R1.PacketPlayOutSpawnEntityLiving;import net.minecraft.server.v1_7_R1.PacketPlayOutEntityDestroy;import net.minecraft.server.v1_7_R1.PacketPlayOutEntityMetadata; import org.bukkit.Location;import org.bukkit.craftbukkit.v1_7_R1.entity.CraftPlayer;import org.bukkit.entity.EntityType;import org.bukkit.entity.Player;import org.bukkit.plugin.PluginManager;import org.bukkit.scheduler.BukkitRunnable; // IMPORTANT// Remember to change "yourMainClass" to your plugin's main class and "yourPackage" to your package's name// Original code by chasechocolate// Modified by ftbastler for Minecraft 1.7 public class PacketUtils { public static final int ENTITY_ID = 1234; private static HashMap<String, Boolean> hasHealthBar = new HashMap<String, Boolean>(); public static void sendPacket(Player player, Packet packet){ EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); entityPlayer.playerConnection.sendPacket(packet); } public static Field getField(Class<?> cl, String field_name){ try { Field field = cl.getDeclaredField(field_name); return field; } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } return null; } //Accessing packets @SuppressWarnings("deprecation") public static PacketPlayOutSpawnEntityLiving getMobPacket(String text, Location loc){ PacketPlayOutSpawnEntityLiving mobPacket = new PacketPlayOutSpawnEntityLiving(); try { Field a = getField(mobPacket.getClass(), "a"); a.setAccessible(true); a.set(mobPacket, (int) ENTITY_ID); Field b = getField(mobPacket.getClass(), "b"); b.setAccessible(true); b.set(mobPacket, (byte) EntityType.WITHER.getTypeId()); Field c = getField(mobPacket.getClass(), "c"); c.setAccessible(true); c.set(mobPacket, (int) Math.floor(loc.getBlockX() * 32.0D)); Field d = getField(mobPacket.getClass(), "d"); d.setAccessible(true); d.set(mobPacket, (int) Math.floor(loc.getBlockY() * 32.0D)); Field e = getField(mobPacket.getClass(), "e"); e.setAccessible(true); e.set(mobPacket, (int) Math.floor(loc.getBlockZ() * 32.0D)); Field f = getField(mobPacket.getClass(), "f"); f.setAccessible(true); f.set(mobPacket, (byte) 0); Field g = getField(mobPacket.getClass(), "g"); g.setAccessible(true); g.set(mobPacket, (byte) 0); Field h = getField(mobPacket.getClass(), "h"); h.setAccessible(true); h.set(mobPacket, (byte) 0); Field i = getField(mobPacket.getClass(), "i"); i.setAccessible(true); i.set(mobPacket, (byte) 0); Field j = getField(mobPacket.getClass(), "j"); j.setAccessible(true); j.set(mobPacket, (byte) 0); Field k = getField(mobPacket.getClass(), "k"); k.setAccessible(true); k.set(mobPacket, (byte) 0); } catch (IllegalArgumentException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IllegalAccessException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } DataWatcher watcher = getWatcher(text, 300); try{ Field t = PacketPlayOutSpawnEntityLiving.class.getDeclaredField("l"); t.setAccessible(true); t.set(mobPacket, watcher); } catch(Exception ex){ ex.printStackTrace(); } return mobPacket; } public static PacketPlayOutEntityDestroy getDestroyEntityPacket(){ PacketPlayOutEntityDestroy packet = new PacketPlayOutEntityDestroy(); Field a = getField(packet.getClass(), "a"); a.setAccessible(true); try { a.set(packet, new int[]{ENTITY_ID}); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return packet; } public static PacketPlayOutEntityMetadata getMetadataPacket(DataWatcher watcher){ PacketPlayOutEntityMetadata metaPacket = new PacketPlayOutEntityMetadata(); Field a = getField(metaPacket.getClass(), "a"); a.setAccessible(true); try { a.set(metaPacket, (int) ENTITY_ID); } catch (IllegalArgumentException e1) { e1.printStackTrace(); } catch (IllegalAccessException e1) { e1.printStackTrace(); } try{ Field b = PacketPlayOutEntityMetadata.class.getDeclaredField("b"); b.setAccessible(true); b.set(metaPacket, watcher.c()); } catch(Exception e){ e.printStackTrace(); } return metaPacket; } public static PacketPlayInClientCommand getRespawnPacket(){ PacketPlayInClientCommand packet = new PacketPlayInClientCommand(); Field a = getField(packet.getClass(), "a"); a.setAccessible(true); try { a.set(packet, (int) 1); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return packet; } public static DataWatcher getWatcher(String text, int health){ DataWatcher watcher = new DataWatcher(null); watcher.a(0, (Byte) (byte) 0x20); //Flags, 0x20 = invisible watcher.a(6, (Float) (float) health); watcher.a(10, (String) text); //Entity name watcher.a(11, (Byte) (byte) 1); //Show name, 1 = show, 0 = don't show //watcher.a(16, (Integer) (int) health); //Wither health, 300 = full health return watcher; } //Other methods public static void displayTextBar(String text, final Player player){ PacketPlayOutSpawnEntityLiving mobPacket = getMobPacket(text, player.getLocation()); sendPacket(player, mobPacket); hasHealthBar.put(player.getName(), true); new BukkitRunnable(){ @Override public void run(){ PacketPlayOutEntityDestroy destroyEntityPacket = getDestroyEntityPacket(); sendPacket(player, destroyEntityPacket); hasHealthBar.put(player.getName(), false); } }.runTaskLater(Hunter.plugin, 120L); } public static void displayLoadingBar(final String text, final String completeText, final Player player, final int healthAdd, final long delay, final boolean loadUp){ PacketPlayOutSpawnEntityLiving mobPacket = getMobPacket(text, player.getLocation()); sendPacket(player, mobPacket); hasHealthBar.put(player.getName(), true); new BukkitRunnable(){ int health = (loadUp ? 0 : 300); @Override public void run(){ if((loadUp ? health < 300 : health > 0)){ DataWatcher watcher = getWatcher(text, health); PacketPlayOutEntityMetadata metaPacket = getMetadataPacket(watcher); sendPacket(player, metaPacket); if(loadUp){ health += healthAdd; } else { health -= healthAdd; } } else { DataWatcher watcher = getWatcher(text, (loadUp ? 300 : 0)); PacketPlayOutEntityMetadata metaPacket = getMetadataPacket(watcher); PacketPlayOutEntityDestroy destroyEntityPacket = getDestroyEntityPacket(); sendPacket(player, metaPacket); sendPacket(player, destroyEntityPacket); hasHealthBar.put(player.getName(), false); //Complete text PacketPlayOutSpawnEntityLiving mobPacket = getMobPacket(completeText, player.getLocation()); sendPacket(player, mobPacket); hasHealthBar.put(player.getName(), true); DataWatcher watcher2 = getWatcher(completeText, 300); PacketPlayOutEntityMetadata metaPacket2 = getMetadataPacket(watcher2); sendPacket(player, metaPacket2); new BukkitRunnable(){ @Override public void run(){ PacketPlayOutEntityDestroy destroyEntityPacket = getDestroyEntityPacket(); sendPacket(player, destroyEntityPacket); hasHealthBar.put(player.getName(), false); } }.runTaskLater(Hunter.plugin, 40L); this.cancel(); } } }.runTaskTimer(Hunter.plugin, delay, delay); } public static void displayLoadingBar(final String text, final String completeText, final Player player, final int secondsDelay, final boolean loadUp){ final int healthChangePerSecond = 300 / secondsDelay; displayLoadingBar(text, completeText, player, healthChangePerSecond, 20L, loadUp); }} Importing the code to use in the main class: Code:java private PacketUtils PacketUtils = new PacketUtils(); Using the code in the main class: Code:java @EventHandler public void onJoinEvent(PlayerJoinEvent event){ Player player = event.getPlayer(); PacketUtils.displayTextBar(ChatColor.GREEN + "Hello there, " + player.getName() + "!", player); } Here's the error: Code:java [10:13:47 INFO]: teegah[/71.233.104.73:57441] logged in with entity id 471068 at ([flatlands] 106.2550628393297, 262.9972798925172, -507.7115820675242)[10:13:47 ERROR]: Could not pass event PlayerJoinEvent to Hunter v1.7.2org.bukkit.event.EventException at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:481) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:466) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] at net.minecraft.server.v1_7_R1.PlayerList.c(PlayerList.java:225) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] at net.minecraft.server.v1_7_R1.PlayerList.a(PlayerList.java:116) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] at net.minecraft.server.v1_7_R1.LoginListener.c(LoginListener.java:78) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] at net.minecraft.server.v1_7_R1.LoginListener.a(LoginListener.java:42) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:149) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] at net.minecraft.server.v1_7_R1.ServerConnection.c(SourceFile:134) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:655) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:250) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:545) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java:457) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:617) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]Caused by: java.lang.IllegalArgumentException: Plugin cannot be null at org.apache.commons.lang.Validate.notNull(Validate.java:203) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] at org.bukkit.craftbukkit.v1_7_R1.scheduler.CraftScheduler.validate(CraftScheduler.java:391) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] at org.bukkit.craftbukkit.v1_7_R1.scheduler.CraftScheduler.runTaskTimer(CraftScheduler.java:120) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] at org.bukkit.craftbukkit.v1_7_R1.scheduler.CraftScheduler.runTaskLater(CraftScheduler.java:104) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] at org.bukkit.scheduler.BukkitRunnable.runTaskLater(BukkitRunnable.java:64) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] at me.KaiPol.Hunter.PacketUtils.displayTextBar(PacketUtils.java:203) ~[?:?] at me.KaiPol.Hunter.Hunter.onJoinEvent(Hunter.java:306) ~[?:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_12-ea] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_12-ea] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_12-ea] at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_12-ea] at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] ... 14 more Please help?
Why people can't read stacktraces? I can't get it... PacketUtils.java at line 203 - you pass null where correct plugin instance should be passed. So your Hunter.plugin is null. PacketUtils.java:203 Caused by: java.lang.IllegalArgumentException: Plugin cannot be null
Go In between of Search This thread <Edit> Watch Thread, Click edit..mark it as solved..lawl. I'm OCD about this things..sorry..xD