Help Find A Bug

Discussion in 'Plugin Development' started by zakarls, Jun 4, 2014.

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

    zakarls

    So I've coded a gui, yet it does not seem to work. Can anyone help me with finding the problem.
    (Note: I'm not 100% sure that the problem is where I create the inventory. It could be somewhere else)

    Main Class:
    Code:java
    1. package me.zakarls.GUI;
    2.  
    3. import java.util.logging.Logger;
    4.  
    5.  
    6. import org.bukkit.command.Command;
    7. import org.bukkit.command.CommandSender;
    8. import org.bukkit.entity.Player;
    9. import org.bukkit.plugin.PluginDescriptionFile;
    10. import org.bukkit.plugin.PluginManager;
    11. import org.bukkit.plugin.java.JavaPlugin;
    12.  
    13. public class GUI extends JavaPlugin {
    14. public final Logger logger = Logger.getLogger("Minecraft");
    15.  
    16. @Override
    17. public void onDisable() {
    18. PluginDescriptionFile pdfFile = this.getDescription();
    19. this.logger.info(pdfFile.getName() + " Has Been Disabled!");
    20. }
    21.  
    22. @Override
    23. public void onEnable() {
    24. PluginDescriptionFile pdfFile = this.getDescription();
    25. this.logger.info(pdfFile.getName() + " Version " + pdfFile.getVersion()
    26. + " Has Been Enabled!");
    27. PluginManager pm = getServer().getPluginManager();
    28. pm.registerEvents(this.ml, this);
    29. }
    30. public final MyListener ml = new MyListener(this);
    31.  
    32.  
    33. public boolean onCommand(CommandSender sender, Command cmd,
    34. String commandLabel, String[] args) {
    35. Player player = (Player) sender;
    36. if(commandLabel.equalsIgnoreCase("staff")){
    37. ml.show(player);
    38. }
    39.  
    40.  
    41.  
    42.  
    43. return false;
    44. }
    45. }

    Listener/Inventory Setup Class:
    Code:java
    1. package me.zakarls.GUI;
    2.  
    3. import java.util.Arrays;
    4. import java.util.List;
    5.  
    6. import org.bukkit.Bukkit;
    7. import org.bukkit.Material;
    8. import org.bukkit.entity.Player;
    9. import org.bukkit.event.EventHandler;
    10. import org.bukkit.event.Listener;
    11. import org.bukkit.event.inventory.InventoryClickEvent;
    12. import org.bukkit.inventory.Inventory;
    13. import org.bukkit.inventory.ItemStack;
    14. import org.bukkit.inventory.meta.ItemMeta;
    15. import org.bukkit.plugin.Plugin;
    16.  
    17. public class MyListener implements Listener{
    18.  
    19.  
    20. private Inventory inv;
    21. private ItemStack a, b, c, d, e, f, g, h, i;
    22.  
    23. public MyListener(Plugin p){
    24. inv = Bukkit.getServer().createInventory(null, 9, "Staff");
    25.  
    26. a = createItem("ZakayPvP", Arrays.asList("Owner"), Material.REDSTONE);
    27. b = createItem("QuinayPvP", Arrays.asList("Owner"), Material.NETHER_BRICK_ITEM);
    28. c = createItem("aiyera", Arrays.asList("Head-Admin"), Material.CAKE);
    29. d = createItem("outpost89not", Arrays.asList("Head-Mod"), Material.SLIME_BALL);
    30. e = createItem("CCoesBruins", Arrays.asList("Helper"), Material.COMPASS);
    31. f = createItem("SBGamers4", Arrays.asList("Helper"), Material.BEDROCK);
    32. g = createItem("xX0Epic_Life0Xx", Arrays.asList("Helper"), Material.DIAMOND_SWORD);
    33. h = createItem("Saints980", Arrays.asList("Helper"), Material.SPONGE);
    34. i = createItem("SandersDoesMC", Arrays.asList("Helper"), Material.COOKED_CHICKEN);
    35.  
    36.  
    37. inv.setItem(1, a);
    38. inv.setItem(2, b);
    39. inv.setItem(3, c);
    40. inv.setItem(4, d);
    41. inv.setItem(5, e);
    42. inv.setItem(6, f);
    43. inv.setItem(7, g);
    44. inv.setItem(8, h);
    45. inv.setItem(9, i);
    46.  
    47. }
    48.  
    49. private ItemStack createItem(String name, List<String> lore, Material material){
    50. ItemStack is = new ItemStack(material, 1);
    51. ItemMeta im = i.getItemMeta();
    52. im.setDisplayName(name);
    53. im.setLore(lore);
    54. is.setItemMeta(im);
    55. ///////////////////////////////////////////////////
    56. /*ItemStack is = new ItemStack(Material.SKULL_ITEM, 1, (short) 3);
    57.   SkullMeta im = (SkullMeta) is.getItemMeta();
    58.   im.setOwner(name);
    59.   im.setDisplayName(name);
    60.   im.setLore(lore);
    61.   is.setItemMeta(im);*/
    62. /////////////////////////////////////////////
    63. /*ItemStack i = new Wool(dc).toItemStack(1);
    64.   ItemMeta im = i.getItemMeta();
    65.   im.setDisplayName(name);
    66.   im.setLore(Arrays.asList("Set your gamemode", "to " + name.toLowerCase() + " mode"));
    67.   i.setItemMeta(im);*/
    68. return is;
    69. }
    70. public void show(Player p){
    71. p.openInventory(inv);
    72. }
    73.  
    74. @EventHandler
    75. public void onInventoryClick(InventoryClickEvent event){
    76. if(event.getInventory().getName().equalsIgnoreCase(inv.getName())){
    77. event.setCancelled(true);
    78. };
    79. /*if(event.getCurrentItem().getItemMeta().getDisplayName().contains("Survival")){
    80.   event.setCancelled(true);
    81.   event.getWhoClicked().setGameMode(GameMode.SURVIVAL);
    82.   }
    83.   if(event.getCurrentItem().getItemMeta().getDisplayName().contains("Creative")){
    84.   event.setCancelled(true);
    85.   event.getWhoClicked().setGameMode(GameMode.CREATIVE);
    86.   }
    87.   if(event.getCurrentItem().getItemMeta().getDisplayName().contains("Adventure")){
    88.   event.setCancelled(true);
    89.   event.getWhoClicked().setGameMode(GameMode.ADVENTURE);
    90.   }*/
    91. }
    92. }
    93.  

    Thanks for any help with this issue.
     
  2. Offline

    Gater12

    zakarls
    What do you mean "it doesn't work"? Does it throw an error? Does it not open? Is it functioning a way that you don't want?


    Also Java counts 0 as the starting index, so the first slot of the inventory would be 0.
     
  3. Offline

    zakarls

    Gater12
    It throws an error on startup.
     
  4. Offline

    Gater12

    zakarls
    I suspect it is throwing an ArrayIndexOutOfBoundsException.

    Change the slot numbers base on 0 as the first slot of the inventory.
     
  5. Offline

    NerdsWBNerds


    You'd be correct.
     
  6. Offline

    fireblast709

    zakarls
    • Don't use Logger.getLogger("Minecraft"), use JavaPlugin#getLogger()
    • Check if sender instanceof Player before casting to Player
    • Indices generally (as in: practically all programming languages) start at 0, not 1
     
Thread Status:
Not open for further replies.

Share This Page