Solved SOLVED

Discussion in 'Plugin Development' started by Darkpicasa, Nov 17, 2014.

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

    Darkpicasa

    Code:java
    1. package me.Darkpicasa.VotingTokens;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.ChatColor;
    5. import org.bukkit.Material;
    6. import org.bukkit.command.Command;
    7. import org.bukkit.command.CommandSender;
    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.event.player.PlayerJoinEvent;
    13. import org.bukkit.inventory.Inventory;
    14. import org.bukkit.inventory.ItemStack;
    15. import org.bukkit.inventory.meta.ItemMeta;
    16. import org.bukkit.material.MaterialData;
    17. import org.bukkit.plugin.java.JavaPlugin;
    18.  
    19. public class VotingTokens extends JavaPlugin implements Listener{
    20. public static VotingTokens plugin;
    21. CustomConfig Playerdata;
    22. public void onEnable() {
    23. plugin = this;
    24. Playerdata = new CustomConfig(plugin, "tokens.yml");
    25. getLogger().info("Plugin Enabled!");
    26. Playerdata.getConfig().options().copyDefaults(true);
    27. Playerdata.saveConfig();
    28. Bukkit.getServer().getPluginManager().registerEvents(this, this);
    29. }
    30.  
    31. public void onDisable() {
    32. getLogger().info("Plugin Disabled!");
    33. }
    34. public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    35. if (!(sender instanceof Player)) {
    36. return false;
    37. }
    38. Player p = (Player) sender;
    39. if (cmd.getName().equalsIgnoreCase("redeem")){
    40. openInv(p);
    41.  
    42. }
    43. else if (cmd.getName().equalsIgnoreCase("vt")){
    44. if (!(p.hasPermission("votingtokens.admin"))){
    45. return false;
    46. }
    47. if (!(args.length == 0)){
    48. if (args[0].equalsIgnoreCase("give")){
    49. Playerdata.getConfig().set(args[1], Playerdata.getConfig().getInt(args[1]) + Integer.parseInt(args[2]));
    50.  
    51. }
    52. else if (args[0].equalsIgnoreCase("take")){
    53. Playerdata.getConfig().set(args[1], Playerdata.getConfig().getInt(args[1]) - Integer.parseInt(args[2]));
    54. }
    55. }
    56. }
    57. else if (cmd.getName().equalsIgnoreCase("tokens")){
    58. p.sendMessage(ChatColor.GOLD + "You have " + Playerdata.getConfig().getInt(p.getName()) + " tokens! Redeem them at /redeem!");
    59. }
    60. return false;
    61. }
    62.  
    63. public void openInv(Player p){
    64. Inventory inv = Bukkit.createInventory(null, 9, ChatColor.DARK_GREEN + "Redeem");
    65. ItemStack noble = new ItemStack(Material.WOOD_SWORD);
    66. ItemStack priest = new ItemStack(Material.STONE_SWORD);
    67. ItemStack king = new ItemStack(Material.GOLD_SWORD);
    68. ItemStack emperor = new ItemStack(Material.IRON_SWORD);
    69. ItemStack god = new ItemStack(Material.DIAMOND_SWORD);
    70. ItemStack nt = new ItemStack(Material.SKULL_ITEM);
    71. ItemStack cp = new ItemStack(Material.SKULL_ITEM);
    72.  
    73. ItemMeta nobleMeta = noble.getItemMeta();
    74. nobleMeta.setDisplayName(ChatColor.DARK_PURPLE + "Rank Noble - 200 Credits");
    75. noble.setItemMeta(nobleMeta);
    76.  
    77. ItemMeta priestMeta = priest.getItemMeta();
    78. priestMeta.setDisplayName(ChatColor.WHITE + "Rank Priest - 400 Credits");
    79. noble.setItemMeta(priestMeta);
    80.  
    81. ItemMeta kingMeta = king.getItemMeta();
    82. kingMeta.setDisplayName(ChatColor.GOLD + "Rank King - 600 Credits");
    83. king.setItemMeta(kingMeta);
    84.  
    85. ItemMeta emperorMeta = emperor.getItemMeta();
    86. emperorMeta.setDisplayName(ChatColor.DARK_RED + "Rank Emperor - 800 Credits");
    87. emperor.setItemMeta(emperorMeta);
    88.  
    89. ItemMeta godMeta = god.getItemMeta();
    90. godMeta.setDisplayName(ChatColor.RED + "Rank God - 1000 Credits");
    91. god.setItemMeta(godMeta);
    92.  
    93. ItemMeta ntMeta = nt.getItemMeta();
    94. ntMeta.setDisplayName(ChatColor.BLUE + "5 Nickname Tokens - 100 Credits");
    95. MaterialData data = new MaterialData(2);
    96. nt.setData(data);
    97. nt.setItemMeta(ntMeta);
    98.  
    99. ItemMeta cpMeta = cp.getItemMeta();
    100. cpMeta.setDisplayName(ChatColor.DARK_PURPLE + "Custom Prefixes - 200 Credits");
    101. cp.setItemMeta(cpMeta);
    102. MaterialData data2 = new MaterialData(4);
    103. nt.setData(data2);
    104.  
    105. inv.setItem(1, noble);
    106. inv.setItem(2, noble);
    107. inv.setItem(3, noble);
    108. inv.setItem(4, noble);
    109. inv.setItem(5, noble);
    110. inv.setItem(8, noble);
    111. inv.setItem(9, noble);
    112. }
    113.  
    114. @EventHandler
    115. public void playerJoin(PlayerJoinEvent e){
    116. if (!(Playerdata.getConfig().contains(e.getPlayer().getName()))){
    117. Playerdata.getConfig().createSection(e.getPlayer().getName());
    118. Playerdata.getConfig().set(e.getPlayer().getName(), 0);
    119. Playerdata.saveConfig();
    120. }
    121. }
    122.  
    123. }
    124. }
    125.  

    The error is 'null', Unhandled exception when executing command /redeem.
    The error occurs when I execute the command /redeem
    Thanks for all help given! :)
     
  2. Offline

    Googlelover1234

    Darkpicasa
    Do you have a stack trace? Please show it if you do.

    My guess is that the inventory is null.
     
  3. Offline

    Darkpicasa

  4. Offline

    Googlelover1234

    Darkpicasa
    Is that your whole class?

    Derp, sorry, I see what's wrong. When you use the *setItem()* method, the inventory starts at 0. You were trying to go up to 9, which didn't exist. Subtract 1 from all of your *setItem()* methods.

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

    Darkpicasa

    Googlelover1234 I changed it like you said. Now, it doesn't have any error message, but no inventory opens up for a player.

    My new code is
    Code:
    package me.Darkpicasa.VotingTokens;
     
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    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.event.player.PlayerJoinEvent;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.material.MaterialData;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class VotingTokens extends JavaPlugin implements Listener{
        public static VotingTokens plugin;
        CustomConfig Playerdata;
        public void onEnable() {
            plugin = this;
            Playerdata = new CustomConfig(plugin, "tokens.yml");
            getLogger().info("Plugin Enabled!");
            Playerdata.getConfig().options().copyDefaults(true);
            Playerdata.saveConfig();
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
        }
       
        public void onDisable() {
            getLogger().info("Plugin Disabled!");
        }
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if (!(sender instanceof Player)) {
                return false;
            }
            Player p = (Player) sender;
            if (cmd.getName().equalsIgnoreCase("redeem")){
                openInv(p);
               
            }
            else if (cmd.getName().equalsIgnoreCase("vt")){
                if (!(p.hasPermission("votingtokens.admin"))){
                    return false;
                }
                if (!(args.length == 0)){
                    if (args[0].equalsIgnoreCase("give")){
                        Playerdata.getConfig().set(args[1], Playerdata.getConfig().getInt(args[1]) + Integer.parseInt(args[2]));
                       
                    }
                    else if (args[0].equalsIgnoreCase("take")){
                        Playerdata.getConfig().set(args[1], Playerdata.getConfig().getInt(args[1]) - Integer.parseInt(args[2]));
                    }
                }
            }
            else if (cmd.getName().equalsIgnoreCase("tokens")){
                p.sendMessage(ChatColor.GOLD + "You have " + Playerdata.getConfig().getInt(p.getName()) + " tokens! Redeem them at /redeem!");
            }
            return false;
        }
       
        public void openInv(Player p){
            Inventory inv = Bukkit.createInventory(null, 9, ChatColor.DARK_GREEN + "Redeem");
            ItemStack noble = new ItemStack(Material.WOOD_SWORD);
            ItemStack priest = new ItemStack(Material.STONE_SWORD);
            ItemStack king = new ItemStack(Material.GOLD_SWORD);
            ItemStack emperor = new ItemStack(Material.IRON_SWORD);
            ItemStack god = new ItemStack(Material.DIAMOND_SWORD);
            ItemStack nt = new ItemStack(Material.SKULL_ITEM);
            ItemStack cp = new ItemStack(Material.SKULL_ITEM);
           
            ItemMeta nobleMeta = noble.getItemMeta();
            nobleMeta.setDisplayName(ChatColor.DARK_PURPLE + "Rank Noble - 200 Credits");
            noble.setItemMeta(nobleMeta);
           
            ItemMeta priestMeta = priest.getItemMeta();
            priestMeta.setDisplayName(ChatColor.WHITE + "Rank Priest - 400 Credits");
            noble.setItemMeta(priestMeta);
           
            ItemMeta kingMeta = king.getItemMeta();
            kingMeta.setDisplayName(ChatColor.GOLD + "Rank King - 600 Credits");
            king.setItemMeta(kingMeta);
           
            ItemMeta emperorMeta = emperor.getItemMeta();
            emperorMeta.setDisplayName(ChatColor.DARK_RED + "Rank Emperor - 800 Credits");
            emperor.setItemMeta(emperorMeta);
           
            ItemMeta godMeta = god.getItemMeta();
            godMeta.setDisplayName(ChatColor.RED + "Rank God - 1000 Credits");
            god.setItemMeta(godMeta);
           
            ItemMeta ntMeta = nt.getItemMeta();
            ntMeta.setDisplayName(ChatColor.BLUE + "5 Nickname Tokens - 100 Credits");
            MaterialData data = new MaterialData(2);
            nt.setData(data);
            nt.setItemMeta(ntMeta);
           
            ItemMeta cpMeta = cp.getItemMeta();
            cpMeta.setDisplayName(ChatColor.DARK_PURPLE + "Custom Prefixes - 200 Credits");
            cp.setItemMeta(cpMeta);
            MaterialData data2 = new MaterialData(4);
            nt.setData(data2);
           
            inv.setItem(0, noble);
            inv.setItem(1, priest);
            inv.setItem(2, king);
            inv.setItem(3, emperor);
            inv.setItem(4, god);
            inv.setItem(7, nt);
            inv.setItem(8, cp);
        }
       
        @EventHandler
        public void playerJoin(PlayerJoinEvent e){
            if (!(Playerdata.getConfig().contains(e.getPlayer().getName()))){
                Playerdata.getConfig().createSection(e.getPlayer().getName());
                Playerdata.getConfig().set(e.getPlayer().getName(), 0);
                Playerdata.saveConfig();
            }
        }
        @EventHandler
        public void inventoryGUI(InventoryClickEvent e){
            if (!(ChatColor.stripColor(e.getInventory().getName()).equalsIgnoreCase("Redeem"))){
                return;
            }
            Player p = (Player) e.getWhoClicked();
            e.setCancelled(true);
            if (e.getCurrentItem()==null || e.getCurrentItem().getType() == Material.AIR || !e.getCurrentItem().hasItemMeta()){
                p.closeInventory();
                return;
            }
            switch (e.getCurrentItem().getType()){
            case GRASS:
                p.sendMessage("You clicked the grass");
                p.closeInventory();
                break;
            default:
                p.closeInventory();
                break;
            }
        }
    }
    
    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 13, 2016
  6. Offline

    Googlelover1234

    Darkpicasa
    So... after you create the inventory, create the items, and put them in the inv, you forgot to do the
    Code:
    p.showInventory(inv);
     
  7. Offline

    Darkpicasa

    That function doesn't exist for the class Player... :(
     
  8. Offline

    Googlelover1234

    Sorry, I meant

    Code:
    p.openInventory(inv);
     
  9. Offline

    Darkpicasa

    Googlelover1234 Perfect, thanks so much!
    One last question. I want the skulls to be a zombie skull and a creeper skull. How would I change the data of the items to 2 or 4?
     
  10. Offline

    Googlelover1234

  11. Offline

    Darkpicasa

    Googlelover1234 Didn't work. My code:
    Code:
    package me.Darkpicasa.VotingTokens;
     
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    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.event.player.PlayerJoinEvent;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.material.MaterialData;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class VotingTokens extends JavaPlugin implements Listener{
        public static VotingTokens plugin;
        CustomConfig Playerdata;
        public void onEnable() {
            plugin = this;
            Playerdata = new CustomConfig(plugin, "tokens.yml");
            getLogger().info("Plugin Enabled!");
            Playerdata.getConfig().options().copyDefaults(true);
            Playerdata.saveConfig();
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
        }
       
        public void onDisable() {
            getLogger().info("Plugin Disabled!");
        }
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if (!(sender instanceof Player)) {
                return false;
            }
            Player p = (Player) sender;
            if (cmd.getName().equalsIgnoreCase("redeem")){
                openInv(p);
               
            }
            else if (cmd.getName().equalsIgnoreCase("vt")){
                if (!(p.hasPermission("votingtokens.admin"))){
                    return false;
                }
                if (!(args.length == 0)){
                    if (args[0].equalsIgnoreCase("give")){
                        Playerdata.getConfig().set(args[1], Playerdata.getConfig().getInt(args[1]) + Integer.parseInt(args[2]));
                       
                    }
                    else if (args[0].equalsIgnoreCase("take")){
                        Playerdata.getConfig().set(args[1], Playerdata.getConfig().getInt(args[1]) - Integer.parseInt(args[2]));
                    }
                }
            }
            else if (cmd.getName().equalsIgnoreCase("tokens")){
                p.sendMessage(ChatColor.GOLD + "You have " + Playerdata.getConfig().getInt(p.getName()) + " tokens! Redeem them at /redeem!");
            }
            return false;
        }
       
        public void openInv(Player p){
            Inventory inv = Bukkit.createInventory(null, 9, ChatColor.DARK_GREEN + "Redeem");
            ItemStack noble = new ItemStack(Material.WOOD_SWORD);
            ItemStack priest = new ItemStack(Material.STONE_SWORD);
            ItemStack king = new ItemStack(Material.GOLD_SWORD);
            ItemStack emperor = new ItemStack(Material.IRON_SWORD);
            ItemStack god = new ItemStack(Material.DIAMOND_SWORD);
            ItemStack nt = new ItemStack(Material.SKULL_ITEM);
            ItemStack cp = new ItemStack(Material.SKULL_ITEM);
           
            ItemMeta nobleMeta = noble.getItemMeta();
            nobleMeta.setDisplayName(ChatColor.DARK_PURPLE + "Rank Noble - 200 Credits");
            noble.setItemMeta(nobleMeta);
           
            ItemMeta priestMeta = priest.getItemMeta();
            priestMeta.setDisplayName(ChatColor.WHITE + "Rank Priest - 400 Credits");
            priest.setItemMeta(priestMeta);
           
            ItemMeta kingMeta = king.getItemMeta();
            kingMeta.setDisplayName(ChatColor.GOLD + "Rank King - 600 Credits");
            king.setItemMeta(kingMeta);
           
            ItemMeta emperorMeta = emperor.getItemMeta();
            emperorMeta.setDisplayName(ChatColor.DARK_RED + "Rank Emperor - 800 Credits");
            emperor.setItemMeta(emperorMeta);
           
            ItemMeta godMeta = god.getItemMeta();
            godMeta.setDisplayName(ChatColor.RED + "Rank God - 1000 Credits");
            god.setItemMeta(godMeta);
           
            ItemMeta ntMeta = nt.getItemMeta();
            ntMeta.setDisplayName(ChatColor.BLUE + "5 Nickname Tokens - 100 Credits");
            MaterialData data = new MaterialData((byte) 2);
            nt.setData(data);
            nt.setItemMeta(ntMeta);
           
            ItemMeta cpMeta = cp.getItemMeta();
            cpMeta.setDisplayName(ChatColor.DARK_PURPLE + "Custom Prefixes - 200 Credits");
            cp.setItemMeta(cpMeta);
            MaterialData data2 = new MaterialData(4);
            nt.setData(data2);
           
            inv.setItem(0, noble);
            inv.setItem(1, priest);
            inv.setItem(2, king);
            inv.setItem(3, emperor);
            inv.setItem(4, god);
            inv.setItem(7, nt);
            inv.setItem(8, cp);
           
            p.openInventory(inv);
           
        }
       
        @EventHandler
        public void playerJoin(PlayerJoinEvent e){
            if (!(Playerdata.getConfig().contains(e.getPlayer().getName()))){
                Playerdata.getConfig().createSection(e.getPlayer().getName());
                Playerdata.getConfig().set(e.getPlayer().getName(), 0);
                Playerdata.saveConfig();
            }
        }
        @EventHandler
        public void inventoryGUI(InventoryClickEvent e){
            if (!(ChatColor.stripColor(e.getInventory().getName()).equalsIgnoreCase("Redeem"))){
                return;
            }
            Player p = (Player) e.getWhoClicked();
            e.setCancelled(true);
            if (e.getCurrentItem()==null || e.getCurrentItem().getType() == Material.AIR || !e.getCurrentItem().hasItemMeta()){
                p.closeInventory();
                return;
            }
            switch (e.getCurrentItem().getType()){
            case WOOD_SWORD:
                if (Playerdata.getConfig().getInt(p.getName()) > 200){
                    Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "vt take " + p.getName() + " 200");
                    Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "manuadd " + p.getName() + " Noble");
                    p.sendMessage(ChatColor.GREEN + "Bought rank Noble!");
                }
                else {
                    p.sendMessage(ChatColor.RED + "Not enough tokens!");
                }
                p.closeInventory();
                break;
            case STONE_SWORD:
                if (Playerdata.getConfig().getInt(p.getName()) > 400){
                    Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "vt take " + p.getName() + " 400");
                    Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "manuadd " + p.getName() + " Priest");
                    p.sendMessage(ChatColor.GREEN + "Bought rank Priest!");
                }
                else {
                    p.sendMessage(ChatColor.RED + "Not enough tokens!");
                }
                p.closeInventory();
                break;
            case GOLD_SWORD:
                if (Playerdata.getConfig().getInt(p.getName()) > 600){
                    Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "vt take " + p.getName() + " 600");
                    Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "manuadd " + p.getName() + " King");
                    p.sendMessage(ChatColor.GREEN + "Bought rank King!");
                }
                else {
                    p.sendMessage(ChatColor.RED + "Not enough tokens!");
                }
                p.closeInventory();
                break;
            case IRON_SWORD:
                if (Playerdata.getConfig().getInt(p.getName()) > 800){
                    Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "vt take " + p.getName() + " 800");
                    Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "manuadd " + p.getName() + " Emperor");
                    p.sendMessage(ChatColor.GREEN + "Bought rank Emperor!");
                }
                else {
                    p.sendMessage(ChatColor.RED + "Not enough tokens!");
                }
                p.closeInventory();
                break;
            case DIAMOND_SWORD:
                if (Playerdata.getConfig().getInt(p.getName()) > 1000){
                    Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "vt take " + p.getName() + " 1000");
                    Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "manuadd " + p.getName() + " God");
                    p.sendMessage(ChatColor.GREEN + "Bought rank God!");
                }
                else {
                    p.sendMessage(ChatColor.RED + "Not enough tokens!");
                }
                p.closeInventory();
                break;
            case SKULL_ITEM:
                p.sendMessage("You clicked the grass");
                p.closeInventory();
                break;
            default:
                p.closeInventory();
                break;
            }
        }
    }
    
     
  12. Offline

    Skionz

    Darkpicasa Don't rename your thread "SOLVED" it doesn't help anyone. That is what the solved tag is for.
     
    leon3001 and Rocoty like this.
  13. Offline

    Rocoty

    I see you marked the thread as solved. Mind sharing how you fixed it?
     
    leon3001 likes this.
  14. Offline

    Darkpicasa

    I'm not sure what you mean... Do you mean how I differenciated between the types of player skulls? If so, what I did was
    Code:
    ItemStack itemstack = new ItemStack(Material.SKULL_ITEM,1,(short) 2);
    The (short) 2 part at the end sets the data.
     
Thread Status:
Not open for further replies.

Share This Page