پسوند فایل فرمت شماتیک را مشخص نمیکند — 31 از 33 فایل .schematic حدس چیز دیگری بودند
پنج فرمت، چهار روش مختلف بستهبندی بلوکها، و .schematic بین دو مورد از آنها مشترک است. بررسی ریشه NBT بر اعتماد به نام فایل برتری دارد، همراه با شواهد آماری.
پنج فرمت شماتیک در گردش است و نام فایل بیشتر یک سرنخ است تا یک واقعیت. نمایشگر در اینجا با نگاه کردن به درون فایل تصمیم میگیرد که چیست، و برای این کار دلیل مشخصی وجود دارد.
پنج فرمت، پنج پسوند
| پسوند | فرمت |
|---|---|
.nbt | سازه وانیلا |
.schem | Sponge |
.schematic | Sponge — بهطور پیشفرض |
.litematic | Litematica |
.mcstructure | Bedrock |
ردیف مشکلساز این است .schematic. That extension is shared by the MCEdit کلاسیک فرمت و Sponge، و فایلها توسط افرادی که نمیدانند یا اهمیت نمیدهند تغییر نام پیدا میکنند.
شمارششده در یک مجموعه واقعی: از 33 .schematic files, 31 were MCEdit, one was a vanilla structure and one was a Litematica. بنابراین حدس پیشفرض پسوند تقریباً برای همه آنها اشتباه است، و دو فایل اصلاً نبودند .schematic in any sense — just misnamed.
راه حل این است که ریشه NBT بررسی شود و اجازه دهیم ماهیت واقعی فایل هست بر نام ظاهری آن پیروز شود:
- a
Regionskey → Litematica paletteوblocks→ vanilla structure- در غیر این صورت آزمایش شکل MCEdit، سپس بازگشت به پسوند
چهار روش برای بستهبندی بلوکهای یکسان
تفاوت فرمتها ظاهری نیست. هر کدام دادههای بلوک را به روشی واقعاً متفاوت ذخیره میکنند، و هر انتخاب پیامدی دارد:
Vanilla .nbt — a sparse list. یک ورودی برای هر بلوک قرارگرفته، که هر کدام به یک شناسه پالت اشاره دارد. هوا اصلاً وجود ندارد، بنابراین ساخت سازه توخالی کمحجم است.
Sponge .schem — a varint stream. شناسههای پالت به صورت اعداد صحیح با عرض متغیر فشرده شدهاند: هفت بیت بار مفید در هر بایت، بیت بالا برای ادامه تنظیم شده است. پالتهای کوچک یک بایت برای هر بلوک هزینه دارند؛ پالتی با بیش از 127 ورودی برای شناسههای بالا به دو بایت نیاز پیدا میکند. متراکم، اما خودتوصیفگر.
MCEdit .schematic — a flat byte array. یک بایت برای هر بلوک، بنابراین حداکثر 256 نوع بلوک — که دقیقاً به همین دلیل به یک AddBlocks side-array packing a نهم بیت به صورت یک نیمبایت در هر بلوک نیاز دارد. این یک فرمت قدیمی شناسه عددی از دوران قبل از حالتهای بلوک است، و شناسههای آن از طریق یک SchematicaMapping compound rather than being names.
Litematica .litematic — bit-packed longs. شناسهها دقیقاً در اندازه max(2, bits needed for the palette) bits each, LSB-first, and an entry may straddle the boundary between two longs. A 5-entry palette uses 3 bits per block; a 300-entry one uses 9.
حداقل مقدار 2 بیت اهمیت دارد: حتی یک پالت دو بلوکی به کمتر از 2 بیت در هر ورودی فشرده نمیشود، بنابراین یک سازه تکرنگ به اندازه محاسبات ریاضی کوچک نیست.
Bedrock از نوع little-endian است
.mcstructure is the odd one out at a lower level: Bedrock writes NBT از نوع little-endian در حالی که تمام فرمتهای Java به صورت big-endian مینویسند. این موضوع قبل از پردازش هر فرمتی تعیین میشود — اگر بایتها با ترتیب بایت اشتباه خوانده شوند، با یک سازه اشتباه مواجه نمیشوید، بلکه با دادههای بیارزشی مواجه میشوید که اصلاً قابل پردازش نیستند.
معنای کاربردی این موضوع چیست
اگر یک شماتیک در جایی باز نمیشود، اولین سوال این نیست که «آیا فایل خراب است» بلکه این است که «آیا این فایل همان چیزی است که نامش میگوید». یک .schematic from a download page is much more likely to be MCEdit than Sponge, and a tool that trusts the extension will reject a perfectly good file.
و هنگام مقایسه دو خروجی از یک سازه، تفاوت حجم بیشتر به خاطر کدگذاری است تا محتوا — یک سازه خلوت وانیلا .nbt of a hollow build and a bit-packed .litematic of the same thing are solving different problems.