Пришло время рассказать что за это время я несделал и над чем я вообще работаю...
Прежде всего я сделал достаточно большой перерыв в разработке, чтобы обдумать, чего я вообще хочу от движка и как оно должно выглядеть. Прежде всего я слил HollowCore и HollowEngine в один мод, а также тяжёлый компилятор в ближайшем будущем будет устанавливаться отдельно от мода. Подробнее об этом я писал на моём Boosty (пост бесплатный).
А скриптинг в моде уходит от довольно разрозненных объектов вроде
крафты, сюжет, события, модификации, диалоги, интерфейсы и др.Вместо них теперь остаётся буквально парочка универсальных: Компоненты (например,
.entity-component.kts) и События (например, .handler.kts). Компоненты позволяют хранить данные, а события их обрабатывать.Компоненты можно крепить к большинству объектов игры: предметы, блоки, мобы, чанки, измерения и мир целиком.
Будет довольно много встроенных компонентов, которые будут реализовывать те или иные свойства. Например, если взять компоненты
Кирка и Топор и нацепить на предмет, то он получить соответствующие свойства, а также автоматически создаст зависимые компоненты, например `Прочность`, т.е. предмет с этими компонентами сможет копать камень и рубить дерево. Ну и разумеется эти компоненты будут иметь настройки (скорость копания, радиус, уровень добычи и т.п.), а также появится новый инструмент для настройки этих компонентов через визуальный редактор.Это лишь пример, того, как это можно применить и совмещать. Аналогично можно добавлять различную логику и тем же мобам и блокам.
Но что там по сюжету? - он тоже технически является компонентом. То есть с переходом на эту систему, сюжет можно привязывать к игрокам, самим нпс, даже к серверу целиком. Да, вместо того, чтобы адаптировать одну систему под несколько условий, я просто свалил всю ответственность на вас, которые будут писать эти скрипты :)
Вторая система - это события, по сути она представляет собой более удобную систему (Neo)Forge, но не зависимую от модлоадера:
@SubscribeEvent
fun RenderEntityEvent.Pre.`Срабатывает при отрисовке мобов`() {
// Получение компонента, либо завершение вызова при отрисовке сущности
val model = owner.getOrNull<ModelComponent>() ?: return
model.render(...) // Отрисовка через сам компонент
isCanceled = true // Отмена стандартной отрисовки сущности
}
Это псевдокод компонента модели, который можно нацепить на любую сущность в игре и изменить её модель.
А чтобы не настраивать так каждого моба/предмет/блок внутри игры появятся префабы, как и в большинстве нормальных игровых движков :D
Работать это будет просто - создаёте новый файл для сущности или другого объекта:
/hollowengine/prefabs/entity/my_npc.prefab и настраиваете его компоненты в IDE мода, после чего при /reload движок сам добавит его, как нового моба, которого можно призвать через что-то вроде: /summon hollowengine:prefabs/my_npc.Надеюсь вышло не слишком сложно и много, поскольку всё что я описал, это лишь порядка 15% от реальных объёмов работы, которая была проделана. А я тут старался особо сложные моменты обходить стороной... Но если кому-то интересно, то на Boosty, я расписывал более подробно эти темы, плюс там ещё есть пара моих мыслей про мой аналог FTB Quests на базе этих систем, который я точно скоро начну делать 🙃
Готовых инструментов по началу будет меньше, но функционала станет существенно больше. Думаю подобные системы сильно упростят разработку не только сюжета, но и разного контента для сборок, построек, карт и других интересных проектов.
P.S. Подходящих картинок или видео для поста не нашёл, но постараюсь в ближайшие дни пару демонстраций записать :)