1.7.10 как отследить эвент первого захода в мир?

Из заголовка все понятно, мне просто нужно, чтобы при первом заходе i = 0, а потом оно изменялось, то есть не сбрасывалось на ноль, а сохранялась. Пробовал через NBT не вышло, я вообще NBT не понимаю.
 
Ну вот допустим у меня есть переменная i = 0, я хочу чтобы при убийстве моба к i пребавлялось 20 и при перезаходе оставалось 20 и это все отображалось на экран. Я сделал:

в предмете:

public boolean hitEntity(ItemStack par1ItemStack, EntityLivingBase par2EntityLivingBase, EntityLivingBase par3EntityLivingBase)
    {
        if(par3EntityLivingBase instanceof EntityPlayer){
            if(((EntityPlayer) par3EntityLivingBase).getCurrentEquippedItem() != null && ((EntityPlayer) par3EntityLivingBase).getCurrentEquippedItem().getItem() == armorness.ObsidianGoldenKnife) {
                if(par3EntityLivingBase.isPotionActive(armorness.Cooldown) == false){
                    par2EntityLivingBase.setDead();
                    armorness.i = armorness.i + 20;
                    par3EntityLivingBase.addPotionEffect(new PotionEffect(armorness.Cooldown.id, 20*60, 0));
                    par1ItemStack.damageItem(1, par3EntityLivingBase);
                }
                else{
                    ((ICommandSender) par3EntityLivingBase).addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Cooldown!"));
                }
            }
        }
        return false;
    }

Gui:

@SubscribeEvent(priority = EventPriority.NORMAL)
    public void EventHandler(RenderGameOverlayEvent event){
        if(event.isCancelable() || event.type != ElementType.EXPERIENCE){
            return;
        }
        GL11.glDisable(GL11.GL_LIGHTING);
        ScaledResolution sr = new ScaledResolution(Minecraft.getMinecraft(), Minecraft.getMinecraft().displayWidth, Minecraft.getMinecraft().displayHeight);
        int width = sr.getScaledWidth();
        int heigh = sr.getScaledHeight();
        drawString(Minecraft.getMinecraft().fontRenderer, EnumChatFormatting.GOLD + "Gold " + armorness.i, width/2, heigh-35, 65535);
    }

а куда тут нбт пихать и вообще как незнаю.
[merge_posts_bbcode]Добавлено: 25.09.2015 02:14:38[/merge_posts_bbcode]

как NBT в гуи отобразить?

[merge_posts_bbcode]Добавлено: 25.09.2015 02:15:06[/merge_posts_bbcode]

У меня что то вроде получается:

    public boolean hitEntity(ItemStack par1ItemStack, EntityLivingBase par2EntityLivingBase, EntityLivingBase par3EntityLivingBase)
    {
         if (!par1ItemStack.hasTagCompound()) par1ItemStack.setTagCompound(new NBTTagCompound());

         NBTTagCompound nbt = par1ItemStack.getTagCompound();
         if (nbt != null)  {
             if (!nbt.hasKey("i")) nbt.setInteger("i", 0);
             if (nbt.hasKey("i"))
                 if(par3EntityLivingBase instanceof EntityPlayer){
                     if(((EntityPlayer) par3EntityLivingBase).getCurrentEquippedItem() != null && ((EntityPlayer) par3EntityLivingBase).getCurrentEquippedItem().getItem() == armorness.ObsidianGoldenKnife) {
                         if(par3EntityLivingBase.isPotionActive(armorness.Cooldown) == false){
                             par2EntityLivingBase.setDead();
                             int i = nbt.getInteger("i");
                             i = i + 20;
                             par3EntityLivingBase.addPotionEffect(new PotionEffect(armorness.Cooldown.id, 20*60, 0));
                             par1ItemStack.damageItem(1, par3EntityLivingBase);
                         }
                         else{
                             ((ICommandSender) par3EntityLivingBase).addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Cooldown!"));
                         }
                     }
                 }
         }
         return false;    
        }
}
 
Войди в родителя ©ООП :D
Там будет метод, [save,write,read]NBT, они дают тебе НБТ тэг аргументом, ты и пихай в него твою переменную.
 
а как на экран то вывести?
[merge_posts_bbcode]Добавлено: 25.09.2015 02:20:32[/merge_posts_bbcode]

drawString(Minecraft.getMinecraft().fontRenderer, EnumChatFormatting.GOLD + "Gold " + armorness.i, width/2, heigh-35, 65535); тут все просто

[merge_posts_bbcode]Добавлено: 25.09.2015 02:20:47[/merge_posts_bbcode]

А нбт как?

[merge_posts_bbcode]Добавлено: 25.09.2015 02:37:01[/merge_posts_bbcode]

Сделал так:

public boolean hitEntity(ItemStack par1ItemStack, EntityLivingBase par2EntityLivingBase, EntityLivingBase par3EntityLivingBase)
    {
        if (!par1ItemStack.hasTagCompound()) par1ItemStack.setTagCompound(new NBTTagCompound());

        NBTTagCompound nbt = par1ItemStack.getTagCompound();
        if (nbt != null)  {
            if (!nbt.hasKey("i")) nbt.setInteger("i", 0);
            if (nbt.hasKey("i"))
            armorness.i = nbt.getInteger("i");
        if(par3EntityLivingBase instanceof EntityPlayer){
            if(((EntityPlayer) par3EntityLivingBase).getCurrentEquippedItem() != null && ((EntityPlayer) par3EntityLivingBase).getCurrentEquippedItem().getItem() == armorness.ObsidianGoldenKnife) {
                if(par3EntityLivingBase.isPotionActive(armorness.Cooldown) == false){
                    par2EntityLivingBase.setDead();
                    armorness.i = armorness.i + 20;
                    par3EntityLivingBase.addPotionEffect(new PotionEffect(armorness.Cooldown.id, 20*60, 0));
                    par1ItemStack.damageItem(1, par3EntityLivingBase);
                }
                else{
                    ((ICommandSender) par3EntityLivingBase).addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Cooldown!"));
                }
            }
        }
        nbt.setInteger("i", armorness.i);
        par1ItemStack.setTagCompound(nbt);
        }
        return false;
    }   

МОЖНО ЗАКРЫВАТЬ!


[merge_posts_bbcode]Добавлено: 25.09.2015 02:54:30[/merge_posts_bbcode]

кстати вот интересная вешь, как бы работает, но приходится моба бить, чтобы апдейтить переменную. Как ее подгружать?
 
DataWatcher, поищи на форуме. Вроде не раз обсуждалось, тащит переменную с сервера на клиент.
Хотя пользоваться им не очень удобно (новичкам, во всяком случае), но это гораздо лучше, чем пакеты.
 
дак как апдейтить значение при заходе в мир?
[merge_posts_bbcode]Добавлено: 25.09.2015 18:14:21[/merge_posts_bbcode]

решено добавил:

    @Override
    public void onUpdate(ItemStack is, World world, Entity entity, int p_77663_4_, boolean p_77663_5_) {
        if (!is.hasTagCompound()) is.setTagCompound(new NBTTagCompound());

        NBTTagCompound nbt = is.getTagCompound();
        if (nbt != null)  {
            if (nbt.hasKey("i"))
            armorness.i = nbt.getInteger("i");
        }
    }
 
Назад
Сверху