Custom Inventory Help

Discussion in 'Plugin Development' started by Axanite, Jan 2, 2014.

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

    Axanite

    I've been trying to make a custom inventory plugin that lets admins change certain aspects of the server through a custom inventory menu which can be opened by typing /admin in chat. Eclipse nor the console is giving me any errors apart from saying that the plugin could "not be found" in the plugins folder even though it is there (I've checked countless times). Any help is appreciated!

    Code:
    package me.rf2minecraft.AdminControls;
     
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.DyeColor;
    import org.bukkit.Material;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.material.Wool;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public final class AdminControls extends JavaPlugin implements Listener {
        private Inventory main;
        private Inventory timeChange;
        public ItemStack dayItem, nightItem;
     
        public AdminControls() {
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
           
            main = Bukkit.getServer().createInventory(null, 9, "Admin Controls");
            ItemMeta tim = main.getItem(2).getItemMeta();
            ItemMeta wim = main.getItem(6).getItemMeta();
            tim.setDisplayName(ChatColor.DARK_RED + "Change Time");
            wim.setDisplayName(ChatColor.DARK_RED + "Change Weather");
            main.getItem(2).setItemMeta(tim);
            main.getItem(6).setItemMeta(wim);
            main.setItem(2, new ItemStack(Material.WATCH, 1));
            main.setItem(6, new ItemStack(Material.BLAZE_ROD, 1));
           
            timeChange = Bukkit.getServer().createInventory(null, 9, "Admin Controls");
            dayItem = createItem(DyeColor.GREEN, ChatColor.DARK_RED + "Day");
            nightItem = createItem(DyeColor.BLACK, ChatColor.DARK_RED + "Night");
            timeChange.setItem(2, dayItem); // Sets item in slot 2 to green wool
            timeChange.setItem(6, nightItem); // Sets item in slot 6 to black wool
        }
       
        private ItemStack createItem(DyeColor dc, String name) {
            ItemStack i = new Wool(dc).toItemStack(1);
            ItemMeta im = i.getItemMeta();
            im.setDisplayName(name);
            i.setItemMeta(im);
            return i;
        }
       
        @EventHandler
        public void onInventoryClick(InventoryClickEvent e) {
            if(!e.getInventory().getName().equalsIgnoreCase(main.getName())) return;
            if(e.getCurrentItem().getItemMeta() == null) return;
            if(e.getCurrentItem().getItemMeta().getDisplayName().contains("Change Time")) {
                e.setCancelled(true);
                e.getWhoClicked().closeInventory();
                e.getWhoClicked().openInventory(timeChange);
            }
        }
       
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if(cmd.getName().equalsIgnoreCase("admin")) {
                Player p = (Player) sender;
                p.openInventory(main);
            }
            return true;
        }
    }
    
     
  2. Offline

    Forseth11

    rf2minecraft I'm sorry to tell you, but I think you forgot the onEnable method.
     
  3. Offline

    Callum.K

    Code:java
    1. @Override
    2. public void onDisable() {
    3.  
    4. }
    5.  
    6. @Override
    7. public void onEnable() {
    8.  
    9. }

    May be it
    EDIT: @Forseth11 beat me to it
     
  4. Offline

    Axanite

    I added that but its still giving me the error. :/
     
  5. Offline

    Forseth11

    rf2minecraft Send us you plugin.yml

    EDIT: Changed use to us.
     
  6. Offline

    Axanite



    Code:
    name: AdminControls
    version: 1.0
    main: me.rf2minecraft.AdminControls.AdminControls
     
    commands:
      admin:
      description: Opens controls.
     
  7. Offline

    Forseth11

    rf2minecraft Can we see the output from the console and the new code that was changed.
     
  8. Offline

    Axanite


    All console is giving me is:
    18:52:17 [SEVERE] Could not load 'plugins\AdminControls.jar' in folder 'plugins'
    And heres the updated code:
    Code:
    package me.rf2minecraft.AdminControls;
     
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.DyeColor;
    import org.bukkit.Material;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.material.Wool;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public final class AdminControls extends JavaPlugin implements Listener {
        public static Inventory main;
        public static Inventory timeChange;
        public ItemStack dayItem, nightItem;
     
     
        public void onEnable() {
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
        }
     
        public AdminControls() { 
            main = Bukkit.getServer().createInventory(null, 9, "Admin Controls");
            ItemMeta tim = main.getItem(2).getItemMeta();
            ItemMeta wim = main.getItem(6).getItemMeta();
            tim.setDisplayName(ChatColor.DARK_RED + "Change Time");
            wim.setDisplayName(ChatColor.DARK_RED + "Change Weather");
            main.getItem(2).setItemMeta(tim);
            main.getItem(6).setItemMeta(wim);
            main.setItem(2, new ItemStack(Material.WATCH, 1));
            main.setItem(6, new ItemStack(Material.BLAZE_ROD, 1));
         
            timeChange = Bukkit.getServer().createInventory(null, 9, "Admin Controls");
            dayItem = createItem(DyeColor.GREEN, ChatColor.DARK_RED + "Day");
            nightItem = createItem(DyeColor.BLACK, ChatColor.DARK_RED + "Night");
            timeChange.setItem(2, dayItem); // Sets item in slot 2 to green wool
            timeChange.setItem(6, nightItem); // Sets item in slot 6 to black wool
        }
     
        private ItemStack createItem(DyeColor dc, String name) {
            ItemStack i = new Wool(dc).toItemStack(1);
            ItemMeta im = i.getItemMeta();
            im.setDisplayName(name);
            i.setItemMeta(im);
            return i;
        }
     
        @EventHandler
        public void onInventoryClick(InventoryClickEvent e) {
            if(!e.getInventory().getName().equalsIgnoreCase(main.getName())) return;
            if(e.getCurrentItem().getItemMeta() == null) return;
            if(e.getCurrentItem().getItemMeta().getDisplayName().contains("Change Time")) {
                e.setCancelled(true);
                e.getWhoClicked().closeInventory();
                e.getWhoClicked().openInventory(timeChange);
            }
        }
     
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if(cmd.getName().equalsIgnoreCase("admin")) {
                Player p = (Player) sender;
                p.openInventory(main);
            }
            return true;
        }
    }
    
    all thats been changed is that a onEnable has been added and the events register was moved into there. Also the inventories have been changed the public static instead of private.
     
  9. Offline

    WafflesYumyum

    I did notice in your plugin.yml that you are missing an indentation. It should be like this, unless that's just a formatting issue on the forums:

    Code:
    name: AdminControls
    version: 1.0
    main: me.rf2minecraft.AdminControls.AdminControls
     
    commands:
      admin:
        description: Opens controls.
     
  10. Offline

    Axanite


    Nope. I updated it and it still gives error. :/
     
  11. Offline

    Forseth11

    rf2minecraft check the build path for your other plugins, or temporary remove other plugins.
    If that does not work give us a screen shot of you exporting it.

    Edit: Also try removing 'final' for the class. I don't know if that can be it, but I know that I never have mine set up that way.
     
  12. Offline

    xTrollxDudex

    rf2minecraft
    What is the full stacktrace? Also, your plugin is not supposed to have a constructor, you can just have initializer braces or a method that you call in the onEnable().
     
  13. Offline

    Forseth11

    rf2minecraft Okay got it.
    Use this for your plugin.yml:
    Code:
    name: AdminControls
    version: 1.0
    main: me.rf2minecraft.AdminControls.AdminControls
    commands:
      admin:
        description: Opens controls.
    And use this code:
    Code:java
    1. package me.rf2minecraft.AdminControls;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.ChatColor;
    5. import org.bukkit.DyeColor;
    6. import org.bukkit.Material;
    7. import org.bukkit.command.Command;
    8. import org.bukkit.command.CommandSender;
    9. import org.bukkit.entity.Player;
    10. import org.bukkit.event.EventHandler;
    11. import org.bukkit.event.Listener;
    12. import org.bukkit.event.inventory.InventoryClickEvent;
    13. import org.bukkit.inventory.Inventory;
    14. import org.bukkit.inventory.ItemStack;
    15. import org.bukkit.inventory.meta.ItemMeta;
    16. import org.bukkit.material.Wool;
    17. import org.bukkit.plugin.java.JavaPlugin;
    18.  
    19. public final class AdminControls extends JavaPlugin implements Listener {
    20. public static Inventory main;
    21. public static Inventory timeChange;
    22. public ItemStack dayItem, nightItem;
    23.  
    24.  
    25. public void onEnable() {
    26. Bukkit.getServer().getPluginManager().registerEvents(this, this);
    27. }
    28.  
    29. public AdminControls() {
    30. main = Bukkit.getServer().createInventory(null, 9, "Admin Controls");
    31. /*ItemMeta tim = main.getItem(2).getItemMeta();
    32.   ItemMeta wim = main.getItem(6).getItemMeta();*/ //These two line will cause a nullPointer. Be sure to check if it is not null.
    33. /*tim.setDisplayName(ChatColor.DARK_RED + "Change Time");
    34.   wim.setDisplayName(ChatColor.DARK_RED + "Change Weather");
    35.   main.getItem(2).setItemMeta(tim);
    36.   main.getItem(6).setItemMeta(wim);
    37.   main.setItem(2, new ItemStack(Material.WATCH, 1));
    38.   main.setItem(6, new ItemStack(Material.BLAZE_ROD, 1));*/
    39.  
    40. timeChange = Bukkit.getServer().createInventory(null, 9, "Admin Controls");
    41. dayItem = createItem(DyeColor.GREEN, ChatColor.DARK_RED + "Day");
    42. nightItem = createItem(DyeColor.BLACK, ChatColor.DARK_RED + "Night");
    43. timeChange.setItem(2, dayItem); // Sets item in slot 2 to green wool
    44. timeChange.setItem(6, nightItem); // Sets item in slot 6 to black wool
    45. }
    46.  
    47. private ItemStack createItem(DyeColor dc, String name) {
    48. ItemStack i = new Wool(dc).toItemStack(1);
    49. ItemMeta im = i.getItemMeta();
    50. im.setDisplayName(name);
    51. i.setItemMeta(im);
    52. return i;
    53. }
    54.  
    55. @EventHandler
    56. public void onInventoryClick(InventoryClickEvent e) {
    57. if(!e.getInventory().getName().equalsIgnoreCase(main.getName())) return;
    58. if(e.getCurrentItem().getItemMeta() == null) return;
    59. if(e.getCurrentItem().getItemMeta().getDisplayName().contains("Change Time")) {
    60. e.setCancelled(true);
    61. e.getWhoClicked().closeInventory();
    62. e.getWhoClicked().openInventory(timeChange);
    63. }
    64. }
    65.  
    66. public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    67. if(cmd.getName().equalsIgnoreCase("admin")) {
    68. Player p = (Player) sender;
    69. p.openInventory(main);
    70. }
    71. return true;
    72. }
    73. }
     
  14. Offline

    Axanite


    It is working but the items in the inventory do not get set?
     
  15. Offline

    Aqua

    Code:
    package me.rf2minecraft.AdminControls;
     
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.DyeColor;
    import org.bukkit.Material;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.material.Wool;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public final class AdminControls extends JavaPlugin implements Listener {
    public static Inventory main;
    public static Inventory timeChange;
    public ItemStack dayItem, nightItem;
     
     
    public void onEnable() {
    Bukkit.getServer().getPluginManager().registerEvents(this, this);
    }
     
    public AdminControls() {
    main = Bukkit.getServer().createInventory(null, 9, "Admin Controls");
    /*ItemMeta tim = main.getItem(2).getItemMeta();
    ItemMeta wim = main.getItem(6).getItemMeta();*/ //These two line will cause a nullPointer. Be sure to check if it is not null.
    /*tim.setDisplayName(ChatColor.DARK_RED + "Change Time");
    wim.setDisplayName(ChatColor.DARK_RED + "Change Weather");
    main.getItem(2).setItemMeta(tim);
    main.getItem(6).setItemMeta(wim);*/
    main.setItem(2, new ItemStack(Material.WATCH, 1));
    main.setItem(6, new ItemStack(Material.BLAZE_ROD, 1));
     
    timeChange = Bukkit.getServer().createInventory(null, 9, "Admin Controls");
    dayItem = createItem(DyeColor.GREEN, ChatColor.DARK_RED + "Day");
    nightItem = createItem(DyeColor.BLACK, ChatColor.DARK_RED + "Night");
    timeChange.setItem(2, dayItem); // Sets item in slot 2 to green wool
    timeChange.setItem(6, nightItem); // Sets item in slot 6 to black wool
    }
     
    private ItemStack createItem(DyeColor dc, String name) {
    ItemStack i = new Wool(dc).toItemStack(1);
    ItemMeta im = i.getItemMeta();
    im.setDisplayName(name);
    i.setItemMeta(im);
    return i;
    }
     
    @EventHandler
    public void onInventoryClick(InventoryClickEvent e) {
    if(!e.getInventory().getName().equalsIgnoreCase(main.getName())) return;
    if(e.getCurrentItem().getItemMeta() == null) return;
    if(e.getCurrentItem().getItemMeta().getDisplayName().contains("Change Time")) {
    e.setCancelled(true);
    e.getWhoClicked().closeInventory();
    e.getWhoClicked().openInventory(timeChange);
    }
    }
     
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    if(cmd.getName().equalsIgnoreCase("admin")) {
    Player p = (Player) sender;
    p.openInventory(main);
    }
    return true;
    }
    }
    try this.
     
  16. Offline

    xTrollxDudex

    rf2minecraft
    He commented out the part here you add items to the inventory. Uncomment lines 37-38 but the others need to be set before adding ItemMeta
     
  17. Offline

    Forseth11

    rf2minecraft I took those lines out because they caused a null pointer. You need to make sure the item exists.

    rf2minecraft Oh and just to let you know your problem was with you plugin.yml. On the 4th line you had a blank space. I took that away and it works.

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

    Axanite

    I know. I uncommented them aswell as fixing the item meta arrangement. ;/ Still doesn't work.

    I've done that, still doesn't work?

    There is no stacktrace. all it was saying was it could not be found.

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

Share This Page