Space

Discussion in 'Plugin Development' started by XgXXSnipz, Oct 30, 2014.

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

    XgXXSnipz

    Hey everyone, im trying to make a plugin where if you dont have a glass helmet on it will take 1 heart away everytime well I was SURE my code would work but it doesnt, instead it generates a whole stack trace, the code does work just not the way I want it
    Code:java
    1. BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
    2. scheduler.scheduleSyncRepeatingTask(this, new Runnable() {
    3. @SuppressWarnings("deprecation")
    4. @Override
    5. public void run() {
    6. for(Player p : Bukkit.getServer().getOnlinePlayers()){
    7. if(!(p.getInventory().getHelmet().getType() == Material.GLASS)){
    8.  
    9.  
    10. p.setHealth( -1 );
    11.  
    12. }
    13.  
    14.  
    15. }
    16.  
    17.  
    18. }
    19. }, 0L, 20L);
    20. }
    21.  
    22.  
    23. }
    24.  
     
  2. Offline

    OffLuffy

    You could provide the stack trace to help us sort out where the error is. At least the error message and line number

    But not sure if you can set a player's health to a negative. You may instead do
    Code:java
    1. if (p.getHealth() <= 1) p.setHealth(0);
    2. p.setHealth(p.getHealth()-1);


    Also, one heart is 2 health, 1 is half a heart.
     
  3. Offline

    XgXXSnipz

    OffLuffy stack trace:
    Code:
    [SpaceAtmosphere] Task #2 for SpaceAtmosphere v1.0 generated an exception
    java.lang.NullPointerException
        at me.XgXxSnipz.SpaceAtmosphere.Space$1.run(Space.java:22) ~[?:?]
        at org.bukkit.craftbukkit.v1_7_R3.scheduler.CraftTask.run(CraftTask.java:53) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at org.bukkit.craftbukkit.v1_7_R3.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:345) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.v(MinecraftServer.java:600) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at net.minecraft.server.v1_7_R3.DedicatedServer.v(DedicatedServer.java:260) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.u(MinecraftServer.java:558) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java:469) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:628) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
    [19:23:26] [Server thread/WARN]: [SpaceAtmosphere] Task #2 for SpaceAtmosphere v1.0 generated an exception
    java.lang.NullPointerException
        at me.XgXxSnipz.SpaceAtmosphere.Space$1.run(Space.java:22) ~[?:?]
        at org.bukkit.craftbukkit.v1_7_R3.scheduler.CraftTask.run(CraftTask.java:53) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at org.bukkit.craftbukkit.v1_7_R3.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:345) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.v(MinecraftServer.java:600) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at net.minecraft.server.v1_7_R3.DedicatedServer.v(DedicatedServer.java:260) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.u(MinecraftServer.java:558) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java:469) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:628) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
    [19:23:27] [Server thread/WARN]: 
     
  4. Offline

    ChipDev

    test if hat is not null.
     
  5. Offline

    XgXXSnipz

    ChipDev so like?
    Code:java
    1. if(p.getInventory().getHelmet().getType() != Material.GLASS){
     
  6. Offline

    OffLuffy

    As ChipDev mentioned, make sure the getHelmet() method isn't returning null. Also, when comparing objects, try to always use .equals() unless comparing primitives.
    Code:java
    1. if (p.getInventory().getHelmet() != null && p.getInventory.getHelmet().getType().equals(Material.GLASS)) {}
     
  7. Offline

    ChipDev

    if(p.getInventory().getHelmet() != null) {
     
  8. Offline

    XgXXSnipz

    ChipDev but I wanna make sure its only glass on his head, doing != null would make it so it would be ok if anything is on his head
     
  9. Offline

    OffLuffy

    Use AND operator to check if it isn't null, AND to check if it's type is glass, as I put in my answer above (edited). You MUST check if it isn't null FIRST, then if it's glass, otherwise the glass check will throw the error.
     
    ChipDev likes this.
  10. Offline

    ChipDev

    Code:java
    1. if(player.getInventory().getHelmet() != null) {
    2. if(player.getInventory().getHelmet() == Material.GLASS) {
     
  11. Offline

    XgXXSnipz

    OffLuffy ChipDev ok got it somewhat.. I still need to make it not do damage to me, so far its doing damage to me no matter what

    EDIT: its fixed

    ChipDev OffLuffy ok now everything is fine! now how can I play a really high beeping noise, and how can i make it deduct half a heart every half second they dont have the glass on?

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 14, 2016
  12. Offline

    OffLuffy

    Is that not the code you already have in place? Short of the sound at least. The sound bit depends heavily on what sounds are available, but I believe the Player object has a playSound() method.
     
  13. Offline

    XgXXSnipz

    OffLuffy ok ill work on sound, sadly it still doesnt seem to matter what they have on
    Code:java
    1. if(p.getInventory().getHelmet() != null) {
    2.  
    3. if(p.getInventory().getHelmet().getType() == Material.GLASS) {
    4.  
    5.  


    EDIT: CODe works, and sound just help with health now plz
     
  14. Offline

    OffLuffy

    Can you repost the class with the code you have now? Can't tell much from that. You can still make that shorter by using:
    Code:java
    1. ItemStack helmet = p.getInventory().getHelmet();
    2. if (helmet != null && helmet.getType().equals(Material.GLASS)) { /* do something */ }


    The reason I push for the .equals() method is because when developers write class definitions, they often (and it's good practice to) @Override the equals() and hashCode() methods to reflect a more appropriate equaltiy comparison method. If it's not overriden, it still acts much like the == operator. The '==' operator should then only be used for primitive data types (int, long, double, short, char, those sorts). Even String has an .equals() and .equalsIgnoreCase() which is preferable to '=='
     
  15. Offline

    Gnat008

    OffLuffy
    Actually, using '==' with enums is fine, and I think even recommended.
     
  16. Offline

    OffLuffy

    Yeah, I think it's fine since they're always going to be the same object, not being something that can be instantiated or re-assigned. Although it feels cleaner to use .equals(), and somewhat habitual.
     
  17. Offline

    fireblast709

    OffLuffy the only thing you are adding with .equals() on enums, is the chance of a NullPointerException :p. The method is final in Enum, so you can't override it. Moreover, all it does is other == this.
     
    OffLuffy likes this.
  18. Offline

    OffLuffy

    Fair enough. Can't think of how it'd throw an NPE, but I'll take your word for it XD
     
  19. Offline

    TheCodingCat

    SO OFFENDED FROM THIS POST :O!
    Your not using BukkitRunnables O_O
     
  20. Offline

    Dragonphase

    fireblast709 likes this.
  21. Offline

    XgXXSnipz

    OffLuffy this is the code I have:
    Code:java
    1. if(p.getInventory().getHelmet() != null && p.getInventory().getHelmet().getType() == Material.GLASS){
    2.  
    3.  
    4. if(p.getInventory().getHelmet().getType() == Material.GLASS) {
    5.  


    JUST SOMEONE PLEASE TELL ME HOW TO DEDUCT 1 HEART
     
  22. Offline

    fireblast709

    XgXXSnipz set their health to their current health - 1.
     
  23. Offline

    drpk

    XgXXSnipz 1 heart is 2 half hearts, so deduct 2 from their health.
     
  24. Offline

    XgXXSnipz

  25. Offline

    WesJD

    XgXXSnipz

    Get their health, then remove 2.
     
  26. Offline

    XgXXSnipz

    WesJD this is wat I have
    Code:java
    1. p.getMaxHealth(p.setHealth(- 1));
    2.  
    I get an error on
    Code:java
    1. p.getMaxHealth()

    Somthing about ambiguous for the player
     
  27. Offline

    WesJD

    XgXXSnipz
    Just use
    Code:java
    1. p.setHealth(p.getHealth()-2);
     
  28. Offline

    XgXXSnipz

    WesJD The method getHealth() is ambiguous for the type Player
     
  29. Offline

    WesJD

    XgXXSnipz
    How are you getting the player?
     
  30. Offline

    XgXXSnipz

    WesJD I am calling it by using
    Code:java
    1. for(Player p : Bukkit.getServer().getOnlinePlayers()){
    2.  


    simply because IDK how to call it when using a loop
    Code:java
    1. @Override
    2. public void run() {
    3. for(Player p : Bukkit.getServer().getOnlinePlayers()){
    4.  
    5.  
    6. if(p.getInventory().getHelmet() != null && p.getInventory().getHelmet().getType() == Material.GLASS){
    7.  
    8.  
    9. if(p.getInventory().getHelmet().getType() == Material.GLASS) {
    10.  
    11.  
    12.  
    13. }
     
Thread Status:
Not open for further replies.

Share This Page