Solved Getting player's armor

Discussion in 'Plugin Development' started by Kerooker, Jul 3, 2014.

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

    Kerooker

    Last edited by a moderator: Jun 9, 2016
  2. Offline

    mythbusterma

    You'd have to adjust for each piece of armor and effects, as is shown in that thread, there's no real other way to do it.
     
  3. Offline

    Kerooker

    Trying to use the thread's tutorial, I get big errors if the player is missing one piece of armor. For instance, if the player has full diamond armor, it's ok, but if he's not wearing his helmet, the calculation fails.

    I get the error
    Code:
    [20:46:25] [Server thread/ERROR]: Could not pass event EntityDamageByEntityEvent to Minecraftando v1.0
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:320) ~[spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
        at org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredListener.java:30) ~[spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:487) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:472) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
        at org.bukkit.craftbukkit.v1_7_R1.event.CraftEventFactory.callEvent(CraftEventFactory.java:99) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
        at org.bukkit.craftbukkit.v1_7_R1.event.CraftEventFactory.callEntityDamageEvent(CraftEventFactory.java:403) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
        at org.bukkit.craftbukkit.v1_7_R1.event.CraftEventFactory.handleEntityDamageEvent(CraftEventFactory.java:431) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
        at net.minecraft.server.v1_7_R1.EntityLiving.damageEntity(EntityLiving.java:663) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
        at net.minecraft.server.v1_7_R1.EntityHuman.damageEntity(EntityHuman.java:751) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
        at net.minecraft.server.v1_7_R1.EntityPlayer.damageEntity(EntityPlayer.java:461) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
        at net.minecraft.server.v1_7_R1.EntityHuman.attack(EntityHuman.java:923) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
        at net.minecraft.server.v1_7_R1.PlayerConnection.a(PlayerConnection.java:1144) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
        at pgDev.bukkit.DisguiseCraft.listeners.protocol.DCPacketInListener.a(DCPacketInListener.java:70) [DisguiseCraft-5.1.jar:?]
        at net.minecraft.server.v1_7_R1.PacketPlayInUseEntity.a(SourceFile:55) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
        at net.minecraft.server.v1_7_R1.PacketPlayInUseEntity.handle(SourceFile:10) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
        at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:147) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
        at net.minecraft.server.v1_7_R1.ServerConnection.c(ServerConnection.java:77) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
        at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:700) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
        at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:273) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
        at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:562) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
        at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java:469) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
        at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:617) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
    Caused by: java.lang.NullPointerException
        at me.kerooker.Minecraftando.getDamageReduced(Minecraftando.java:54) ~[?:?]
        at me.kerooker.PlayerListenerb.onAttackM(PlayerListenerb.java:299) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_05]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_05]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_05]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_05]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:318) ~[spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
        ... 22 more
    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 9, 2016
  4. Offline

    mythbusterma

    Kerooker
    Because the code in there assumes the player is wearing each piece of armor, add null checks before each statement to make sure they actually are wearing the piece of armor it's looking for.
     
  5. Offline

    Kerooker

    mythbusterma
    Like this?
    Code:java
    1. if(helmet.getType() == Material.LEATHER_HELMET)red = red + 0.04;
    2. else if(helmet.getType() == Material.GOLD_HELMET)red = red + 0.08;
    3. else if(helmet.getType() == Material.CHAINMAIL_HELMET)red = red + 0.08;
    4. else if(helmet.getType() == Material.IRON_HELMET)red = red + 0.08;
    5. else if(helmet.getType() == Material.DIAMOND_HELMET)red = red + 0.12;
    6. else if(helmet.getType().equals(null) || helmet.getTypeId() == 0 || helmet.getType().equals(new ItemStack(Material.AIR)) )red = red + 0;
    7. //


    I tried it too, and it didn't work out!

    When should I make that check?

    Code:java
    1. public double getDamageReduced(Player player)
    2. {
    3. ItemStack[] armaduras = player.getInventory().getArmorContents();
    4. if(armaduras[0].getType() == Material.LEATHER_HELMET)red = red + 0.04;
    5. else if(armaduras[0].getType() == Material.GOLD_HELMET)red = red + 0.08;
    6. else if(armaduras[0].getType() == Material.CHAINMAIL_HELMET)red = red + 0.08;
    7. else if(armaduras[0].getType() == Material.IRON_HELMET)red = red + 0.08;
    8. else if(armaduras[0].getType() == Material.DIAMOND_HELMET)red = red + 0.12;
    9. // else if(helmet.equals(null) || helmet.equals(new ItemStack(Material.AIR)) )red = red + 0;
    10. //
    11. if(armaduras[3].getType() == Material.LEATHER_BOOTS)red = red + 0.04;
    12. else if(armaduras[3].getType() == Material.GOLD_BOOTS)red = red + 0.04;
    13. else if(armaduras[3].getType() == Material.CHAINMAIL_BOOTS)red = red + 0.04;
    14. else if(armaduras[3].getType() == Material.IRON_BOOTS)red = red + 0.08;
    15. else if(armaduras[3].getType() == Material.DIAMOND_BOOTS)red = red + 0.12;
    16. //
    17. if(armaduras[2].getType() == Material.LEATHER_LEGGINGS)red = red + 0.08;
    18. else if(armaduras[2].getType() == Material.GOLD_LEGGINGS)red = red + 0.12;
    19. else if(armaduras[2].getType() == Material.CHAINMAIL_LEGGINGS)red = red + 0.16;
    20. else if(armaduras[2].getType() == Material.IRON_LEGGINGS)red = red + 0.20;
    21. else if(armaduras[2].getType() == Material.DIAMOND_LEGGINGS)red = red + 0.24;
    22. //
    23. if(armaduras[1].getType() == Material.LEATHER_CHESTPLATE)red = red + 0.12;
    24. else if(armaduras[1].getType() == Material.GOLD_CHESTPLATE)red = red + 0.20;
    25. else if(armaduras[1].getType() == Material.CHAINMAIL_CHESTPLATE)red = red + 0.20;
    26. else if(armaduras[1].getType() == Material.IRON_CHESTPLATE)red = red + 0.24;
    27. else if(armaduras[1].getType() == Material.DIAMOND_CHESTPLATE)red = red + 0.32;
    28. return red;
    29. }


    This also returns 0.0 ...

    Found a sollution...

    Code:java
    1. public double getDamageReduced(Player player)
    2. {
    3. org.bukkit.inventory.PlayerInventory inv = player.getInventory();
    4. ItemStack helmet = null;
    5. ItemStack boots = null;
    6. ItemStack chest = null;
    7. ItemStack pants = null;
    8.  
    9. if(inv.getBoots() != null){boots = inv.getBoots();}
    10. if(inv.getBoots() == null){boots = new ItemStack(Material.LEATHER_BOOTS);}
    11. if (inv.getHelmet() != null){helmet = inv.getHelmet(); }
    12. if(inv.getHelmet() == null){helmet = new ItemStack(Material.LEATHER_HELMET);}
    13. if (inv.getChestplate() != null){chest = inv.getChestplate();}
    14. if(inv.getChestplate() == null){chest = new ItemStack(Material.LEATHER_CHESTPLATE);}
    15. if (inv.getLeggings() != null){pants = inv.getLeggings();}
    16. if(inv.getLeggings() == null){pants = new ItemStack(Material.LEATHER_LEGGINGS);}
    17. double red = 0.0;
    18. if (helmet.getType() == null || helmet.getType() == Material.AIR)red = red + 0.0;
    19. else if(helmet != null && helmet.getType() == Material.LEATHER_HELMET)red = red + 0.04;
    20. else if(helmet != null && helmet.getType() == Material.GOLD_HELMET)red = red + 0.08;
    21. else if(helmet != null && helmet.getType() == Material.CHAINMAIL_HELMET)red = red + 0.08;
    22. else if(helmet != null && helmet.getType() == Material.IRON_HELMET)red = red + 0.08;
    23. else if(helmet != null && helmet.getType() == Material.DIAMOND_HELMET)red = red + 0.12;
    24. //
    25. if (boots.getType() == null || boots.getType() == Material.AIR)red = red + 0;
    26. else if(boots != null && boots.getType() == Material.LEATHER_BOOTS)red = red + 0.04;
    27. else if(boots != null && boots.getType() == Material.GOLD_BOOTS)red = red + 0.04;
    28. else if(boots != null && boots.getType() == Material.CHAINMAIL_BOOTS)red = red + 0.04;
    29. else if(boots != null && boots.getType() == Material.IRON_BOOTS)red = red + 0.08;
    30. else if(boots != null && boots.getType() == Material.DIAMOND_BOOTS)red = red + 0.12;
    31. //
    32. if (pants.getType() == null || pants.getType() == Material.AIR)red = red + 0;
    33. else if(pants != null && pants.getType() == Material.LEATHER_LEGGINGS)red = red + 0.08;
    34. else if(pants != null && pants.getType() == Material.GOLD_LEGGINGS)red = red + 0.12;
    35. else if(pants != null && pants.getType() == Material.CHAINMAIL_LEGGINGS)red = red + 0.16;
    36. else if(pants != null && pants.getType() == Material.IRON_LEGGINGS)red = red + 0.20;
    37. else if(pants != null && pants.getType() == Material.DIAMOND_LEGGINGS)red = red + 0.24;
    38. //
    39. if (chest.getType() == null || chest.getType() == Material.AIR)red = red + 0;
    40. else if(chest != null && chest.getType() == Material.LEATHER_CHESTPLATE)red = red + 0.12;
    41. else if(chest != null && chest.getType() == Material.GOLD_CHESTPLATE)red = red + 0.20;
    42. else if(chest != null && chest.getType() == Material.CHAINMAIL_CHESTPLATE)red = red + 0.20;
    43. else if(chest != null && chest.getType() == Material.IRON_CHESTPLATE)red = red + 0.24;
    44. else if(chest != null && chest.getType() == Material.DIAMOND_CHESTPLATE)red = red + 0.32;
    45. return red;
    46. }


    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 9, 2016
Thread Status:
Not open for further replies.

Share This Page