Help with custom items

Discussion in 'Plugin Development' started by justin_393, Jun 8, 2015.

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

    justin_393

    Hello,

    So I'm trying to make it so when a player has a certain item I created in their inventory they won't lose their items on death. It works fine when I create the item with a command, but when players craft the item and die they just lose everything. But if I spawn in the item with the command it works perfectly? Here's the code:

    Command to create:
    Code:
    @Sub(permission = "minecraftplanetearth.admin", description = "Get Keep Inventory item", minArgs = 0, allowConsole = true)
        public void getKeepInv(CallInfo call) {
            Player p = call.getPlayer();
            String keepInv = "Keep Inventory";
            List<String> lores = new ArrayList<String>();
            lores.add("Keep this in your inventory");
            lores.add("To keep your items on death");
            lores.add("Will be removed on death");
            ItemStack kI = new ItemStack(Material.DIAMOND);
            ItemMeta im = kI.getItemMeta();
            im.setDisplayName(keepInv);
            im.setLore(lores);
            kI.setItemMeta(im);
            p.getInventory().addItem(new ItemStack(kI));
        }
    PlayerDeathEvent:
    Code:
    @EventHandler
        public void onDeath( PlayerDeathEvent event) {
             Player p = event.getEntity();
             UUID uuid = p.getUniqueId();
            if (!event.getKeepInventory()) {
                 Inventory i = (Inventory) p.getInventory();
                ItemStack[] contents;
                for (int length = (contents = i.getContents()).length, j = 0; j < length; ++j) {
                     ItemStack inven = contents[j];
                    if (inven.getItemMeta().hasLore()
                            && inven.getItemMeta().hasDisplayName()) {
                         String name = inven.getItemMeta().getDisplayName();
                         List<String> lore = (List<String>) inven
                                .getItemMeta().getLore();
                        if (lore.contains("Keep this in your inventory")
                                && ChatColor.stripColor(name).equals(
                                        "Keep Inventory")) {
                            event.getDrops().clear();
                             ItemStack item = inven;
                            if (item.getAmount() >= 2) {
                                item.setAmount(item.getAmount() - 1);
                            } else {
                                i.remove(item);
                            }
                            this.in.put(uuid, p.getInventory().getContents());
                            this.level.put(uuid, p.getLevel());
                            this.armor.put(uuid, p.getInventory()
                                    .getArmorContents());
                            this.respawnPlayer.add(uuid);
                        }
                    }
                }
            }
        }
    PlayerRespawnEvent:
    Code:
    @EventHandler
        public void onRespawn( PlayerRespawnEvent event) {
             Player p = event.getPlayer();
             UUID uuid = p.getUniqueId();
            if (this.respawnPlayer.contains(uuid)) {
                ItemStack[] array;
                for (int length = (array = this.in.get(uuid)).length, i = 0; i < length; ++i) {
                     ItemStack item = array[i];
                    if (item != null) {
                        p.getInventory().addItem(new ItemStack[] { item });
                    }
                }
                 int l = this.level.get(uuid);
                p.setLevel(l);
                 ItemStack[] ar = this.armor.get(uuid);
                p.getInventory().setArmorContents(ar);
                p.sendMessage(this.green
                        + "You kept your inventory due to your Keep Inventory item!");
                this.respawnPlayer.remove(uuid);
            }
        }
    And finally, the recipe for the item:
    Code:
    //Register KeepInv Item
            String keepInv = "Keep Inventory";
            List<String> lores = new ArrayList<String>();
            lores.add("Keep this in your inventory");
            lores.add("To keep your items on death");
            lores.add("Will be removed on death");
            ItemStack kI = new ItemStack(Material.DIAMOND);
            ItemMeta im = kI.getItemMeta();
            im.setDisplayName(keepInv);
            im.setLore(lores);
            kI.setItemMeta(im);
           
            ShapedRecipe keepInventory = new ShapedRecipe(kI);
            keepInventory.shape("ABA", "BCB", "ABA");
            keepInventory.setIngredient('A', Material.DIAMOND_BLOCK);
            keepInventory.setIngredient('B', Material.DIAMOND);
            keepInventory.setIngredient('C', Material.EMERALD);
            getServer().addRecipe(keepInventory);
    And an error that happens whenver I die, with both types of item:
    http://pastebin.com/gCbRQfRV
     
  2. Offline

    Boomer

    08.06 19:50:05 [Server] INFO at jjbat_000.minecraftplanetearth.PlayerListener.onDeath(PlayerListener.java:292) ~[?:?]
    08.06 19:50:05 [Server] INFO Caused by: java.lang.NullPointerException

    Null object in your onDeath code...

    08.06 19:48:58 [Server] INFO at jjbat_000.minecraftplanetearth.PlayerListener.onPlayerCraft(PlayerListener.java:162) ~[?:?]
    08.06 19:48:58 [Server] INFO Caused by: java.lang.NullPointerException

    Null object where players are crafting items
     
Thread Status:
Not open for further replies.

Share This Page