Getting an error with message broadcasting

Discussion in 'Plugin Development' started by beatcomet, Jul 10, 2011.

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

    beatcomet

    Well here is a little piece of code that gives me an error :

    Code:java
    1.  
    2. public class EListener extends EntityListener {
    3. Glass plugin;
    4.  
    5. public EListener(Glass instance) {
    6. instance = plugin;
    7. }
    8.  
    9. public void onEntityDeath(EntityDeathEvent event) {
    10. Entity e = event.getEntity();
    11. if (e instanceof Player) {
    12. Player p = (Player) e;
    13. plugin.getServer().broadcastMessage("[Server] " + p.getName() + plugin.dmsg);
    14. }
    15. }
    16. }
    17.  


    plugin.dmsg is a configurable String (taken from the main class)
    The problem is that i'm getting this error

    2011-07-10 13:03:27 [SEVERE] Could not pass event ENTITY_DEATH to GlassBreak
    java.lang.NullPointerException
    at me.beatcomet.GP.EListener.onEntityDeath(EListener.java:19)
    at org.bukkit.plugin.java.JavaPluginLoader$56.execute(JavaPluginLoader.java:635)
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:58)
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:321)
    at net.minecraft.server.EntityPlayer.die(EntityPlayer.java:141)
    at org.bukkit.craftbukkit.entity.CraftLivingEntity.setHealth(CraftLivingEntity.java:43)
    at me.beatcomet.GP.BListener.onBlockBreak(BListener.java:39)
    at org.bukkit.plugin.java.JavaPluginLoader$35.execute(JavaPluginLoader.java:483)
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:58)
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:321)
    at net.minecraft.server.ItemInWorldManager.c(ItemInWorldManager.java:157)
    at net.minecraft.server.ItemInWorldManager.a(ItemInWorldManager.java:121)
    at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:460)
    at net.minecraft.server.Packet14BlockDig.a(SourceFile:42)
    at net.minecraft.server.NetworkManager.b(NetworkManager.java:226)
    at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:84)
    at net.minecraft.server.NetworkListenThread.a(SourceFile:105)
    at net.minecraft.server.MinecraftServer.h(MinecraftServer.java:451)
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:361)
    at net.minecraft.server.ThreadServerApplication.run(SourceFile:422)
     
  2. Offline

    darklust

    Is dmsg a public member?
     
  3. Offline

    beatcomet

    public member?
     
  4. Offline

    darklust

    It's a member of the main class, but how is it initialized?
    public String dmsg?
    If it isn't, it won't be in scope and the listener can't use it.
     
  5. Offline

    beatcomet

    Config file
     
  6. Offline

    darklust

    You have to put
    Code:
    public
    before the type declaration of the String.
     
  7. Offline

    beatcomet

    2011-07-10 13:38:06 [SEVERE] Could not pass event BLOCK_BREAK to GlassBreak
    java.lang.IllegalArgumentException: Health must be between 0 and 200
    at org.bukkit.craftbukkit.entity.CraftLivingEntity.setHealth(CraftLivingEntity.java:39)
    at me.beatcomet.GP.BListener.onBlockBreak(BListener.java:39)
    at org.bukkit.plugin.java.JavaPluginLoader$35.execute(JavaPluginLoader.java:483)
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:58)
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:321)
    at net.minecraft.server.ItemInWorldManager.c(ItemInWorldManager.java:157)
    at net.minecraft.server.ItemInWorldManager.a(ItemInWorldManager.java:121)
    at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:460)
    at net.minecraft.server.Packet14BlockDig.a(SourceFile:42)
    at net.minecraft.server.NetworkManager.b(NetworkManager.java:226)
    at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:84)
    at net.minecraft.server.NetworkListenThread.a(SourceFile:105)
    at net.minecraft.server.MinecraftServer.h(MinecraftServer.java:451)
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:361)
    at net.minecraft.server.ThreadServerApplication.run(SourceFile:422)

    this is the new error i'm getting
     
  8. Offline

    darklust

    Look at BListener.java line 39, it's a completely different file, your BlockListener, generating the error.
    It appears as though you have passed an invalid number to setHealth(), which can only be 0-20.
     
  9. Offline

    beatcomet

    The problem is that health can't be lower than 0 and I'm using setHealth in the BListener.
    how can I fix it

    Here is the code
    Code:java
    1.  
    2. public class BListener extends BlockListener {
    3. Glass plugin;
    4.  
    5. BListener(Glass instnace) {
    6. plugin = instnace;
    7. }
    8.  
    9. public void onBlockBreak(BlockBreakEvent e) {
    10. Block b = e.getBlock();
    11. Player p = e.getPlayer();
    12. int mindamage = plugin.MinDamage;
    13. int maxdamage = plugin.MaxDamage;
    14. int chance = plugin.Chance;
    15. if (b.getType() == Material.GLASS) {
    16. Location loc = b.getLocation();
    17. ItemStack is = new ItemStack(Material.GLASS, 1);
    18. b.getWorld().dropItemNaturally(loc, is);
    19. int x = (int) (Math.random() * 100) + 1;
    20. Random rand = new Random();
    21. if (plugin.Baredamage == true) {
    22. if (p.getItemInHand().getTypeId() == 0) {
    23. if (x <= chance) {
    24. int y = rand.nextInt(maxdamage - mindamage + 1)
    25. + (mindamage);
    26. int Health = p.getHealth();
    27. p.setHealth(Health - y);
    28. p.sendMessage("[Server] " + ChatColor.DARK_GREEN + plugin.Message);
    29. }
    30. }
    31. }
    32. if (plugin.Baredamage == false) {
    33. if (x <= chance) {
    34. int y = rand.nextInt(maxdamage - mindamage + 1)
    35. + (mindamage);
    36. int Health = p.getHealth();
    37. p.setHealth(Health - y);
    38. p.sendMessage("[Server] " + ChatColor.DARK_GREEN + plugin.Message);
    39. }
    40. }
    41. }
    42. }
    43. }
    44.  



    After changing it from p.setHealth to p.damage it does kill me but i'm getting the error I got in the first time (already added public before the string in the main class)
     
  10. Offline

    darklust

    Do a check to see if player's health will be less than zero when y is subtracted, and in that event just set it to zero.
     
  11. Offline

    beatcomet

    Did at and now it says that there is an error in this line

    plugin.getServer().broadcastMessage("[Server] " + p.getName() + plugin.dmsg);
     
  12. Offline

    desmin88

    @beatcomet
    Change line 3 to public Glass plugin;
    Then, 5 and 6 typo, must be instance.
     
  13. Offline

    ItsHarry

    What error?
     
  14. Offline

    darklust

    Why would he make it public?
     
  15. Offline

    desmin88

  16. Offline

    darklust

    The plugin instance does not have to be public as it is passed by the constructor to an instance that need only be accessible within the class.
    I understand access control, but it doesn't appear he has a package declaration at the beginning of the file.
     
  17. Offline

    beatcomet

    There is a package declaration in the beggining of the file, I just removed it from the code I copied to this thread because I thought it's not necessary.

    As you can see I also removed the imports...
     
  18. Offline

    Haias

    Glancing through, I don't think anyone actually pointed out the problem.

    plugin is your null value. You set instance = plugin, rather than plugin = instance.

    Change line 6 of EListener.
     
Thread Status:
Not open for further replies.

Share This Page