Utilizing Wither Bar!

Discussion in 'Plugin Development' started by HeavyMine13, Nov 17, 2013.

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

    HeavyMine13

    So recently, I tried to make a plugin from chasechocolate Idea (https://forums.bukkit.org/threads/tutorial-utilizing-the-boss-health-bar.158018/) But Im getting errors!

    Code:
    Code:java
    1. package me.HeavyMine13.bar;
    2.  
    3.  
    4. import java.lang.reflect.Field;
    5. import java.util.HashMap;
    6.  
    7. import net.minecraft.server.v1_6_R3.DataWatcher;
    8. import net.minecraft.server.v1_6_R3.EntityPlayer;
    9. import net.minecraft.server.v1_6_R3.Packet205ClientCommand;
    10. import net.minecraft.server.v1_6_R3.Packet24MobSpawn;
    11. import net.minecraft.server.v1_6_R3.Packet29DestroyEntity;
    12. import net.minecraft.server.v1_6_R3.Packet40EntityMetadata;
    13.  
    14. import org.bukkit.Location;
    15. import org.bukkit.craftbukkit.v1_6_R3.entity.CraftPlayer;
    16. import org.bukkit.entity.EntityType;
    17. import org.bukkit.entity.Player;
    18. import org.bukkit.event.Listener;
    19. import org.bukkit.plugin.Plugin;
    20. import org.bukkit.plugin.java.JavaPlugin;
    21. import org.bukkit.scheduler.BukkitRunnable;
    22.  
    23. public class Bar extends JavaPlugin implements Listener{
    24. public static final int ENTITY_ID = 1234;
    25. private static HashMap<String, Boolean> hasHealthBar = new HashMap<String, Boolean>();
    26. public static void sendPacket(Player player, net.minecraft.server.v1_6_R3.Packet packet){
    27. EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
    28. entityPlayer.playerConnection.sendPacket(packet);
    29. }
    30. //Accessing packets
    31. @SuppressWarnings("deprecation")
    32. public static Packet24MobSpawn getMobPacket(String text, Location loc){
    33. Packet24MobSpawn mobPacket = new Packet24MobSpawn();
    34. mobPacket.a = (int) ENTITY_ID; //Entity ID
    35. mobPacket.b = (byte) EntityType.WITHER.getTypeId(); //Mob type (ID: 64)
    36. mobPacket.c = (int) Math.floor(loc.getBlockX() * 32.0D); //X position
    37. mobPacket.d = (int) Math.floor(loc.getBlockY() * 32.0D); //Y position
    38. mobPacket.e = (int) Math.floor(loc.getBlockZ() * 32.0D); //Z position
    39. mobPacket.f = (byte) 0; //Pitch
    40. mobPacket.g = (byte) 0; //Head Pitch
    41. mobPacket.h = (byte) 0; //Yawn
    42. mobPacket.i = (short) 0; //X velocity
    43. mobPacket.j = (short) 0; //Y velocity
    44. mobPacket.k = (short) 0; //Z velocity
    45. DataWatcher watcher = getWatcher(text, 300);
    46. try{
    47. Field t = Packet24MobSpawn.class.getDeclaredField("t");
    48. t.setAccessible(true);
    49. t.set(mobPacket, watcher);
    50. } catch(Exception e){
    51. e.printStackTrace();
    52. }
    53. return mobPacket;
    54. }
    55. public static Packet29DestroyEntity getDestroyEntityPacket(){
    56. Packet29DestroyEntity packet = new Packet29DestroyEntity();
    57. packet.a = new int[]{ENTITY_ID};
    58. return packet;
    59. }
    60. public static Packet40EntityMetadata getMetadataPacket(DataWatcher watcher){
    61. Packet40EntityMetadata metaPacket = new Packet40EntityMetadata();
    62. metaPacket.a = (int) ENTITY_ID;
    63. try{
    64. Field b = Packet40EntityMetadata.class.getDeclaredField("b");
    65. b.setAccessible(true);
    66. b.set(metaPacket, watcher.c());
    67. } catch(Exception e){
    68. e.printStackTrace();
    69. }
    70. return metaPacket;
    71. }
    72. public static Packet205ClientCommand getRespawnPacket(){
    73. Packet205ClientCommand packet = new Packet205ClientCommand();
    74. packet.a = (int) 1;
    75. return packet;
    76. }
    77. public static DataWatcher getWatcher(String text, int health){
    78. DataWatcher watcher = new DataWatcher();
    79. watcher.a(0, (Byte) (byte) 0x20); //Flags, 0x20 = invisible
    80. watcher.a(6, (Float) (float) health);
    81. watcher.a(10, (String) text); //Entity name
    82. watcher.a(11, (Byte) (byte) 1); //Show name, 1 = show, 0 = don't show
    83. //watcher.a(16, (Integer) (int) health); //Wither health, 300 = full health
    84. return watcher;
    85. }
    86. //Other methods
    87. public static void displayTextBar(String text, final Player player){
    88. Packet24MobSpawn mobPacket = getMobPacket(text, player.getLocation());
    89. sendPacket(player, mobPacket);
    90. hasHealthBar.put(player.getName(), true);
    91. new BukkitRunnable(){
    92. @Override
    93. public void run(){
    94. Packet29DestroyEntity destroyEntityPacket = getDestroyEntityPacket();
    95. sendPacket(player, destroyEntityPacket);
    96. hasHealthBar.put(player.getName(), false);
    97. }
    98. }.runTaskLater(Bar.getInstance(), 120L);
    99. }
    100. private static Plugin getInstance() {
    101. return null;
    102. }
    103. public static void displayLoadingBar(final String text, final String completeText, final Player player, final int healthAdd, final long delay, final boolean loadUp){
    104. Packet24MobSpawn mobPacket = getMobPacket(text, player.getLocation());
    105. sendPacket(player, mobPacket);
    106. hasHealthBar.put(player.getName(), true);
    107. new BukkitRunnable(){
    108. int health = (loadUp ? 0 : 300);
    109. @Override
    110. public void run(){
    111. if((loadUp ? health < 300 : health > 0)){
    112. DataWatcher watcher = getWatcher(text, health);
    113. Packet40EntityMetadata metaPacket = getMetadataPacket(watcher);
    114. sendPacket(player, metaPacket);
    115. if(loadUp){
    116. health += healthAdd;
    117. } else {
    118. health -= healthAdd;
    119. }
    120. } else {
    121. DataWatcher watcher = getWatcher(text, (loadUp ? 300 : 0));
    122. Packet40EntityMetadata metaPacket = getMetadataPacket(watcher);
    123. Packet29DestroyEntity destroyEntityPacket = getDestroyEntityPacket();
    124. sendPacket(player, metaPacket);
    125. sendPacket(player, destroyEntityPacket);
    126. hasHealthBar.put(player.getName(), false);
    127. //Complete text
    128. Packet24MobSpawn mobPacket = getMobPacket(completeText, player.getLocation());
    129. sendPacket(player, mobPacket);
    130. hasHealthBar.put(player.getName(), true);
    131. DataWatcher watcher2 = getWatcher(completeText, 300);
    132. Packet40EntityMetadata metaPacket2 = getMetadataPacket(watcher2);
    133. sendPacket(player, metaPacket2);
    134. new BukkitRunnable(){
    135. @Override
    136. public void run(){
    137. Packet29DestroyEntity destroyEntityPacket = getDestroyEntityPacket();
    138. sendPacket(player, destroyEntityPacket);
    139. hasHealthBar.put(player.getName(), false);
    140. }
    141. }.runTaskLater(Bar.getInstance(), 40L);
    142. this.cancel();
    143. }
    144. }
    145. }.runTaskTimer(Bar.getInstance(), delay, delay);
    146. }
    147. public static void displayLoadingBar(final String text, final String completeText, final Player player, final int secondsDelay, final boolean loadUp){
    148. final int healthChangePerSecond = 300 / secondsDelay;
    149. displayLoadingBar(text, completeText, player, healthChangePerSecond, 20L, loadUp);
    150. }
    151. }

    plugin.yml:


    Error (In console):
     
  2. Offline

    tommycake50

    Change:
    main: me.Heavymine13.bar.Bar
    to
    main: me.HeavyMine13.bar.Bar

    But in the future please try to keep package names all lower case.
     
  3. Offline

    HeavyMine13

    Ok now no errors, but the code doesn't work it doesn't show up anything (Should had show a bar of a wither) chasechocolate help me with it plz!
     
  4. Offline

    cmardo19956

    You need a PacketUtils class. Did you provide that in the code, if not, that's the reason.

    Follow chocolate's code.
     
Thread Status:
Not open for further replies.

Share This Page