Задать описание (lore) предмету.

Версия Minecraft
1.16.5
API
Forge
42
2
2
Всех приветствую!

У меня есть некий контейнер. И я в него должен добавить свой предмет с кастомным описанием. То есть, создать ItemStack с тегом на Lore.
Командой можно это сделать как-то так: /give @p minecraft:white_wool{display:{Lore:['{"text":"Это - легендарный артефакт"}','{"text":"это - козья борода"}']}}
(За работоспособность команды не ручаюсь)

Как такое лучше всего сделать в коде?
Одно условие: Никаких затрагиваний рендера и всё должно выполняться от Dist.DEDICATED_SERVER
Версия: 1.16.5
 
345
25
94
Как такое лучше всего сделать в коде?
Одно условие: Никаких затрагиваний рендера и всё должно выполняться от Dist.DEDICATED_SERVER
Условия кринж, но дело твоё. В таком случае, просто делай как сам сказал:
То есть, создать ItemStack с тегом на Lore.
 
116
13
13
У Item есть метод appendHoverText, который позволяет добавить строки описания. В крайнем случае делать перезапись nbt-тега у ItemStack (структура этого nbt есть в методе ItemStack#getTooltipLines()
 
Последнее редактирование:
1,369
112
241
У игрока же отобразиться описание этого предмета
Мод, который хочет автор, - server-side-only. Поставил на сервер и игроку ставить его не надо.
appendHovertext - client метод. Он вызывает получение тэга Lore и добавляет его в List с Component.
Позже этот лист отрисовывается в GUI'шке.
Иначе говоря, при твоём решении нужно будет ставить мод на клиент.
 
42
2
2
А что, разве эта часть просто не убирается на стороне сервера?
У игрока же отобразиться описание этого предмета
Если именно NBT редактировать, то нет. Это же просто свойство предмета. Оно есть и на клиенте и на сервере.
 
116
13
13
Мод, который хочет автор, - server-side-only
Ну, это и так понятно.
Иначе говоря, при твоём решении нужно будет ставить мод на клиент.
С чего вдруг. Сервер же просто контроллит свою часть и вырежет клиентское. На клиенте как раз и должен появится этот блок с клиентским кодом.
Если именно NBT редактировать, то нет.
Да это понятно. Просто путем прямого редактирования nbt как-то запарно выходит. Столько операций по получению nbt и его изменения, чтобы в итоге добавить несколько строчек с описанием предмета
 
1,369
112
241
С чего вдруг. Сервер же просто контроллит свою часть и вырежет клиентское. На клиенте как раз и должен появится этот блок с клиентским кодом.
А откуда клиент об этом узнает? Из прямого контакта с инопланетянами?
Ещё раз: appendHoverText - клиентский метод (в том плане, что вызывается он только на клиенте; сервер о нём знает, но не использует), о нём должен знать клиент. И чтобы клиент о нём знал, мод должен стоять на клиенте.
Автор темы же хочет чтобы мод достаточно было поставить ТОЛЬКО на сервер.

В таком случае, appendHoverText будет пуст (т.к. со стороны клиента нет никаких изменений), а Lore полетит прямиком в рендер из тэгов.
 
116
13
13
В таком случае, appendHoverText будет пуст
Ладно, это правда, спасибо. Просто было бы неплохо не вешать на них аннотацию сайда, чтобы можно было задать описание непосредственно на сервере, а не долбиться с перезаписыванием nbt
 
1,369
112
241
Просто было бы неплохо не вешать на них аннотацию сайда, чтобы можно было задать описание непосредственно на сервере, а не долбиться с перезаписыванием nbt
Да даже если и так, что-то выводить на сервере?
Этот метод вызывается только в ItemStack#getTooltipLines, а последний, в свою очередь, вызывается только в классах Minecraft, Screen, CreativeModInventoryScreen и ItemTooltipEvent. Т.е. хоть сервер и знает об этом методе, он его ВООБЩЕ НИГДЕ не использует.
Вешай на него Dist, не вешай - разницы 0, если он используется только на клиенте. Сервер об этой штуке никогда не узнает.
 
116
13
13
Вешай на него Dist, не вешай - разницы 0, если он используется только на клиенте. Сервер об этой штуке никогда не узнает.
Ну так мы же говорим о том, чтобы задать описание предмету. Ты же в пред. сообщении как раз и сказал, что всех операций из appendHoverText попросту не будет, т.к. мод серверный
 
Сверху