Почему Minecraft регистрирует TAG_String без кавычек?

Aug 20 2020

Я экспериментировал с модификаторами атрибутов предметов. Что интересно, каждый модификатор атрибута требует UUID. Так что я сделал это сам, просто набрав случайные числа на цифровой клавиатуре.

Я знаю, что в NBT UUID хранится в целочисленном массиве, который имеет следующий формат:

[I;1,2,3,4,5,6]

И вот две из моих выполненных команд (это минимально):

give @p diamond_sword{AttributeModifiers:[{AttributeName:"generic.attack_damage",Name:"generic.attack_damage",Amount:1,Operation:0,UUID:[I;385638563,384738473,018492747,395785936]}]} 1
give @p diamond_sword{AttributeModifiers:[{AttributeName:"generic.attack_damage",Name:"generic.attack_damage",Amount:1,Operation:0,UUID:[I;828748274,736284721,276385632,174612674]}]} 1

Если вы не хотите усложнять себе жизнь, я сократил ее до минимума, используя в этих командах пользовательские теги (они ничего не делают, но делают вид чище :)

give @p dirt{MyIntArray:[I;123,345,567,789]}
give @p dirt{MyIntArray:[I;123,456,789,012]}

В обоих приведенных выше примерах один из них вызывает ошибку. Другой - нет. Но все, что я сделал, это ввел разные числа. В чем может быть проблема?

Ответы

1 ExpertCoder14 Aug 20 2020 at 09:19

Это очень интересное поведение, которое я обнаружил, отвечая на этот вопрос . Я хотел бы поделиться своими выводами в этом посте. Пусть это будет руководство по использованию NBT.


Рассмотрим простое CanDestroyутверждение. Когда вы думаете об этом, это выглядит так:

/give @s minecraft:diamond_pickaxe{CanDestroy:["minecraft:dirt"]}

Но в некоторых сообщениях значение не заключено в кавычки. Попробуйте свои команды, например: /give @s dirt{CanDestroy:[dirt]}. Это работает?

Удивительно, но да .

По-видимому, вам не нужно вводить окружающие кавычки, если ваша строка состоит только из следующих символов (пробелы не включены):

+-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz

Единственное исключение, если запись рассматривается как число, которое будет рассчитывать для записей , как 12b, 512sи 82664. Но если число отформатировано неправильно и вписывается в указанную выше категорию строк без кавычек, так и будет , даже если вы этого не хотите. Следующие числа двойников станут строками комиксов:

  • Числа с ведущими нулями: ( 012b, 04582s)
    Чтобы решить, удалите ведущие нули из ваших чисел: ( 12b, 4582s)
  • Числа вне диапазона вашего типа данных: ( 255b, 2177548418058)
    Чтобы решить, убедитесь, что указан правильный тип данных: ( 2552177548418058l)