MC Toolkit

Руководства / Команды и данные

Расширение не сообщает вам формат схематики — 31 из 33 файлов .schematic оказались чьей-то догадкой

Пять форматов, четыре разных способа упаковки блоков, и .schematic используется двумя из них. Определение корня NBT надёжнее доверия к имени файла — с подтверждёнными данными.

В обращении находится пять форматов схематик, и имя файла — это скорее подсказка, чем факт. Просмотрщик здесь определяет, что это за файл, заглядывая внутрь него, и на это есть измеренная причина.

Пять форматов, пять расширений

расширениеформат
.nbtванильная структура
.schemSponge
.schematicSponge — по умолчанию
.litematicLitematica
.mcstructureBedrock

Проблемная строка — .schematic. Это расширение используется совместно классическим форматом MCEdit и форматом Sponge, а файлы переименовывают люди, которые не знают или которым всё равно.

Подсчитано на реальном корпусе: из 33 файлов .schematic 31 был MCEdit, один — ванильной структурой, а один — Litematica. Так что догадка по умолчанию на основе расширения ошибочна почти для всех них, а два файла не были .schematic ни в каком смысле — просто неправильно названы.

Решение — определить корень NBT и позволить тому, чем файл является, победить то, как он называется:

  • ключ Regions → Litematica
  • palette и blocks → ванильная структура
  • иначе проверка формы MCEdit, затем откат к расширению

Четыре способа упаковать одни и те же блоки

Форматы различаются не косметически. Каждый хранит данные о блоках по-настоящему по-разному, и каждый выбор имеет последствия:

Ванильный .nbt — список. Одна запись на сохранённую позицию, каждая называет индекс палитры. Воздух хранится как любой другой блок; опускается только пустой блок, так что полая постройка дёшева только если её внутренность была заполнена пустотой перед сохранением.

Sponge .schem — поток varint. Индексы палитры упакованы как целые переменной ширины: семь бит полезной нагрузки на байт, старший бит установлен для продолжения. Маленькие палитры стоят один байт на блок; палитра свыше 127 записей начинает стоить два для высоких индексов. Плотно, но самоописательно.

MCEdit .schematic — плоский массив байтов. Один байт на блок, поэтому максимум 256 типов блоков — именно поэтому у него есть необязательный боковой массив AddBlocks, добавляющий ещё четыре бита id как полубайт на блок, так что id достигают 4 095. Это устаревший формат числовых id из времён до состояний блоков: его id — это числа, разрешаемые через составное SchematicaMapping, когда Schematica его записывала, и через ванильную таблицу id 1.12 в противном случае.

Litematica .litematic — битово упакованные long. Индексы упакованы ровно по max(2, bits needed for the palette) бит каждый, начиная с младшего бита, и запись может пересекать границу между двумя long. Палитра из 5 записей использует 3 бита на блок; из 300 записей — 9.

Минимум в 2 бита важен: даже палитра из двух блоков не сжимается ниже 2 бит на запись, так что монохромная постройка не так мала, как suggests математика.

Bedrock — little-endian

.mcstructure — исключение на более низком уровне: Bedrock записывает little-endian NBT, тогда как каждый формат Java пишет big-endian. Это решается до любого разбора формата — прочитайте байты с неправильной endianness, и вы получите не неправильную структуру, а мусор, который вообще не разбирается.

Что это значит на практике

Если схематика где-то не открывается, первый вопрос — не «файл повреждён», а «этот файл — то, что написано в его имени». .schematic со страницы загрузки гораздо вероятнее окажется MCEdit, чем Sponge, и инструмент, доверяющий расширению, отвергнет совершенно хороший файл.

И при сравнении двух экспортов одной и той же постройки различия в размере в основном касаются кодирования, а не содержимого — ванильный .nbt с пустотами для полой постройки и битово упакованный .litematic для того же самого решают разные задачи.

3D-просмотр схематик →

Другие руководства

Смотреть все →