Как сохранить NBT при крафте?

Версия Minecraft
1.15.2
API
Forge
17
1
0
Доброго времени суток. У меня 2 вопроса:
1. Недавно начал использовать Nbt, но не знаю где лучше создавать CompoundNBT предмета. Метод onCreated в креативе не вызывается. Ещё есть initCapabilities, но не знаю, для этого он или нет.

2. Хочу реализовать следующую идею: в инвентаре есть мешок, в который, путём совмещения в верстаке с пылью, мы кладём эту пыль (увеличиваем переменную в NBT). Можете посоветовать как это сделать?

Заранее спасибо.
 
1,038
57
229
первая же ссылка
[Гайд][1.8] NBT : Создание собственных переменных
877514852e.jpg


ну и конечно Учебник Работа с иходниками - MC Modding Учебник
открываете по очереди все предметы из игры, смотрите есть ли NBT, если есть смотрите что делает и как он им пользуется.
 
Последнее редактирование:
17
1
0
Ну да, версия 1.8 и 1.15.2 ничем же не отличаются. Вы сами этот гайд читали? Я читал. Уже даже метода onUpdate в классе Item нету! И если бы я нашёл ответ на свой вопрос в предметах игры, я бы эту тему не создавал. Конечно, проще сказать "иди туда, посмотри там", чем ответить "да, нужно делать так" или "не надо так".
 
1,038
57
229
Java:
CompoundNBT nbtvenom = itemstack1.getOrCreateChildTag(MoDrops.modid + "has_bee_venom");
boolean has_venom = nbtvenom.getBoolean(MoDrops.modid + "has_bee_venom");              
MoDrops.logger.debug(has_venom);


"да, нужно делать так" или "не надо так".
ааа, тебе только ответ нужен. Да, мне кажется будет логичным работать с NBT. Изначально он есть только в ItemStack, то есть ItemStack#getTag and ItemStack#setTag

ну и чужой код наверное поможет больше [1.15.2] ItemStack capability data lost when changing ItemStack
 
Последнее редактирование:
17
1
0
Мне непонятно как сделать крафт, в котором мы из предмета-ингредиента забираем nbt и переносим в nbt получившегося предмета. Например: есть моды, в которых ты из батарейки крафтишь инструмент, а заряд инструмента остаётся как был у батарейки.
 
7,099
324
1,510
Нужно сделать свою реализацию IRecipe, в ней сможешь написать любую логику крафта, без ограничений json
 
205
12
103
В качестве примера покажу свою реализацию: Тык

Как это работает: При неопределенных событиях на пергамент наносится UUID человека, который по нему кликает. Если пергамент с записанным владельцем положить в верстак вместе с любой реликвией - на выходе мы получим реликвию, в которую скопируется UUID владельца с пергамента.

Что для этого нужно: Банально - нам нужно знать лишь сырой путь к НБТ-тэгу. В моем случае это owner, что можно увидеть тут. При крафте проверяем, есть ли у пергамента записанный юид игрока, и если всё сходится - переписываем его на нашу реликвию. Стоит учесть, что на реликвии могут быть и другие НБТ-теги. В моем случае это прочность, опыт, счетчики и прочая неинтересная дичь. Эти данные также следует копировать на новую реликвию, которую мы получим после крафта. Делается это посредством копирования НБТ с предмета из сетки крафта.

На выходе получим реликвию, в которую будет записан ее владелец, а все данные, что были в ней до крафта, также останутся на месте.
 
7,099
324
1,510
Иногда правильный. Например, вот в этом аддоне для тфк сделано сохранение и перенос пдписи кузнеца с детали инструмента при крафте с палкой
 
Сверху