Minecraftが引用符なしでTAG_Stringを登録するのはなぜですか?

Aug 20 2020

私はアイテムの属性修飾子を試してきました。興味深いのは、各属性修飾子にUUIDが必要なことです。だから私はキーボードのテンキーに乱数を打ち込むだけで自分で提供しました。

NBTでは、UUIDは次のようにフォーマットされた整数配列に格納されていることを知っています。

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

そして、これが私の完成したコマンドの2つです(これは最小限です):

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

エントリのようなエントリを数えるでしょう数として扱われる場合は、1つの例外があり12b512s82664。ただし、数値の形式が正しくなく、上記の引用符のない文字列のカテゴリに収まる場合、望まない場合でもそうなります。次の数のそっくりさんが文字列になります。

  • 先行ゼロのある数値:(012b04582s
    解決するには、数値から先行ゼロを削除します:(12b4582s
  • データ型の範囲外の数値:(255b2177548418058
    解決するには、正しいデータ型が指定されていることを確認してください:(255、  2177548418058l