• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Unerklärliche NullPointerException

IDK_WHO_AM_I

Kuhfänger
Registriert
30 Mai 2017
Beiträge
66
Alter
28
Diamanten
300
Minecraft
IDK_WHO_AM_I
Hey Leute ich mal wieder mit einer haarstreubenden Exception :(

Folgender Code:

Javascript:
                        for(ItemStack items : kit.getContent()) {
                            System.out.println(player);
                            System.out.println(player.getInventory());
                            System.out.println(items.getType());
                            player.getInventory().addItem(items);
                        }

folgender OutPut:

https://pastebin.com/D7eTttAB

Ich hab echt keine Idee was da Null sein soll.

Hier mal die Methode getContent() für die die sie haben wollen.

Javascript:
    public List<ItemStack> getContent() {
        String key = this.kitName;
        List<ItemStack> content = new ArrayList<>();
        for (String itemname : kitFile.getConfig().getConfigurationSection("kit." + key).getKeys(false)) {
            if (!itemname.equalsIgnoreCase("price") && !itemname.equalsIgnoreCase("display")) {
                Material material = Material.getMaterial(kitFile.getString("kit." + key + "." + itemname + ".material"));
                int amount = kitFile.getInt("kit." + key + "." + itemname + ".amount");
                byte data = (byte) kitFile.getInt("kit." + key + "." + itemname + "data");
                short damage = (short) kitFile.getInt("kit." + key + "." + itemname + ".damage");
                String color = kitFile.getString("kit." + key + "." + itemname + ".color");
                color = ChatColor.translateAlternateColorCodes('&', color);
                List<String> list = kitFile.getStringList("kit." + key + "." + itemname + ".lore");
                List<String> lore = new ArrayList<>();
                for (String st : list) {
                    lore.add(st.replace("&", "§"));
                }
                ItemStack item = ItemCreator.createItem(material, data, amount, color + key, lore, damage);
                boolean unbreakable = kitFile.getBoolean("kit." + key + "." + itemname + ".unbreakable");
                for (String enchantment : kitFile.getConfig().getConfigurationSection("kit." + key + "." + itemname).getKeys(false)) {
                    if (!enchantment.equalsIgnoreCase("material") && !enchantment.equalsIgnoreCase("amount")
                            && !enchantment.equalsIgnoreCase("unbreakable") && !enchantment.equalsIgnoreCase("data")
                            && !enchantment.equalsIgnoreCase("damage") && !enchantment.equalsIgnoreCase("lore")
                            && !enchantment.equalsIgnoreCase("color")) {
                        int tier = kitFile.getInt("kit." + key + "." + itemname + "." + enchantment);
                        item.addUnsafeEnchantment(Enchantment.getByName(enchantment), tier);
                    }
                }
                ItemMeta itemmeta = item.getItemMeta();
                itemmeta.setUnbreakable(unbreakable);
                itemmeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
                item.setItemMeta(itemmeta);
                //
                content.add(item);
            }
        }
        return content;
    }
 

BlackHole

Workaholic
Registriert
1 Juli 2012
Beiträge
752
Diamanten
0
Minecraft
BlackHole
Die Infrastruktur in Bukkit für Configdateien erlaubt es auch, ItemStacks zu speichern und wiederherzustellen. Dies dürfte mehr Eigenschaften abdecken als dein Code.

Der eigentlicher Fehler liegt aber in dieser Zeile:
Code:
                        item.addUnsafeEnchantment(Enchantment.getByName(enchantment), tier);

Du musst hier prüfen, ob Enchantment.getByName(enchantment) null zurück liefert. Bukkit überprüft es leider nicht selber bei "ItemStack.addEnchantment()", so dass es dann erst viel später auffällt. Ich werde mich da mal einen Pull Request setzen, der das behebt und diesen dann bei Spigot einreichen.
 
Oben