นามสกุลไฟล์ไม่ได้บอกรูปแบบ Schematic — 31 จาก 33 ไฟล์ .schematic เป็นของรูปแบบอื่น
มีห้ารูปแบบ สี่วิธีในการจัดเก็บบล็อก และนามสกุล .schematic ถูกใช้ร่วมกันโดยสองรูปแบบ การตรวจสอบ NBT root ดีกว่าการเชื่อชื่อไฟล์ ซึ่งมีหลักฐานยืนยัน
มีรูปแบบ Schematic ห้าแบบที่ใช้กันอยู่ และนามสกุลไฟล์เป็นเพียงคำใบ้มากกว่าข้อเท็จจริง โปรแกรมดูไฟล์นี้จะตัดสินว่าไฟล์เป็นอะไรโดยการดูเนื้อหาภายใน และมีเหตุผลที่วัดผลได้สำหรับเรื่องนั้น
ห้ารูปแบบ ห้านามสกุล
| นามสกุล | รูปแบบ |
|---|---|
.nbt | โครงสร้างวานิลลา (vanilla structure) |
.schem | Sponge |
.schematic | Sponge — โดยค่าเริ่มต้น |
.litematic | Litematica |
.mcstructure | หินดาน (Bedrock) |
แถวที่มีปัญหาคือ .schematic นามสกุลนี้ถูกใช้ร่วมกันโดยรูปแบบ MCEdit คลาสสิก และของ Sponge และไฟล์มักถูกเปลี่ยนชื่อโดยผู้ที่ไม่รู้หรือไม่สนใจ
จากการนับข้อมูลจริง: จากไฟล์ .schematic จำนวน 33 ไฟล์ มี 31 ไฟล์เป็น MCEdit, หนึ่งไฟล์เป็นโครงสร้างวานิลลา และหนึ่งไฟล์เป็น Litematica ดังนั้น การคาดเดาเริ่มต้นจากนามสกุลจึงผิดเกือบทั้งหมด และสองไฟล์ไม่ได้เป็น .schematic ในความหมายใดๆ เลย — แค่ตั้งชื่อผิด
วิธีแก้ไขคือการตรวจสอบ NBT root และให้สิ่งที่ไฟล์ เป็น มีน้ำหนักมากกว่าสิ่งที่มันถูกเรียกว่า:
- คีย์
Regions→ Litematica paletteและblocks→ โครงสร้างวานิลลา- มิฉะนั้นจะทดสอบรูปร่าง MCEdit แล้วกลับไปใช้นามสกุล
สี่วิธีในการจัดเก็บบล็อกเดียวกัน
รูปแบบไม่ได้แตกต่างกันในด้านความสวยงาม แต่ละรูปแบบจัดเก็บข้อมูลบล็อกในวิธีที่แตกต่างกันอย่างแท้จริง และแต่ละทางเลือกก็มีผลลัพธ์ตามมา:
วานิลลา .nbt — รายการแบบกระจัดกระจาย (sparse list) หนึ่งรายการต่อบล็อกที่วาง แต่ละรายการระบุดัชนีพาเลท อากาศจะไม่มีอยู่ ดังนั้นการสร้างแบบกลวงจึงมีต้นทุนต่ำ
Sponge .schem — สตรีม varint ดัชนีพาเลทถูกบรรจุเป็นจำนวนเต็มที่มีความกว้างผันแปร (variable-width integers): เจ็ดบิตของข้อมูลต่อไบต์ โดยบิตสูงสุดถูกตั้งค่าเพื่อระบุว่ามีข้อมูลต่อ บล็อกที่มีพาเลทขนาดเล็กมีค่าใช้จ่ายหนึ่งไบต์ต่อบล็อก; พาเลทที่มีมากกว่า 127 รายการจะเริ่มมีค่าใช้จ่ายสองไบต์สำหรับดัชนีสูงๆ หนาแน่น แต่สามารถอธิบายตัวเองได้
MCEdit .schematic — อาร์เรย์ไบต์แบบแบน (flat byte array) หนึ่งไบต์ต่อบล็อก ดังนั้น สูงสุด 256 ชนิดบล็อก — ซึ่งเป็นเหตุผลว่าทำไมจึงต้องมีอาร์เรย์เสริม AddBlocks ที่บรรจุบิตที่ เก้า เป็น nibble ต่อบล็อก นี่คือรูปแบบ ID ตัวเลขแบบเก่าตั้งแต่ก่อนสถานะบล็อก และ ID ของมันจะถูกแก้ไขผ่านคอมพาวด์ SchematicaMapping แทนที่จะเป็นชื่อ
Litematica .litematic — longs ที่บรรจุบิต (bit-packed longs) ดัชนีจะถูกบรรจุที่ max(2, bits needed for the palette) บิตต่อรายการ โดยเริ่มจาก LSB-first และรายการอาจคร่อมขอบเขต ระหว่าง longs สองตัว พาเลท 5 รายการใช้ 3 บิตต่อบล็อก; พาเลท 300 รายการใช้ 9 บิต
ขีดจำกัดล่างของ 2 บิต มีความสำคัญ: แม้แต่พาเลทสองบล็อกก็ไม่สามารถบีบอัดได้ต่ำกว่า 2 บิตต่อรายการ ดังนั้นการสร้างแบบโมโนโครมจึงไม่เล็กเท่าที่คณิตศาสตร์แนะนำ
หินดาน (Bedrock) เป็นแบบ little-endian
.mcstructure เป็นตัวที่แตกต่างออกไปในระดับที่ต่ำกว่า: หินดาน (Bedrock) เขียน NBT แบบ little-endian ในขณะที่ทุกรูปแบบ Java เขียนแบบ big-endian สิ่งนี้ถูกตัดสินใจก่อนที่จะมีการแยกวิเคราะห์รูปแบบใดๆ — หากอ่านไบต์ด้วย endianness ที่ผิด คุณจะไม่ได้รับโครงสร้างที่ผิด แต่คุณจะได้ข้อมูลขยะที่ไม่สามารถแยกวิเคราะห์ได้เลย
สิ่งนี้หมายความในทางปฏิบัติ
หาก schematic ไม่สามารถเปิดได้ที่ใดที่หนึ่ง คำถามแรกไม่ใช่ "ไฟล์เสียหายหรือไม่" แต่เป็น "ไฟล์นี้เป็นไปตามที่ชื่อบอกหรือไม่" ไฟล์ .schematic จากหน้าดาวน์โหลดมีแนวโน้มที่จะเป็น MCEdit มากกว่า Sponge และเครื่องมือที่เชื่อถือส่วนขยายจะปฏิเสธไฟล์ที่ดีเยี่ยม
และเมื่อเปรียบเทียบการส่งออกสองรายการของการสร้างเดียวกัน ความแตกต่างของขนาดส่วนใหญ่เกี่ยวกับ การเข้ารหัส มากกว่าเนื้อหา — .nbt วานิลลาแบบกระจัดกระจายของการสร้างแบบกลวง และ .litematic ที่บรรจุบิตของสิ่งเดียวกันกำลังแก้ปัญหาที่แตกต่างกัน