Panduan / Bangunan & Sumber Daya
Paket skin Bedrock itu empat berkas, dan dua mode kegagalannya senyap
Dua UUID yang harus berbeda, berkas lang yang bukan opsional, dan kunci skin yang membuang tanda baca — jadi 'My Skin!' dan 'My Skin?' menjadi satu skin tanpa galat.
.mcpack adalah zip dengan ekstensi berbeda, dan paket skin di dalamnya memerlukan tepat empat jenis berkas:
manifest.json a header and a skin_pack module, each with its own UUID
skins.json one entry per skin: texture, geometry, and a KEY
texts/en_US.lang the display names — skins.json holds only keys
*.png the textures themselves
Tiga dari empat mudah dilakukan dengan benar. Kegagalan yang menarik justru muncul dari hubungan di antara mereka.
Kedua UUID harus berbeda
manifest.json membawa UUID di header-nya dan satu lagi di modul skin_pack-nya:
{
"format_version": 1,
"header": { "name": "…", "uuid": "…", "version": [1, 0, 0] },
"modules": [ { "type": "skin_pack", "uuid": "…", "version": [1, 0, 0] } ]
}
Keduanya adalah dua identitas terpisah — paketnya, dan isi di dalam paket — dan memakai satu nilai untuk keduanya adalah galat nyata meskipun tidak ada yang mengeluh saat proses build.
Ada konsekuensi kedua yang lebih halus: impor ulang dengan UUID yang sama dianggap sebagai paket yang sama, dan Minecraft diam-diam mempertahankan salinan yang sudah dimilikinya. Menyunting paket, membangunnya ulang dengan pengenal yang sama, lalu mengimpor ulang akan terlihat seperti tidak terjadi apa-apa. Setiap build dari halaman ini mendapatkan UUID baru justru karena alasan itu, yang juga menjadi sebab mengapa mengimpor ulang paket yang telah disunting memerlukan unduhan baru alih-alih zip ulang dari yang lama.
Berkas lang bukan opsional
skins.json tidak pernah berisi nama tampilan. Ia berisi kunci, dan texts/en_US.lang memetakan kunci itu ke teks:
skinpack.<PackKey>=My Pack
skin.<PackKey>.<SkinKey>=My First Skin
Kirimkan paket tanpa berkas lang dan tidak ada galat — setiap skin hanya muncul di dalam game dengan kunci mentahnya. Inilah alasan paling umum sebuah paket yang dirakit manual terlihat rusak padahal validasinya baik-baik saja.
Kunci membuang tanda baca, dan duplikat menyatu
Kunci harus alfanumerik. Segala hal lainnya dihapus:
| namamu | kunci |
|---|---|
My Skin! | MySkin |
My Skin? | MySkin |
Skin #2 | Skin2 |
!!! | Skin1 (fallback, berdasarkan posisi) |
Dua baris pertama adalah jebakannya. Dua skin yang dinamai berbeda oleh manusia menjadi satu kunci, dan kunci duplikat tidak menghasilkan galat — ia diam-diam menyatu menjadi satu skin di dalam game. Kamu mengunggah dua belas skin, mendapat sebelas, dan tidak ada yang memberi tahu skin mana yang hilang.
Pembangun di sini mencegahnya dengan menambahkan penghitung ke kunci apa pun yang sudah dipakai, sehingga MySkin kedua menjadi MySkin2. Perlu diketahui jika kamu merakit paket secara manual: pemeriksaan yang kamu butuhkan ada pada nama yang sudah dibuang tanda bacanya, bukan pada nama yang kamu ketikkan.
Nama yang seluruhnya berupa tanda baca tidak menyisakan apa pun, sehingga ia jatuh ke Skin ditambah posisinya dalam daftar.
Slim memerlukan string geometri yang tepat
Setiap entri menyebutkan sebuah model, dan ada dua:
geometry.humanoid.custom— klasik, lengan 4 pikselgeometry.humanoid.customSlim— slim, lengan 3 piksel
Kesalahan di sini adalah penyebab umum skin berproporsi Alex muncul dengan lengan kotak milik Steve. Teksturnya baik-baik saja; modelnya yang salah diminta. Pembangun paket menebaknya dari dua kolom yang dibiarkan kosong oleh lengan slim (x 54–55) dan membiarkanmu mengoreksinya per entri, tetapi skins.json yang ditulis manual harus menyebutkannya secara eksplisit, dan kedua string itu berbeda empat karakter di bagian akhir.
Entri juga membawa "type": "free", dan cape adalah PNG tambahan opsional yang dirujuk dari entri yang sama — cape ikut di dalam paket skin, bukan sebagai unduhan terpisah.