Mengapa Minecraft mendaftarkan TAG_String tanpa tanda kutip?
Saya telah bereksperimen dengan pengubah atribut pada item. Yang menarik adalah setiap pengubah atribut membutuhkan UUID. Jadi saya telah menyediakannya sendiri dengan hanya menekan angka acak pada papan nomor keyboard saya.
Saya tahu bahwa di NBT, UUID disimpan dalam Integer Array, yang diformat seperti ini:
[I;1,2,3,4,5,6]
Dan berikut adalah dua dari perintah saya yang telah selesai (ini seminimal mungkin):
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
Jika Anda tidak ingin menjadi serumit itu, saya telah mengupasnya seminimal mungkin, dengan perintah ini menggunakan tag yang ditentukan pengguna (mereka tidak melakukan apa pun selain membuatnya terlihat lebih bersih :)
give @p dirt{MyIntArray:[I;123,345,567,789]}
give @p dirt{MyIntArray:[I;123,456,789,012]}
Pada kedua contoh di atas, salah satunya menyebabkan kesalahan. Yang lainnya tidak. Tapi yang saya lakukan hanyalah memasukkan nomor yang berbeda. Apa masalahnya?
Jawaban
Ini adalah beberapa perilaku yang sangat menarik yang saya temukan saat menjawab pertanyaan ini . Saya ingin membagikan temuan saya di posting ini. Biarlah itu menjadi panduan untuk menggunakan NBT.
Pertimbangkan CanDestroy
pernyataan sederhana . Jika dipikir-pikir, tampilannya akan seperti ini:
/give @s minecraft:diamond_pickaxe{CanDestroy:["minecraft:dirt"]}
Tetapi beberapa posting tidak memiliki tanda kutip di sekitar nilainya. Mencoba perintah mereka, misalnya: /give @s dirt{CanDestroy:[dirt]}
. Apakah itu bekerja?
Anehnya, ya .
Tampaknya, Anda tidak perlu mengetikkan tanda kutip di sekitarnya jika string Anda hanya terdiri dari karakter berikut (tidak termasuk spasi):
+-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
Satu-satunya pengecualian adalah jika entri diperlakukan sebagai nomor, yang akan menghitung untuk entri seperti 12b
, 512s
, dan 82664
. Tetapi jika nomor diformat salah dan akan cocok dengan kategori string quoteless di atas, itu akan , bahkan jika Anda tidak menginginkannya. Angka serupa berikut akan menjadi string:
- Angka-angka dengan nol di depan: (
012b
,04582s
)
Untuk menyelesaikannya, hapus angka-angka nol di depan dari angka-angka Anda: (12b
,4582s
) - Angka di luar rentang tipe data Anda: (
255b
,2177548418058
)
Untuk menyelesaikannya, pastikan tipe data yang benar ditentukan: (255
,2177548418058l
)