NBT краш.

Версия Minecraft
1.6.4
Не понимаю! Делаю владельца предмета ну и в майне вот краш:

2017-11-27 16:21:52 [INFO] [STDOUT] ---- Minecraft Crash Report ----
2017-11-27 16:21:52 [INFO] [STDOUT] // Don't be sad, have a hug! <3
2017-11-27 16:21:52 [INFO] [STDOUT]
2017-11-27 16:21:52 [INFO] [STDOUT] Time: 27.11.17 16:21
2017-11-27 16:21:52 [INFO] [STDOUT] Description: Rendering screen
2017-11-27 16:21:52 [INFO] [STDOUT]
2017-11-27 16:21:52 [INFO] [STDOUT] java.lang.NullPointerException
2017-11-27 16:21:52 [INFO] [STDOUT] at dorobert.twzmod.src.JHelmet.addInformation(JHelmet.java:79)
2017-11-27 16:21:52 [INFO] [STDOUT] at net.minecraft.item.ItemStack.getTooltip(ItemStack.java:663)
2017-11-27 16:21:52 [INFO] [STDOUT] at net.minecraft.client.gui.inventory.GuiContainer.drawItemStackTooltip(GuiContainer.java:226)
2017-11-27 16:21:52 [INFO] [STDOUT] at net.minecraft.client.gui.inventory.GuiContainerCreative.drawItemStackTooltip(GuiContainerCreative.java:778)
2017-11-27 16:21:52 [INFO] [STDOUT] at net.minecraft.client.gui.inventory.GuiContainer.drawScreen(GuiContainer.java:202)
2017-11-27 16:21:52 [INFO] [STDOUT] at net.minecraft.client.renderer.InventoryEffectRenderer.drawScreen(InventoryEffectRenderer.java:43)
2017-11-27 16:21:52 [INFO] [STDOUT] at net.minecraft.client.gui.inventory.GuiContainerCreative.drawScreen(GuiContainerCreative.java:683)
2017-11-27 16:21:52 [INFO] [STDOUT] at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1036)
2017-11-27 16:21:52 [INFO] [STDOUT] at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:946)
2017-11-27 16:21:52 [INFO] [STDOUT] at net.minecraft.client.Minecraft.run(Minecraft.java:838)
2017-11-27 16:21:52 [INFO] [STDOUT] at net.minecraft.client.main.Main.main(Main.java:93)
2017-11-27 16:21:52 [INFO] [STDOUT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2017-11-27 16:21:52 [INFO] [STDOUT] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
2017-11-27 16:21:52 [INFO] [STDOUT] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
2017-11-27 16:21:52 [INFO] [STDOUT] at java.lang.reflect.Method.invoke(Unknown Source)
2017-11-27 16:21:52 [INFO] [STDOUT] at net.minecraft.launchwrapper.Launch.launch(Launch.java:131)
2017-11-27 16:21:52 [INFO] [STDOUT] at net.minecraft.launchwrapper.Launch.main(Launch.java:27)
 
Последнее редактирование модератором:
Решение
Не совсем. Стак может быть создан в креативе или, например, в NEI, тогда onCreated не вызовится, емнип. Поэтому нужно добавить несколько проверок.
Java:
public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean flag) {
    if (itemStack.hasTagCompound() && itemStack.getTagCompound().hasKey("owner", NBT.TAG_STRING)) {
        String owner = itemStack.getTagCompound().getString("owner");
        list.add("Owner: " + owner);
    }
}
3,005
192
592
В классе JHelmet, метод addInformation, строка 79.
У Вас пустой tagCompoung.
В следующий раз добавляйте код и оборачивайте краши в спойлер и [сode][/code].
 
Хмм.. Вот код:
Java:
public void onCreated(ItemStack itemStack, World world, EntityPlayer entityplayer) {
    itemStack.stackTagCompound = new NBTTagCompound();
    itemStack.stackTagCompound.setString("owner", entityplayer.username);
}


public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean flag) {
    if (itemStack.stackTagCompound != null) {
        String owner = itemStack.stackTagCompound.getString("owner");
        list.add("Owner: " + owner);
    }
}
 
Последнее редактирование модератором:
7,099
324
1,510
owner может быть null
 

Icosider

Kotliner
Администратор
3,603
99
664
Сделай так:
Java:
if(stack.stackTagCompound == null) {
   stack.setTagcompound(new NBTTagCompound());
stack.stackTagCompound.setstack.stackTagCompound.setString("owner", "null");
} else {
Примерно так же как и в первом случаи, только без сета нового нбт
}
 
Последнее редактирование:
Код надо оформлять правильно!
Зделал так, но еклипс ругается на new в stack.setTagcompound(new NBTTagCompound) и на setstack.stackTagCompound. Попробывал так:
Java:
if(stack.stackTagCompound == null) {
    stack.setTagCompound(NBTTagCompound);
    stack.stackTagCompound.setString("owner", "null");
} else {
    stack.stackTagCompound.setString("owner", "null");
}
но тот же краш.
 
Код надо оформлять правильно!
Так?
Java:
   public void onCreated(ItemStack stack, World world, EntityPlayer entityplayer, NBTTagCompound NBTTagCompound) {
      
      
        if(stack.stackTagCompound == null) {
              stack.setTagCompound(new NBTTagCompound());
             stack.getTagCompound().setString("owner", entityplayer.username);;
            }
    }

  
    public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean flag) {
      
      
           
             String owner = itemStack.getTagCompound().getString("owner");
             list.add("Owner: " + owner);
           
       
      
    }
 
Последнее редактирование модератором:
2,505
81
397
Не совсем. Стак может быть создан в креативе или, например, в NEI, тогда onCreated не вызовится, емнип. Поэтому нужно добавить несколько проверок.
Java:
public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean flag) {
    if (itemStack.hasTagCompound() && itemStack.getTagCompound().hasKey("owner", NBT.TAG_STRING)) {
        String owner = itemStack.getTagCompound().getString("owner");
        list.add("Owner: " + owner);
    }
}
 
Код надо оформлять правильно!
Так?
Java:
   public void onCreated(ItemStack stack, World world, EntityPlayer entityplayer, NBTTagCompound NBTTagCompound) {
    
    
        if(stack.stackTagCompound == null) {
              stack.setTagCompound(new NBTTagCompound());
             stack.getTagCompound().setString("owner", entityplayer.username);;
            }
    }


    public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean flag) {
    
    
         
             String owner = itemStack.getTagCompound().getString("owner");
             list.add("Owner: " + owner);
         
     
    
    }
вот:

Java:
public String owner = "owner";

    public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
        if (!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound();
        if (!world.isRemote) {
        if(!stack.stackTagCompound.hasKey(owner))
            stack.stackTagCompound.setString(owner, player.getDisplayName());
        }
        return stack;
    }
    public void addInformation(ItemStack stack, EntityPlayer playerIn, List lines, boolean advanced)
    {
        if(stack.hasTagCompound() && stack.stackTagCompound.hasKey(owner))
        {
            lines.add(EnumChatFormatting.GREEN + "Owner: " + stack.stackTagCompound.getString(owner));
    }
 
Последнее редактирование модератором:
Сверху