Основная цель scafall — предоставить лёгкое решение для обёртывания при создании кроссплатформенных API. Вторая цель — предоставить утилиты для наиболее часто используемых частей каждой платформы, таких как задачи и планирование, или удобные утилиты для Kotlin-библиотек вроде Adventure.
Примечание: Scafall — это библиотека для разработки, не предназначенная для использования игроками и не предоставляющая игровых возможностей. Другие плагины/моды могут требовать её как зависимость.
Прокси-интерфейсы
Scafall избегает обёртывания каждой возможности платформы/Minecraft, предоставляя простые интерфейсы-обёртки, которые используются лишь как своего рода прокси.
API (созданный разработчиком плагина/мода) принимает обёртки в качестве аргументов (например,
ScafallItemStack) в функциях.Реализации этих функций выполняют
unwrap()аргументов-обёрток до нативного объекта Minecraft, работают с ними (например,ItemStack) и выполняютwrap()любого возвращаемого значения.Другие моды/плагины выполняют
wrap()своих платформенно-специфичных объектов (например,org.bukkit.inventory.ItemStack) и передают их в API.
Эти интерфейсы лёгкие и предоставляют доступ к очень немногим свойствам обёрнутого объекта. Идея состоит в том, чтобы использовать их исключительно как средство передачи между модами/плагинами, API и реализацией, что позволяет легче делиться общим кодом между платформами.
Scafall использует Minecraft как эталон, поэтому прокси всегда обёртывают нативные типы Minecraft.
При обёртывании других платформенных типов они сначала преобразуются в нативные типы MC.
(Объекты Spigot/Paper обычно сами являются обёртками, и в этом случае используется просто их обёрнутое значение)
