
Scafall
Scafall - библиотека для разработки кроссплатформенных API и утилит для модов и плагинов Minecraft. Упрощает создание общих решений для Fabric, Forge, Bukkit и других платформ.
Scafall - это не мод, а инструмент для разработчиков. Если ты когда-нибудь пытался написать что-то, что работало бы и на сервере Bukkit, и на клиенте Fabric, то знаешь, как это больно. Scafall решает именно эту проблему: он даёт лёгкие прокси-интерфейсы, через которые можно передавать данные между платформами без привязки к конкретной реализации.
Как это работает
Всё строится на простых обёртках (wrappers). Разработчик создаёт API, которое принимает, скажем, ScafallItemStack. Внутри реализации этот объект "разворачивается" до нативного ItemStack из Minecraft, с ним работают, а результат обратно заворачивают. Другие моды или плагины просто оборачивают свои объекты (например, org.bukkit.inventory.ItemStack) и передают их в API.
Scafall использует Minecraft как источник истины - все прокси оборачивают именно ванильные типы. Если нужно обернуть что-то из Spigot или Paper, оно сначала конвертируется в нативный MC-тип.
Для кого это
Scafall - чисто разработческая штука. Игроки её не увидят, но если какой-то мод или плагин требует Scafall как зависимость - значит, автор решил сделать его кроссплатформенным. Это хорошо: меньше дублирования кода, меньше багов.
Ограничения
Важный момент: обёртки не предназначены для хранения в списках или мапах - это приведёт к утечкам памяти. Их используют только как параметры и возвращаемые значения в вызовах API.
Статус проекта
Scafall ещё в разработке. API нестабилен и может меняться без предупреждения. Не жди, что всё заработает из коробки прямо сейчас.
Дополнительные модули
На основе Scafall уже строятся другие библиотеки. Например:
- viewportl - UI-фреймворк на базе Compose Runtime для создания мощных и реактивных интерфейсов. Он использует Scafall, чтобы быть кроссплатформенным.
Если ты разрабатываешь что-то для нескольких платформ Minecraft - присмотрись к Scafall. Это не панацея, но хорошая основа для унификации.
