Compukter Kraft | Dev
Ох как же я устал от конфигурирования проекта мода в Gradle С одной стороны я хорошо знаю Gradle и знаю как сделать что угодно. С другой стороны есть всякие плагины для модлоадеров, которые совершенно не интуитивно работают с classpath и sourceSet Вот я…
Вообще я просто хочу добавить:
во-первых поддержку Kotlin в моде без KotlinForForge, потому что я не хочу завязываться на этот мод, он как-то странно поддерживается
во-вторых добавить поддержку Kotlin Scripting
всего-то...
А на деле это выливается в кучу проблем с внедрением этого всего в java мир Minecraft, знаю разраб HollowEngine тоже запарился, настала и моя очередь)
Пока я не сильно представляю как устроена разработка мода, зачем деобфусцировать я в целом понимаю, но тонкости упаковки мода, загрузки его модлоадером, а также конфигурация в Gradle - это пока неизведанное
во-первых поддержку Kotlin в моде без KotlinForForge, потому что я не хочу завязываться на этот мод, он как-то странно поддерживается
во-вторых добавить поддержку Kotlin Scripting
всего-то...
А на деле это выливается в кучу проблем с внедрением этого всего в java мир Minecraft, знаю разраб HollowEngine тоже запарился, настала и моя очередь)
Пока я не сильно представляю как устроена разработка мода, зачем деобфусцировать я в целом понимаю, но тонкости упаковки мода, загрузки его модлоадером, а также конфигурация в Gradle - это пока неизведанное
Не знаю почему, но что бы я не попробовал, везде натыкался на какую-то ошибку, о которой никто не знает. Копаться в исходниках мне не очень хочется, особенно Gradle плагинов, где люди забывают что такое типизация как правило
Пробовал разные плагины и в итоге решил остановится на чистом ForgeGradle 6
Почему-то 7-мая версия у меня не завелась, вылетел непонятный NPE, ишьюс не было никакого, поэтому я решил забить на него и откатиться на 6-ой
ModDevGradle(legacy) от neoforge завёлся, но мне была совсем непонятно как он управляет конфигурациями. Банально не полуилось подтянуть зависимость в мод (kotlin-stdlib). При запуске задачи runClient Forge не находил зависимость и классы в ней. В classpath разумеется было пусто. Я попробовал разные варианты прокидывания: и в рантайм, и в implementation, нейронки тоже ничего путного не подсказали.
Поэтому я решил попробовать использовать форджовский оригинальный Gradle плагин, ну нахер эти ваши обёртки
В целом ветки я оставил, может ещё вернусь к новым плагинам
Пробовал разные плагины и в итоге решил остановится на чистом ForgeGradle 6
Почему-то 7-мая версия у меня не завелась, вылетел непонятный NPE, ишьюс не было никакого, поэтому я решил забить на него и откатиться на 6-ой
ModDevGradle(legacy) от neoforge завёлся, но мне была совсем непонятно как он управляет конфигурациями. Банально не полуилось подтянуть зависимость в мод (kotlin-stdlib). При запуске задачи runClient Forge не находил зависимость и классы в ней. В classpath разумеется было пусто. Я попробовал разные варианты прокидывания: и в рантайм, и в implementation, нейронки тоже ничего путного не подсказали.
Поэтому я решил попробовать использовать форджовский оригинальный Gradle плагин, ну нахер эти ваши обёртки
В целом ветки я оставил, может ещё вернусь к новым плагинам
Compukter Kraft | Dev
УРААААААААААААА ПОБЕДАААААААААА СЛАВА ARCHITECTURY!!!!!!
В общем да... Я решил всё таки попробвать ещё раз. И у меня получилось, счастья полные штаны
В ForgeGradle 6 я тоже столкнулся с какой-то непонятной для меня нынешнего ошибкой, поэтому я снова переключился от нехотя на модный молодёжный плагин architectury, плюсом я скорее всего буду распространять мод на несколько модлоадеров и разумеется лучшим вариантом будет использовать architectury
+ Forge уже уходит в закат, а плагин NeoForge разумеется несовместим никак со старым Forge
Даже в architectury на сайте с инициализацией проекта у тебя выбор Forge доступен только на 1.20.x версиях. На 1.21.x на Forge писать уже моветон хах
В ForgeGradle 6 я тоже столкнулся с какой-то непонятной для меня нынешнего ошибкой, поэтому я снова переключился от нехотя на модный молодёжный плагин architectury, плюсом я скорее всего буду распространять мод на несколько модлоадеров и разумеется лучшим вариантом будет использовать architectury
+ Forge уже уходит в закат, а плагин NeoForge разумеется несовместим никак со старым Forge
Даже в architectury на сайте с инициализацией проекта у тебя выбор Forge доступен только на 1.20.x версиях. На 1.21.x на Forge писать уже моветон хах
Compukter Kraft | Dev
И вот я вернулся к ошибке, из-за которой забросил разработку этого мода... Как ни странно, но раньше у меня получалось работать с ModDevGradle от NeoForged и всё подгружалось... но да не важно уже )))
Просто в тупую подключить зависимости для Kotlin Scripting увы не получится, есть такой вот пакет с названием "native". А в Java слово "native" является зарезервированным и как название пакета использоваться не может. буду ремапить штош
Compukter Kraft | Dev
Просто в тупую подключить зависимости для Kotlin Scripting увы не получится, есть такой вот пакет с названием "native". А в Java слово "native" является зарезервированным и как название пакета использоваться не может. буду ремапить штош
Не совсем как оказалось. Проблема ещё глубже, на уровне загрузки этих зависимостей в мод.
Как я понял, самое лучшее решение - делать отдельный Jar со всей мишурой компиляторной и делать маленький слой взаимодействия с модом. Т.е. напрямую не пользоваться зависимостями для kts скриптов
Подключил нейронку для такого действия, буду внимательно изучать, так как всё это для меня в новинку
Как я понял, самое лучшее решение - делать отдельный Jar со всей мишурой компиляторной и делать маленький слой взаимодействия с модом. Т.е. напрямую не пользоваться зависимостями для kts скриптов
Подключил нейронку для такого действия, буду внимательно изучать, так как всё это для меня в новинку
Заодно я окончательно решил что буду использовать Architectury для своего мода
Довольно удобная штука в Cursor недавно появилась - Планы
Сейчас выстраиваю основной скелет, привлёк нейронку (GPT-5.4) Хочу узнать как вообще можно сделать, потому что у самого мыслей 0 🫠
Сейчас выстраиваю основной скелет, привлёк нейронку (GPT-5.4) Хочу узнать как вообще можно сделать, потому что у самого мыслей 0 🫠
Вот получается самая простейшая программа, как видно все интерфейсы пробрасываются из мода, и с компом можно взаимодействовать прямо из скрипта. Более того - ТИПОБЕЗОПАСНО.
Осталось только нормально ScriptDef описать чтобы всё соотестовало конфигурации в моде, потому что в моде зависимости в рантайме подтягиваются, что разумеется не пойдёт для @KotlinScript аннотации, которую кушает IDE
Осталось только нормально ScriptDef описать чтобы всё соотестовало конфигурации в моде, потому что в моде зависимости в рантайме подтягиваются, что разумеется не пойдёт для @KotlinScript аннотации, которую кушает IDE
В общем идея реализовать рантайм используя Kotlin Scripting - разбилась об этот же рантайм
К сожалению изолировать скрипты от хост системы не представляется возможным... А я возлагал такие надежды на Kotlin.
Максимум что можно было сделать - запускать sandbox средствами ОС, но это влечёт дикий оверхед на мод
Поэтому не долго думая я решил написать свой собственный компилятор и рантайм, используя за основу яп Kotlin. Разумеется для CK мне не нужен фулл функционал котлина, только базовые части, но это уже довольно много.
Так что работа снова пришла в начало)
К сожалению изолировать скрипты от хост системы не представляется возможным... А я возлагал такие надежды на Kotlin.
Максимум что можно было сделать - запускать sandbox средствами ОС, но это влечёт дикий оверхед на мод
Поэтому не долго думая я решил написать свой собственный компилятор и рантайм, используя за основу яп Kotlin. Разумеется для CK мне не нужен фулл функционал котлина, только базовые части, но это уже довольно много.
Так что работа снова пришла в начало)
В общем и целом я написал (точно я, поверьте мне) компилятор нового языка под коротким названием CKL (Compukter Kraft Language).
Сейчас пишу shell, а потом и ide(то, чего мне очень не хватало в CC) чтобы сделать полностью независимый стек.
Сейчас пишу shell, а потом и ide(то, чего мне очень не хватало в CC) чтобы сделать полностью независимый стек.