Чанк: 98 304 позиции в столбе
Игра не держит в памяти весь мир. Она держит несколько тысяч столбов по 16×16 блоков — и всё, что происходит с вами, происходит внутри них.
Загрузчик не «дописывает» игру. Он даёт места, куда мод может вставить своё, не трогая чужой код.
Моддинг Minecraft стал отдельной школой программирования: результат виден сразу, а абстрактные классы превращаются в блоки, предметы и события. Вместо правки исходников мод подключается через загрузчик и API и регистрирует собственные элементы в предусмотренных точках.
Forge — широкая экосистема и много крупных сборок. Fabric легче, быстрее обновляется и собирается из модульных библиотек. Разница проявляется не в описании, а в зависимостях: под конкретную версию игры нужен загрузчик той же ветки и те библиотеки, которые он тянет. Сборка — это граф совместимости, а не папка с файлами: одна несовпавшая версия снимает половину списка.
Новый блок описывает свойства, форму, звуки, модель и локализованное имя, после чего регистрируется под уникальным идентификатором вида modid:block_name. Игра получает объект через реестр. Серверная часть отвечает за состояние и правила, клиентская — за то, как это нарисовать. Отсюда частая ошибка новичка: блок на сервере работает, а в клиенте его не видно, потому что клиентская часть не подключилась.
API отдаёт события: загрузка мира, нажатие, изменение блока, получение урона. Если нужного события нет, идут через точки внедрения и трансформацию байткода. Это работает и одновременно самый хрупкий механизм: чем больше чужого кода заменено, тем выше шанс конфликта с другим модом. Хороший тон — менять минимум и не трогать то, что можно просто прочитать.
С одного блока с одним свойством. Дальше — фиксировать версии игры, загрузчика и JDK, разделять клиентский и серверный код и читать журнал запуска вместо того, чтобы гадать по поведению в игре. Проверять мод в чистом профиле: если сборка падает, первым делом убирают чужие моды и оставляют свой.