Solved NullPointerException on give ItemStack

Discussion in 'Plugin Development' started by SeaMoon69, Jun 22, 2018.

Thread Status:
Not open for further replies.
  1. JRE : JDK 10.0.1
    Bukkit versions : 1.8 1.9 1.10 1.11 1.12
    Server version : 1.8.8 R0.3

    Hello bukkit !
    I have an error with the banners:
    Code:
    java.lang.NullPointerException
            at org.bukkit.craftbukkit.v1_8_R3.inventory.CraftMetaBanner.applyToItem(CraftMetaBanner.java:93) ~[spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack.setItemMeta(CraftItemStack.java:404) ~[spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack.setItemMeta(CraftItemStack.java:383) ~[spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack.<init>(CraftItemStack.java:110) ~[spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack.<init>(CraftItemStack.java:114) ~[spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack.<init>(CraftItemStack.java:103) ~[spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack.asCraftCopy(CraftItemStack.java:82) ~[spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventory.firstPartial(CraftInventory.java:251) ~[spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventory.addItem(CraftInventory.java:278) ~[spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
    with this code:
    Code (open)
    Code:
      private static ItemStack registerBanner(String lang) {
         ItemStack item = new ItemStack(Material.BANNER);
         BannerMeta m = (BannerMeta) item.getItemMeta();
         ConfigurationSection banner = fileConfiguration.getConfigurationSection("flag");
         if (banner != null) {
           if (banner.contains("base")) {
             m.setBaseColor(DyeColor.getByColor(banner.getColor("base")));
           } else {
             banner.set("base", DyeColor.WHITE.toString());
           }
    
           List<Pattern> patterns = new ArrayList<Pattern>();
           for (int i = 1; i <= 7; i++) {
             if (i != 7) {
               if (banner.contains(i + "")) {
                 ConfigurationSection cfgs = banner.getConfigurationSection(i + "");
                 if (!cfgs.contains("pattern")) {
                   cfgs.set("pattern", PatternType.CIRCLE_MIDDLE.toString());
                 }
                 if (!cfgs.contains("color")) {
                   cfgs.set("color", DyeColor.BROWN.toString());
                 }
                 patterns.add(new Pattern(DyeColor.getByColor(cfgs.getColor("color")),
                     PatternType.valueOf(cfgs.getString("pattern"))));
               } else {
                 break;
               }
             } else {
               System.err.println(ANSI_RED + "Banner can't be have more 6 layers !");
             }
           }
           m.setPatterns(patterns);
    
           m.setDisplayName(ChatColor.translateAlternateColorCodes('&', lang));
           item.setItemMeta(m);
         } else {
           fileConfiguration.createSection("flag");
           banner = fileConfiguration.getConfigurationSection("flag");
           banner.set("base", DyeColor.WHITE.toString());
    
           ConfigurationSection cfgs1 = banner.createSection(1 + "");
           cfgs1.set("pattern", PatternType.STRIPE_RIGHT.toString());
           cfgs1.set("color", DyeColor.BLUE.toString());
    
           ConfigurationSection cfgs2 = banner.createSection(2 + "");
           cfgs2.set("pattern", PatternType.STRIPE_LEFT.toString());
           cfgs2.set("color", DyeColor.RED.toString());
    
           m.setDisplayName(ChatColor.BLUE + "Fra" + ChatColor.WHITE + "nç" + ChatColor.DARK_RED + "ais");
           m.setBaseColor(DyeColor.WHITE);
           List<Pattern> patterns = new ArrayList<Pattern>();
           patterns.add(new Pattern(DyeColor.BLUE, PatternType.STRIPE_LEFT));
           patterns.add(new Pattern(DyeColor.RED, PatternType.STRIPE_RIGHT));
           m.setPatterns(patterns);
           item.setItemMeta(m);
         }
         banners.put(lang, item);
         return item;
       }
    PatternType.valueOf(cfgs.getString("pattern")) : return PatternType.STRIPE_RIGHT


    Error is not in this code but here :
    Code:
        Bukkit.getPlayer("SeaMoon69").getInventory().addItem(registerBanner(file.getName().replace(".yml", "")));
    Bukkit : not null
    player : not null
    inventory : not null

    Thanks,
    SeaMoon69
     
  2. Offline

    timtower Administrator Administrator Moderator

    @SeaMoon69 fileConfiguration could be null.
    banner could be null.
     
  3. fileConfiguration can't be null because I use it before

    I use now
    Code:
    public static ItemStack getLangBanner(String language) {
            for (String str : banners.keySet()) {
                System.out.println(str + " | " + banners.get(str));
            }
            return banners.get(language);
        }
    to get item
    sysout return
    Code:
            Bukkit.getPlayerExact("SeaMoon69").getInventory()
            .setItem
            (10,
                    getLangBanner("fr_FR"));
    error on ".setItem"
     
  4. Offline

    timtower Administrator Administrator Moderator

    @SeaMoon69 Avoid using static please, it can do weird stuff.
    Then find out what is null.
    Debug the entire thing.
     
  5. I found !
    Base color is null
    I change
    Code:
    DyeColor.getByColor(banner.getColor("base"))
    to
    Code:
    DyeColor.valueOf(banner.getString("base"))
     
Thread Status:
Not open for further replies.

Share This Page