Boss bar problem

Discussion in 'Plugin Development' started by KaiPol, Dec 28, 2013.

Thread Status:
Not open for further replies.
  1. Offline

    KaiPol

    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
    1. package me.KaiPol.Hunter;
    2.  
    3. import java.lang.reflect.Field;
    4. import java.util.HashMap;
    5.  
    6. import net.minecraft.server.v1_7_R1.DataWatcher;
    7. import net.minecraft.server.v1_7_R1.EntityPlayer;
    8. import net.minecraft.server.v1_7_R1.Packet;
    9. import net.minecraft.server.v1_7_R1.PacketPlayInClientCommand;
    10. import net.minecraft.server.v1_7_R1.PacketPlayOutSpawnEntityLiving;
    11. import net.minecraft.server.v1_7_R1.PacketPlayOutEntityDestroy;
    12. import net.minecraft.server.v1_7_R1.PacketPlayOutEntityMetadata;
    13.  
    14. import org.bukkit.Location;
    15. import org.bukkit.craftbukkit.v1_7_R1.entity.CraftPlayer;
    16. import org.bukkit.entity.EntityType;
    17. import org.bukkit.entity.Player;
    18. import org.bukkit.plugin.PluginManager;
    19. import org.bukkit.scheduler.BukkitRunnable;
    20.  
    21. // IMPORTANT
    22. // Remember to change "yourMainClass" to your plugin's main class and "yourPackage" to your package's name
    23. // Original code by chasechocolate
    24. // Modified by ftbastler for Minecraft 1.7
    25.  
    26. public class PacketUtils {
    27. public static final int ENTITY_ID = 1234;
    28.  
    29. private static HashMap<String, Boolean> hasHealthBar = new HashMap<String, Boolean>();
    30.  
    31. public static void sendPacket(Player player, Packet packet){
    32. EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
    33.  
    34. entityPlayer.playerConnection.sendPacket(packet);
    35. }
    36.  
    37. public static Field getField(Class<?> cl, String field_name){
    38. try {
    39. Field field = cl.getDeclaredField(field_name);
    40. return field;
    41. } catch (SecurityException e) {
    42. e.printStackTrace();
    43. } catch (NoSuchFieldException e) {
    44. e.printStackTrace();
    45. }
    46. return null;
    47. }
    48.  
    49. //Accessing packets
    50. @SuppressWarnings("deprecation")
    51. public static PacketPlayOutSpawnEntityLiving getMobPacket(String text, Location loc){
    52. PacketPlayOutSpawnEntityLiving mobPacket = new PacketPlayOutSpawnEntityLiving();
    53.  
    54. try {
    55. Field a = getField(mobPacket.getClass(), "a");
    56. a.setAccessible(true);
    57. a.set(mobPacket, (int) ENTITY_ID);
    58.  
    59. Field b = getField(mobPacket.getClass(), "b");
    60. b.setAccessible(true);
    61. b.set(mobPacket, (byte) EntityType.WITHER.getTypeId());
    62.  
    63. Field c = getField(mobPacket.getClass(), "c");
    64. c.setAccessible(true);
    65. c.set(mobPacket, (int) Math.floor(loc.getBlockX() * 32.0D));
    66.  
    67. Field d = getField(mobPacket.getClass(), "d");
    68. d.setAccessible(true);
    69. d.set(mobPacket, (int) Math.floor(loc.getBlockY() * 32.0D));
    70.  
    71. Field e = getField(mobPacket.getClass(), "e");
    72. e.setAccessible(true);
    73. e.set(mobPacket, (int) Math.floor(loc.getBlockZ() * 32.0D));
    74.  
    75. Field f = getField(mobPacket.getClass(), "f");
    76. f.setAccessible(true);
    77. f.set(mobPacket, (byte) 0);
    78.  
    79. Field g = getField(mobPacket.getClass(), "g");
    80. g.setAccessible(true);
    81. g.set(mobPacket, (byte) 0);
    82.  
    83. Field h = getField(mobPacket.getClass(), "h");
    84. h.setAccessible(true);
    85. h.set(mobPacket, (byte) 0);
    86.  
    87. Field i = getField(mobPacket.getClass(), "i");
    88. i.setAccessible(true);
    89. i.set(mobPacket, (byte) 0);
    90.  
    91. Field j = getField(mobPacket.getClass(), "j");
    92. j.setAccessible(true);
    93. j.set(mobPacket, (byte) 0);
    94.  
    95. Field k = getField(mobPacket.getClass(), "k");
    96. k.setAccessible(true);
    97. k.set(mobPacket, (byte) 0);
    98.  
    99. } catch (IllegalArgumentException e1) {
    100. // TODO Auto-generated catch block
    101. e1.printStackTrace();
    102. } catch (IllegalAccessException e1) {
    103. // TODO Auto-generated catch block
    104. e1.printStackTrace();
    105. }
    106.  
    107. DataWatcher watcher = getWatcher(text, 300);
    108.  
    109. try{
    110. Field t = PacketPlayOutSpawnEntityLiving.class.getDeclaredField("l");
    111. t.setAccessible(true);
    112. t.set(mobPacket, watcher);
    113. } catch(Exception ex){
    114. ex.printStackTrace();
    115. }
    116.  
    117. return mobPacket;
    118. }
    119.  
    120. public static PacketPlayOutEntityDestroy getDestroyEntityPacket(){
    121. PacketPlayOutEntityDestroy packet = new PacketPlayOutEntityDestroy();
    122.  
    123. Field a = getField(packet.getClass(), "a");
    124. a.setAccessible(true);
    125. try {
    126. a.set(packet, new int[]{ENTITY_ID});
    127. e.printStackTrace();
    128. } catch (IllegalAccessException e) {
    129. e.printStackTrace();
    130. }
    131.  
    132. return packet;
    133. }
    134.  
    135. public static PacketPlayOutEntityMetadata getMetadataPacket(DataWatcher watcher){
    136. PacketPlayOutEntityMetadata metaPacket = new PacketPlayOutEntityMetadata();
    137.  
    138. Field a = getField(metaPacket.getClass(), "a");
    139. a.setAccessible(true);
    140. try {
    141. a.set(metaPacket, (int) ENTITY_ID);
    142. } catch (IllegalArgumentException e1) {
    143. e1.printStackTrace();
    144. } catch (IllegalAccessException e1) {
    145. e1.printStackTrace();
    146. }
    147.  
    148. try{
    149. Field b = PacketPlayOutEntityMetadata.class.getDeclaredField("b");
    150. b.setAccessible(true);
    151. b.set(metaPacket, watcher.c());
    152. } catch(Exception e){
    153. e.printStackTrace();
    154. }
    155.  
    156. return metaPacket;
    157. }
    158.  
    159. public static PacketPlayInClientCommand getRespawnPacket(){
    160. PacketPlayInClientCommand packet = new PacketPlayInClientCommand();
    161.  
    162. Field a = getField(packet.getClass(), "a");
    163. a.setAccessible(true);
    164. try {
    165. a.set(packet, (int) 1);
    166. e.printStackTrace();
    167. } catch (IllegalAccessException e) {
    168. e.printStackTrace();
    169. }
    170.  
    171. return packet;
    172. }
    173.  
    174. public static DataWatcher getWatcher(String text, int health){
    175. DataWatcher watcher = new DataWatcher(null);
    176.  
    177. watcher.a(0, (Byte) (byte) 0x20); //Flags, 0x20 = invisible
    178. watcher.a(6, (Float) (float) health);
    179. watcher.a(10, (String) text); //Entity name
    180. watcher.a(11, (Byte) (byte) 1); //Show name, 1 = show, 0 = don't show
    181. //watcher.a(16, (Integer) (int) health); //Wither health, 300 = full health
    182.  
    183. return watcher;
    184. }
    185.  
    186. //Other methods
    187. public static void displayTextBar(String text, final Player player){
    188. PacketPlayOutSpawnEntityLiving mobPacket = getMobPacket(text, player.getLocation());
    189.  
    190. sendPacket(player, mobPacket);
    191. hasHealthBar.put(player.getName(), true);
    192.  
    193. new BukkitRunnable(){
    194. @Override
    195. public void run(){
    196. PacketPlayOutEntityDestroy destroyEntityPacket = getDestroyEntityPacket();
    197.  
    198. sendPacket(player, destroyEntityPacket);
    199. hasHealthBar.put(player.getName(), false);
    200. }
    201. }.runTaskLater(Hunter.plugin, 120L);
    202. }
    203.  
    204. public static void displayLoadingBar(final String text, final String completeText, final Player player, final int healthAdd, final long delay, final boolean loadUp){
    205. PacketPlayOutSpawnEntityLiving mobPacket = getMobPacket(text, player.getLocation());
    206.  
    207. sendPacket(player, mobPacket);
    208. hasHealthBar.put(player.getName(), true);
    209.  
    210. new BukkitRunnable(){
    211. int health = (loadUp ? 0 : 300);
    212.  
    213. @Override
    214. public void run(){
    215. if((loadUp ? health < 300 : health > 0)){
    216. DataWatcher watcher = getWatcher(text, health);
    217. PacketPlayOutEntityMetadata metaPacket = getMetadataPacket(watcher);
    218.  
    219. sendPacket(player, metaPacket);
    220.  
    221. if(loadUp){
    222. health += healthAdd;
    223. } else {
    224. health -= healthAdd;
    225. }
    226. } else {
    227. DataWatcher watcher = getWatcher(text, (loadUp ? 300 : 0));
    228. PacketPlayOutEntityMetadata metaPacket = getMetadataPacket(watcher);
    229. PacketPlayOutEntityDestroy destroyEntityPacket = getDestroyEntityPacket();
    230.  
    231. sendPacket(player, metaPacket);
    232. sendPacket(player, destroyEntityPacket);
    233. hasHealthBar.put(player.getName(), false);
    234.  
    235. //Complete text
    236. PacketPlayOutSpawnEntityLiving mobPacket = getMobPacket(completeText, player.getLocation());
    237.  
    238. sendPacket(player, mobPacket);
    239. hasHealthBar.put(player.getName(), true);
    240.  
    241. DataWatcher watcher2 = getWatcher(completeText, 300);
    242. PacketPlayOutEntityMetadata metaPacket2 = getMetadataPacket(watcher2);
    243.  
    244. sendPacket(player, metaPacket2);
    245.  
    246. new BukkitRunnable(){
    247. @Override
    248. public void run(){
    249. PacketPlayOutEntityDestroy destroyEntityPacket = getDestroyEntityPacket();
    250.  
    251. sendPacket(player, destroyEntityPacket);
    252. hasHealthBar.put(player.getName(), false);
    253. }
    254. }.runTaskLater(Hunter.plugin, 40L);
    255.  
    256. this.cancel();
    257. }
    258. }
    259. }.runTaskTimer(Hunter.plugin, delay, delay);
    260. }
    261.  
    262. public static void displayLoadingBar(final String text, final String completeText, final Player player, final int secondsDelay, final boolean loadUp){
    263. final int healthChangePerSecond = 300 / secondsDelay;
    264.  
    265. displayLoadingBar(text, completeText, player, healthChangePerSecond, 20L, loadUp);
    266. }
    267. }


    Importing the code to use in the main class:
    Code:java
    1. private PacketUtils PacketUtils = new PacketUtils();


    Using the code in the main class:
    Code:java
    1. @EventHandler
    2. public void onJoinEvent(PlayerJoinEvent event){
    3. Player player = event.getPlayer();
    4. PacketUtils.displayTextBar(ChatColor.GREEN + "Hello there, " + player.getName() + "!", player);
    5. }


    Here's the error:
    Code:java
    1. [10:13:47 INFO]: teegah[/71.233.104.73:57441] logged in with entity id 471068 at
    2. ([flatlands] 106.2550628393297, 262.9972798925172, -507.7115820675242)
    3. [10:13:47 ERROR]: Could not pass event PlayerJoinEvent to Hunter v1.7.2
    4. org.bukkit.event.EventException
    5. at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    6. va:427) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    7. at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
    8. a:62) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    9. at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
    10. ava:481) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    11. at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
    12. ava:466) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    13. at net.minecraft.server.v1_7_R1.PlayerList.c(PlayerList.java:225) [craft
    14. bukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    15. at net.minecraft.server.v1_7_R1.PlayerList.a(PlayerList.java:116) [craft
    16. bukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    17. at net.minecraft.server.v1_7_R1.LoginListener.c(LoginListener.java:78) [
    18. craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    19. at net.minecraft.server.v1_7_R1.LoginListener.a(LoginListener.java:42) [
    20. craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    21. at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:149
    22. ) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    23. at net.minecraft.server.v1_7_R1.ServerConnection.c(SourceFile:134) [craf
    24. tbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    25. at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:6
    26. 55) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    27. at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:2
    28. 50) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    29. at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:5
    30. 45) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    31. at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java
    32. :457) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    33. at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:6
    34. 17) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    35. Caused by: java.lang.IllegalArgumentException: Plugin cannot be null
    36. at org.apache.commons.lang.Validate.notNull(Validate.java:203) ~[craftbu
    37. kkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    38. at org.bukkit.craftbukkit.v1_7_R1.scheduler.CraftScheduler.validate(Craf
    39. tScheduler.java:391) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    40. at org.bukkit.craftbukkit.v1_7_R1.scheduler.CraftScheduler.runTaskTimer(
    41. CraftScheduler.java:120) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    42. at org.bukkit.craftbukkit.v1_7_R1.scheduler.CraftScheduler.runTaskLater(
    43. CraftScheduler.java:104) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    44. at org.bukkit.scheduler.BukkitRunnable.runTaskLater(BukkitRunnable.java:
    45. 64) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    46. at me.KaiPol.Hunter.PacketUtils.displayTextBar(PacketUtils.java:203) ~[?
    47. :?]
    48. at me.KaiPol.Hunter.Hunter.onJoinEvent(Hunter.java:306) ~[?:?]
    49. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0
    50. _12-ea]
    51. at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0
    52. _12-ea]
    53. at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1
    54. .7.0_12-ea]
    55. at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_12-ea]
    56. at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    57. va:425) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    58. ... 14 more



    Please help?
     
  2. Offline

    Chlorek

    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
     
    KaiPol likes this.
  3. Offline

    KaiPol

    Chlorek
    Thank you! I feel stupid now.
     
  4. Offline

    ShearsSheep

    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

     
Thread Status:
Not open for further replies.

Share This Page