Юз своего нбт в другом моде

Версия Minecraft
1.7.10
1,202
31
185
Такой трабл, когда я сую свой айтем со своим нбт (у меня это недроп) в слот гуишки блока, этот нбт тег удаляется.
Поясню подробнее, у меня это блок модификаций оружия из фланса, туда сую оружие со своим нбт и он удаляется.
Однако нбт тег в виде аттачмента не удаляется (естественно это прописано в коде)
Как это провернуть со своим тегом?
Вроде как что то мелькает в голове, но в нбт сильно не шарю, поэтому прошу помощи)
 
Решение
Попробуй так).

Java:
  if (itemstack.stackTagCompound.getTag("таг") != null)
        {
           nbt.setInteger("таг", 1);
        }

Ну, а если у тебя вообще все оружие не выпадает, то просто добавляй таг где и все остальные)

timaxa007

Модератор
5,831
409
672
Ну я со флансом не работал, но думаю он просто пересоздаёт общий NBT тег.
Исправить подобный недочёт, если только нормально переписать код, на изменение NBT у фланса.
Либо создать своё GUI где будет выполняться почти тоже самое, но исправляя этот недочёт.
Больше я не знаю, что нужно сделать, чтобы исправить этот недочёт у фланса.
 
1,202
31
185
Вот и именно что он пересоздает этот тег. То есть чтобы и мой тег пересоздавал, это не варик?
Ну я со флансом не работал, но думаю он просто пересоздаёт общий NBT тег.
Исправить подобный недочёт, если только нормально переписать код, на изменение NBT у фланса.
Либо создать своё GUI где будет выполняться почти тоже самое, но исправляя этот недочёт.
Больше я не знаю, что нужно сделать, чтобы исправить этот недочёт у фланса.
 
344
1
47
Прочекай контейнер и смотри метод с работой нбт. Я работал с флансом давненько, такой проблемы не встречал, но все же.

Если там есть удаление или реплейс то просто поставь: если есть таг недропа, то он выдается вновь после операции.
 
1,202
31
185
Вот и именно что в контейнере блока ничегошеньки нет
Вот тебе метод markDirty()

Java:
@Override
    public void markDirty()
    {
        if(busy)
            return;
        ItemStack gunStack = getStackInSlot(0);
        if(gunStack == null || !(gunStack.getItem() instanceof ItemGun))
            return;
        
        gunType = ((ItemGun)gunStack.getItem()).type;
        
        //If we changed the gun (i.e. a new gun has been placed in the table)
        if(gunStack != lastGunStack)
        {
        
        
            busy = true;
            NBTTagCompound attachmentTags = gunStack.stackTagCompound.getCompoundTag("attachments");
            
            setInventorySlotContents(1, ItemStack.loadItemStackFromNBT(attachmentTags.getCompoundTag("barrel")));
            setInventorySlotContents(2, ItemStack.loadItemStackFromNBT(attachmentTags.getCompoundTag("scope")));
            setInventorySlotContents(3, ItemStack.loadItemStackFromNBT(attachmentTags.getCompoundTag("stock")));
            setInventorySlotContents(4, ItemStack.loadItemStackFromNBT(attachmentTags.getCompoundTag("grip")));
            
            genericScroll = 0;
            for(int i = 0; i < Math.min(gunType.numGenericAttachmentSlots, 8); i++)
                setInventorySlotContents(5 + i, ItemStack.loadItemStackFromNBT(attachmentTags.getCompoundTag("generic_" + i)));
            busy = false;
        }
        //Else we changed an attachment
        else
        {
            //Create a new NBT tag compound for our gun item
            NBTTagCompound gunTags = new NBTTagCompound();
            //Copy the ammo and paintjob from the old stack
             NBTTagCompound tag = new NBTTagCompound();
            gunTags.setTag("ammo", getStackInSlot(0).stackTagCompound.getTag("ammo"));
            if(getStackInSlot(0).stackTagCompound.getTag("Paint") != null)
                gunTags.setTag("Paint", getStackInSlot(0).stackTagCompound.getTag("Paint"));
            
            //Add each attachment from the inventory to our gun stack
            NBTTagCompound attachmentTags = new NBTTagCompound();
    
               writeAttachmentTags(attachmentTags, getStackInSlot(1), "barrel");
               writeAttachmentTags(attachmentTags, getStackInSlot(2), "scope");
               writeAttachmentTags(attachmentTags, getStackInSlot(3), "stock");
               writeAttachmentTags(attachmentTags, getStackInSlot(4), "grip");
    
               //Change all the attachments that we are looking at, but copy in the old ones
               for(int i = 0; i < gunType.numGenericAttachmentSlots; i++)
               {
                   if(i >= genericScroll * 4 && i < genericScroll * 4 + 8)
                   {
                       writeAttachmentTags(attachmentTags, getStackInSlot(i - genericScroll * 4 + 5), "generic_" + i);
                   }
                   else attachmentTags.setTag("generic_" + i, getStackInSlot(0).stackTagCompound.getTag("generic_" + i));
               }
              
               //Set the tags to be these new tags
               gunTags.setTag("attachments", attachmentTags);
               gunStack.stackTagCompound = gunTags;
        }
        
        lastGunStack = gunStack;
    }
Ящитаю здесь и происходит вся работа с нбт тегами, но дописать нбт тег недропа я не шарю как, уж больно туповат
Мисертес, суешь ган с другим тегом не флансовским, он его убирать будет, если у тебя фланс ваниль канешн)
 
87
1
12
Работал с этим кривым флансом. Криво работает его блок для модификации оружия.
Я как то переписывал этот блок, чтобы было нормальное чтения и запись тегов
Пример бага: если взять оружие с NEI(то есть выдать админкой, не через креатив) и засунуть в стол, то произойдет краш при модификации.
 
344
1
47
Попробуй так).

Java:
  if (itemstack.stackTagCompound.getTag("таг") != null)
        {
           nbt.setInteger("таг", 1);
        }

Ну, а если у тебя вообще все оружие не выпадает, то просто добавляй таг где и все остальные)
 
Последнее редактирование:
Сверху