Working with errors :/

Discussion in 'Plugin Development' started by Stackore, Apr 4, 2014.

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

    Stackore

    Hi i have a inventroy gui plugin, but i got errors :(
    It working perfectly but i wont errors.
    Here is that part that is giving me errors:
    Code:java
    1. @EventHandler
    2. public void click(InventoryClickEvent event) {
    3. Player p = (Player) event.getWhoClicked();
    4. if (event.getInventory().getTitle().equals(null)) {
    5. event.setCancelled(true);
    6. }
    7. if (event.getCurrentItem().getType().equals(Material.STONE_SWORD)) {
    8. p.performCommand("pvp");
    9. event.setCancelled(true);
    10. }
    11. if (event.getCurrentItem().getType().equals(Material.BOW)) {
    12. p.performCommand("archer");
    13. event.setCancelled(true);
    14. }
    15. else {
    16. return;
    17. }
    18. }
    19. }
    20.  

    Error:
    error.png
     
  2. Offline

    Funergy

    What is line 61?
     
  3. Offline

    Stackore

    What do you mean?
     
  4. Offline

    Monkey_Swag

    Alright an you show us line 61 of your 'Main' class please? Also, I can see why when you right click the stone sword or the bow, nothing will happen. The way you're doing it seems a bit odd. So just to make sure, does ot work when you right click the sword or the bow? If not I can easily help you, jist remember to tag me Monkey_Swag!
     
  5. Offline

    Stackore

    Oh, here:
    Code:java
    1. if (event.getCurrentItem().getType().equals(Material.STONE_SWORD)) {
     
  6. Offline

    Funergy

  7. Offline

    Stackore

    if (event.getCurrentItem().getType().equals(Material.STONE_SWORD)) {
     
  8. Offline

    Funergy

    And a inventory can never be null.
    What is your custom inventory called?
    Can you show us the full code?
     
  9. Offline

    Stackore

    Code:java
    1. public static Inventory inv = null;

    So i think the name is inv :p
     
  10. Offline

    Monkey_Swag

    Stackore
    Replace that with:
    if(event.getAction() == RIGHT_CLICK_AIR /*or right click block*/ && p.getItemInHand().getType() == Material.STONE_SWORD){
    //do the code
    }
    EDIT: ninja'd 4 lyfe
     
  11. Offline

    Funergy

    Your inventory is null?
    Show your full code. I need to see where you created your inventory
     
  12. Offline

    Stackore


    Code:java
    1. package me.kitgui;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.ChatColor;
    5. import org.bukkit.Material;
    6. import org.bukkit.block.Block;
    7. import org.bukkit.entity.Player;
    8. import org.bukkit.event.EventHandler;
    9. import org.bukkit.event.Listener;
    10. import org.bukkit.event.block.Action;
    11. import org.bukkit.event.inventory.InventoryClickEvent;
    12. import org.bukkit.event.player.PlayerInteractEvent;
    13. import org.bukkit.inventory.Inventory;
    14. import org.bukkit.inventory.ItemStack;
    15. import org.bukkit.inventory.meta.ItemMeta;
    16. import org.bukkit.plugin.java.JavaPlugin;
    17.  
    18. public class Main extends JavaPlugin implements Listener {
    19.  
    20. public static Inventory inv = null;
    21.  
    22. public void onEnable() {
    23. this.getServer().getPluginManager().registerEvents(this, this);
    24. this.getLogger().info("KitGUI = Enable");
    25. createInventoryGUI();
    26.  
    27. }
    28.  
    29. public void createInventoryGUI() {
    30. inv = Bukkit.createInventory(null, 9, "hej");
    31.  
    32. ItemStack pvp = new ItemStack(Material.STONE_SWORD, 1);
    33. ItemMeta pvpmeta = pvp.getItemMeta();
    34. pvpmeta.setDisplayName(ChatColor.AQUA + "" + ChatColor.ITALIC + "PvP");
    35. pvp.setItemMeta(pvpmeta);
    36.  
    37. ItemStack archer = new ItemStack(Material.BOW, 1);
    38. ItemMeta archermeta = archer.getItemMeta();
    39. archermeta.setDisplayName(ChatColor.AQUA + "" + ChatColor.ITALIC + "Archer");
    40. archer.setItemMeta(archermeta);
    41.  
    42. inv.setItem(0, pvp);
    43. inv.setItem(1, archer);
    44. }
    45.  
    46. @EventHandler
    47. public void interact(PlayerInteractEvent event) {
    48. Player p = event.getPlayer();
    49. if (p.getItemInHand().getType() == Material.PAPER) {
    50. event.setCancelled(true);
    51. p.openInventory(inv);
    52. }
    53. }
    54.  
    55. @EventHandler
    56. public void click(InventoryClickEvent event) {
    57. Player p = (Player) event.getWhoClicked();
    58. if (event.getInventory().getTitle().equals(null)) {
    59. event.setCancelled(true);
    60. }
    61. if (event.getCurrentItem().getType().equals(Material.STONE_SWORD)) {
    62. p.performCommand("pvp");
    63. event.setCancelled(true);
    64. }
    65. if (event.getCurrentItem().getType().equals(Material.BOW)) {
    66. p.performCommand("archer");
    67. event.setCancelled(true);
    68. }
    69. else {
    70. return;
    71. }
    72. }
    73. }
    74.  



    Full code

    Hmm i get error on
    Code:java
    1. == RIGHT_CLICK_AIR


    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 7, 2016
  13. Stackore the
    Code:java
    1. event.getCurrentItem()
    can be null, so if you try to do something with it, in your case get the Type, it will throw an NPE.
    The way to solve this, is as follows:
    Code:java
    1. if (event.getCurrentItem() != null && event.getCurrentItem().getType == Material.BOW) {
    2. //do stuff
    3. }

    and, don't use .equals() for enums, but use the == operator.
     
  14. Offline

    Funergy

    This should work
    Code:
     @EventHandler
        public void click(InventoryClickEvent event) {
            Player p = (Player) event.getWhoClicked();
            if (event.getInventory().getTitle().equals("hej")) {
        if (event.getCurrentItem().getType().equals(Material.STONE_SWORD)) {
        p.performCommand("pvp");
        event.setCancelled(true);
        }
        if (event.getCurrentItem().getType().equals(Material.BOW)) {
            p.performCommand("archer");
        event.setCancelled(true);
        }
        }
        }
    You can do event.getCurrentItem().getType().equals(Material.STONE_SWORD);
    It has never gave me an error

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

    Stackore

    When i choose a kit and then right or left click with the bow or sword the error appears!
     
  16. Offline

    Funergy

    did you use my code?
    and if yes send me the error
     
  17. Offline

    Stackore

    Now it's working withouts errors! Thanks alot :D
     
  18. Offline

    Funergy

    With my code XD
     
  19. Offline

    Stackore

    Yes! And i just got a new error -.-
    Can you please try to fix it :)
    Code:
    Code:java
    1. @EventHandler
    2. public void TP(EntityDamageByEntityEvent e) {
    3. final Player p = (Player) e.getEntity();
    4. final Player d = (Player) e.getDamager();
    5. if (d instanceof Player)
    6. {
    7. if (Enderman.contains(d.getName()))
    8. {
    9. if (d.getItemInHand().getType() == Material.EYE_OF_ENDER)
    10. {
    11. if (!cooldown.contains(d))
    12. {
    13. d.teleport(p.getLocation());
    14. d.getWorld().playSound(d.getLocation(), Sound.ENDERDRAGON_HIT, 1, 1);
    15. d.getWorld().playEffect(d.getLocation(), Effect.ENDER_SIGNAL, 1, 1);
    16. d.sendMessage(ChatColor.GREEN + "" + ChatColor.ITALIC + "Woosh");
    17. p.sendMessage(ChatColor.RED + "" + ChatColor.ITALIC + "En Enderman har slagit dig!");
    18. cooldown.add(d);
    19. c.setList(cooldown);
    20. c.setPlayer(d);
    21. new Thread(c).start();


    Error:
    error.png

    I am sorry i'm just a begginer xD

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

    Funergy

    What is the line where it gives the error?
     
  21. Offline

    Stackore

    120 i think
     
  22. Offline

    Funergy

    What is line 120?
     
  23. Offline

    Stackore

    When i hit a mob with another item than eye of ender it gives error. That code is for players usually
    And it works great when i hit a player

    final Player p = (Player) e.getEntity();

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

    Funergy

    why do you set it to final?

    You don't need to cast it to a player
    final Player p =(Player) e.getEntity(); do
    Code:
    Player p = event.getEntity();


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

    Stackore

    Yea idk why i casted it into a player :p but i get errors if i don't cast it to a player (errors in eclpise)
     
  26. Offline

    Funergy

    HAHA an Entity is not a player
    I was so stupid
    Use
    Code:
    Entity d = event.getEntity();
     
  27. Offline

    Stackore

    But i want it to be a player
     
  28. Offline

    Funergy



    this are the things you need to use
    Code:
    Entity p = e.getEntity();
    Player d = e.getDamager();
    just try it it should work

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

    Stackore

    Player d = (Player) e.getDamager(); if i don't have the cast i got errors in eclipse

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

    Funergy

    you can try it on your bukkit server but if it doesn't work use:
    Code:
    Entity d = e.getDamager(); 
    because you are using EntityDamageByEntityEvent

    This is what your event should look like
    Code:
    @EventHandler
        public void TP(EntityDamageByEntityEvent e) {
            Entity p = e.getEntity();
            Entity d = e.getDamager();
            if (d instanceof Player)
            {
                if (Enderman.contains(d.getName()))
                {
                    if (d.getItemInHand().getType() == Material.EYE_OF_ENDER)
                    {
                            if (!cooldown.contains(d))
                            {
                d.teleport(p.getLocation());
                d.getWorld().playSound(d.getLocation(), Sound.ENDERDRAGON_HIT, 1, 1);
                d.getWorld().playEffect(d.getLocation(), Effect.ENDER_SIGNAL, 1, 1);
                d.sendMessage(ChatColor.GREEN + "" + ChatColor.ITALIC + "Woosh");
                p.sendMessage(ChatColor.RED + "" + ChatColor.ITALIC + "En Enderman har slagit dig!");
                cooldown.add(d);
                c.setList(cooldown);
                c.setPlayer(d);
                new Thread(c).start();
    }
    
    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 7, 2016
Thread Status:
Not open for further replies.

Share This Page