Ругаюсь на компилятор, день 4 😶🌫️
Проблема с разбором зависимостей полностью решена (ну или по крайней мере на отсутствующие классы я больше не натыкался).
Навайбкодил себе несколько тестов и вроде как никаких ошибок нет. Ну, вернее все ошибки которые тут есть, они и должны быть))
Сейчас последняя проблема в том, что компилятор падает уже в самой игре из-за того, что Minecraft и Компилятор Kotlin используют разные версии библиотеки FastUtil. И тут есть 2 варианта:
1) Переименовать все файлы этой библиотеки и места где она используется.
2) Вырезать компилятор из мода и предоставлять его отдельным файлом.
В целом по сложности задачи примерно одинаковые, так что я думаю выбрать второй вариант, чтобы поставлять компилятор отдельно от движка. К тому же это решит проблему с большим весом мода, сократив его где-то до 15-25 МБ. А сам компилятор можно будет докачать без перезапуска игры.
Но, скажем так, самое сложное теперь позади, к тому же я теперь понимаю как работает около 70% всего нового компилятора 🙃
Проблема с разбором зависимостей полностью решена (ну или по крайней мере на отсутствующие классы я больше не натыкался).
Навайбкодил себе несколько тестов и вроде как никаких ошибок нет. Ну, вернее все ошибки которые тут есть, они и должны быть))
Сейчас последняя проблема в том, что компилятор падает уже в самой игре из-за того, что Minecraft и Компилятор Kotlin используют разные версии библиотеки FastUtil. И тут есть 2 варианта:
1) Переименовать все файлы этой библиотеки и места где она используется.
2) Вырезать компилятор из мода и предоставлять его отдельным файлом.
В целом по сложности задачи примерно одинаковые, так что я думаю выбрать второй вариант, чтобы поставлять компилятор отдельно от движка. К тому же это решит проблему с большим весом мода, сократив его где-то до 15-25 МБ. А сам компилятор можно будет докачать без перезапуска игры.
Но, скажем так, самое сложное теперь позади, к тому же я теперь понимаю как работает около 70% всего нового компилятора 🙃
❤2🔥2❤🔥1
Компилятор ругается на меня, день 5 😨
Ну что же, я полностью вынес компилятор в отдельный
Ну а сам компилятор ставится отдельно, на текущий момент просто нужно положить файл компилятора в папку
Кроме того, новая система пока что ест меньше ресурсов, чем прошлая, поскольку во время тестов потребление памяти у меня было не выше 2гб ОЗУ (но не исключено, что это потому что я в мир за заходил :D)
Короче говоря осталось только добавить авто дополнение и парочку мелких правок под конкретные загрузчики модов и можно выпускать дроп!
Ну что же, я полностью вынес компилятор в отдельный
.jar файл. Теперь HollowEngine весит лишь 27мб, если кому-то интересно:- Ассеты (8мб)
- шрифты: ~5мб, которые я потом оптимизирую;
- модели: ~1мб;
- текстуры: ~3мб, тоже вероятно сожму или почищу, ибо там много лишнего
- Библиотеки (18мб)
- Fabric API + ClassGraph: ~2.5мб
- Движок Kool: ~6мб
- Kotlin: ~8мб
- Сам движок: 8мб
Ну а сам компилятор ставится отдельно, на текущий момент просто нужно положить файл компилятора в папку
hollowengine и всё будет работать!Кроме того, новая система пока что ест меньше ресурсов, чем прошлая, поскольку во время тестов потребление памяти у меня было не выше 2гб ОЗУ (но не исключено, что это потому что я в мир за заходил :D)
Короче говоря осталось только добавить авто дополнение и парочку мелких правок под конкретные загрузчики модов и можно выпускать дроп!
❤5🔥2⚡1🫡1
Я отрезал компилятор от мода и теперь он не жалуется, день 6 🧐
Система подсказок готова где-то на 65% и на удивление даже без всяких индексов с огромной базой данных со всеми классами, методами и переменными работает довольно шустро, если раньше он в среднем тратил 1-2 секунды (а на фордже мог и 8-10 секунд думать), то теперь даже пол секунды это уже редкий случай.
Осталось только отполировать фильтрацию, добавить определение типов и реализовать функционал самого дополнения кода, при выборе подсказки + автоматическое добавление импорта при поиске
Система подсказок готова где-то на 65% и на удивление даже без всяких индексов с огромной базой данных со всеми классами, методами и переменными работает довольно шустро, если раньше он в среднем тратил 1-2 секунды (а на фордже мог и 8-10 секунд думать), то теперь даже пол секунды это уже редкий случай.
Осталось только отполировать фильтрацию, добавить определение типов и реализовать функционал самого дополнения кода, при выборе подсказки + автоматическое добавление импорта при поиске
❤6👍3
Media is too big
VIEW IN TELEGRAM
Умное автодополнение сможет автоматически дополнить мой диплом? 🤔 | День 7
Прошла уже неделя с обещания "выпустить дроп завтра" и за сегодня я уже практически полностью доделал систему автодополнения, которая:
1) Может подсказать варианты импортов, как внутри
2) Создаёт подсказки к объектам из Java и Kotlin
3) Создаёт подсказки для ключевых слов (var, val, class, object, и т.п.)
4) Знает типы this выражений
5) Создаёт подсказки по получению любых объектов и автоматически добавляет импорты. Пока только для Kotlin, для Java там транзитивный ад, нужно чуть ли не всю Intellij IDEA подключить. На скорую руку я тут могу только реализовать тоже самое, но без кэширования, а это замедлит систему подсказок раза в 4
Кроме того, система переписана на корутины с использованием
Прошла уже неделя с обещания "выпустить дроп завтра" и за сегодня я уже практически полностью доделал систему автодополнения, которая:
1) Может подсказать варианты импортов, как внутри
import ..., так и в самом коде. Среди них как пакеты и классы, так и функции и поля верхнего уровня2) Создаёт подсказки к объектам из Java и Kotlin
3) Создаёт подсказки для ключевых слов (var, val, class, object, и т.п.)
4) Знает типы this выражений
5) Создаёт подсказки по получению любых объектов и автоматически добавляет импорты. Пока только для Kotlin, для Java там транзитивный ад, нужно чуть ли не всю Intellij IDEA подключить. На скорую руку я тут могу только реализовать тоже самое, но без кэширования, а это замедлит систему подсказок раза в 4
Кроме того, система переписана на корутины с использованием
MutableSharedFlow для дебаунсинга (проверка ошибок и подсказки появляются через 300мс после прекращения печатания), так что больше никаких фризов 🛸❤9
Компилирую компилятор 🥸 | День 8
Ну что, скрипты успешно компилируются и запускаются, так что я думаю это прогресс! Кроме того я немного переписал дизайн редактора и добавил подсказки внутри кода.
Но пока что всё же в открытый доступ выкладывать рановато, поскольку нужно доделать несколько косяков:
1) Обфускация кода Minecraft (на текущий момент новый компилятор с ней не совместим), но в целом это делается быстро.
2) Поправить небольшие косяки с панелью подсказок, поскольку она плохо адаптируется под размеры окна
Так что в связи с этим внеплановый опрос насчёт скриптинга самих нпс на Boosty, поскольку тут ограничение по количеству символов)
https://boosty.to/hollowhorizon/posts/e45f539a-e508-457c-9459-c47bcba336ac
(пост бесплатный, как и голосование, но пожелания платных спонсоров имеют больший приоритет)
Ну что, скрипты успешно компилируются и запускаются, так что я думаю это прогресс! Кроме того я немного переписал дизайн редактора и добавил подсказки внутри кода.
Но пока что всё же в открытый доступ выкладывать рановато, поскольку нужно доделать несколько косяков:
1) Обфускация кода Minecraft (на текущий момент новый компилятор с ней не совместим), но в целом это делается быстро.
2) Поправить небольшие косяки с панелью подсказок, поскольку она плохо адаптируется под размеры окна
Так что в связи с этим внеплановый опрос насчёт скриптинга самих нпс на Boosty, поскольку тут ограничение по количеству символов)
https://boosty.to/hollowhorizon/posts/e45f539a-e508-457c-9459-c47bcba336ac
(пост бесплатный, как и голосование, но пожелания платных спонсоров имеют больший приоритет)
❤5🔥2
Весь прогресс съела учёба | День 9
Сегодня толком поработать не удалось, среди изменений лишь исправление багов каретки, исправление подвисаний при первой активации компилятора и открытии файлах, исправления всплывающих подсказок и правки в их дизайне (кстати весь дизайн теперь вынесен в общий файл, что в будущем позволит создавать Ваши цветовые схемы и менять шрифты).
Также в связи с тем, что появилось много дел по учёбе, я думаю немного отодвинуть дроп связанный с системой анимаций на выходные, но завтра приблизительно в 18:00 будет дроп с базовым редактором без контекстных скриптов (вроде того, что в ролике из прошлого поста) для того, чтобы Вы могли сами оценить новый редактор в целом и собрать полный набор его косяков 🙃
В остальном, посты продолжат выходить каждый день, пока я не выложу все 3 дропа, а уже после этого, я, пожалуй, возьму небольшой перерыв 🫠
Сегодня толком поработать не удалось, среди изменений лишь исправление багов каретки, исправление подвисаний при первой активации компилятора и открытии файлах, исправления всплывающих подсказок и правки в их дизайне (кстати весь дизайн теперь вынесен в общий файл, что в будущем позволит создавать Ваши цветовые схемы и менять шрифты).
Также в связи с тем, что появилось много дел по учёбе, я думаю немного отодвинуть дроп связанный с системой анимаций на выходные, но завтра приблизительно в 18:00 будет дроп с базовым редактором без контекстных скриптов (вроде того, что в ролике из прошлого поста) для того, чтобы Вы могли сами оценить новый редактор в целом и собрать полный набор его косяков 🙃
В остальном, посты продолжат выходить каждый день, пока я не выложу все 3 дропа, а уже после этого, я, пожалуй, возьму небольшой перерыв 🫠
👍5🔥1
Первый дроп 🌠 | День 10
Я немного опоздал со вчерашними сроками, но там появились непредвиденные сложности со старыми миксинами, которые теперь не применяются на новый компилятор))
Но в целом компилятор и IDE теперь работают 👀
Хоть и есть пока небольшие косяки в редакторе, но в целом уже хотя бы что-то
Установка:
1) Добавить HollowEngine в папку с модами;
2) Положить файл
Примечания:
1) Скрипты пока можно запускать только внутри мира
2) Текущий скрипт буквально не имеет никаких встроенных методов, переменных, нпс, и т.п. Это пустышка просто чтобы поиграться с редактором! Но вы можете получить экземпляр сервера импортировав
3)
4) Пока я не добавил систему кэширования игра будет загружаться существенно дольше, это нормально.
P.S. На Fabric пока не проверял, но на Forge всё работает куда быстрее чем раньше 🔥
Я немного опоздал со вчерашними сроками, но там появились непредвиденные сложности со старыми миксинами, которые теперь не применяются на новый компилятор))
Но в целом компилятор и IDE теперь работают 👀
Хоть и есть пока небольшие косяки в редакторе, но в целом уже хотя бы что-то
Установка:
1) Добавить HollowEngine в папку с модами;
2) Положить файл
HollowEngineCompiler.jar в папку hollowengine.Примечания:
1) Скрипты пока можно запускать только внутри мира
2) Текущий скрипт буквально не имеет никаких встроенных методов, переменных, нпс, и т.п. Это пустышка просто чтобы поиграться с редактором! Но вы можете получить экземпляр сервера импортировав
currentServer.3)
println пока нормально не захватывается, но Вы можете использовать logI, logW и logE для разного вида логгирования.4) Пока я не добавил систему кэширования игра будет загружаться существенно дольше, это нормально.
P.S. На Fabric пока не проверял, но на Forge всё работает куда быстрее чем раньше 🔥
🤩5👍2❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Новое обновление движка Kool, Cool или Not Cool? 😎 | День 11
Сегодня я обновил движок интерфейсов (и не только) до новой версии. Что в нём нового?
1) Асинхронный рендеринг: пока идёт передача данных на GPU и непосредственно отрисовка, одновременно с этим уже может готовиться следующий кадр не простаивая ресурсы впустую🔥
(Это касается только интерфейсов движка, в последствии этот движок также будет использоваться для партиклов, физики и ещё нескольких фич)
2) Новые инструменты для анимаций в интерфейсов вдохновлённые JetPack Compose, от DanBat'а:
3) Встроенная поддержка
4) Исправления многих багов и вылетов
Сегодня я обновил движок интерфейсов (и не только) до новой версии. Что в нём нового?
1) Асинхронный рендеринг: пока идёт передача данных на GPU и непосредственно отрисовка, одновременно с этим уже может готовиться следующий кадр не простаивая ресурсы впустую🔥
(Это касается только интерфейсов движка, в последствии этот движок также будет использоваться для партиклов, физики и ещё нескольких фич)
2) Новые инструменты для анимаций в интерфейсов вдохновлённые JetPack Compose, от DanBat'а:
// Вы создаёте переменную
var isHovered by remember(false)
// Указываете цвет в зависимости от состояния
val color = Color(
if (isHovered) "ffb703ff"
else "219ebcff"
)
// И оно автоматически вычисляет промежуточный цвет на основе указанной задержки и сглаживания
val animColor by animateColorAsState(color, tween(0.2f))
// Присваиваем цвет виджету
modifier.backgroundColor(animColor)
3) Встроенная поддержка
.ttf шрифтов4) Исправления многих багов и вылетов
👍3❤1🔥1🤡1
This media is not supported in your browser
VIEW IN TELEGRAM
Продолжаю обновлять Kool и исправлять баги 🐞 | День 12
На текущий момент вроде как весь функционал перенесён на новую версию движка, за исключением
Скорее всего в будущем бекпортирую эту фичу, но пока она не в приоритете.
Тем временем, DanBat недавно закончил полный список интерполяций/сглаживаний с предпросмотром, чему также в ближайшем будущем найдётся применение (анимации в UI, работа с камерой, анимации нпс и другие моменты).
Ну а я пока что перенёс всю логику анимаций на новую систему и поправил небольшие косяки с ней.
К тому же рабочая неделя подходит к концу, так что на выходных уже смогу сосредоточиться на системе анимаций и событий, так что в лучшем случае в понедельник уже буду обновлять под них документацию 🤔
На текущий момент вроде как весь функционал перенесён на новую версию движка, за исключением
.ttf шрифтов (вместо них, как и раньше MSDF-шрифты), проблема тут в том, что сам Minecraft использует старую версию LWJGL 3.3.1, когда уже активно применяется 3.3.6, из-за чего некоторые её фичи не доступны. Ради этого обновляться на 1.21.10 я не хочу)))Скорее всего в будущем бекпортирую эту фичу, но пока она не в приоритете.
Тем временем, DanBat недавно закончил полный список интерполяций/сглаживаний с предпросмотром, чему также в ближайшем будущем найдётся применение (анимации в UI, работа с камерой, анимации нпс и другие моменты).
Ну а я пока что перенёс всю логику анимаций на новую систему и поправил небольшие косяки с ней.
К тому же рабочая неделя подходит к концу, так что на выходных уже смогу сосредоточиться на системе анимаций и событий, так что в лучшем случае в понедельник уже буду обновлять под них документацию 🤔
🤨5⚡3
This media is not supported in your browser
VIEW IN TELEGRAM
Первые наработки системы анимаций ⚡️| День 13
Я в целом определился со структурой системы анимаций и клиент-серверным взаимодействием. Сейчас работаю над внутренней реализацией без общего API, которая уже умеет:
1) Воспроизводить анимации во всех режимах и автоматически рассчитывать переходы между анимациями
2) Настраивать отображение определённых костей
3) Прикреплять к костям разные объекты, вроде предметов или брони (в будущем и партиклы)
4) Рассчитывать процедурные анимации (поворот головы или зрачков)
5) Добавление под-моделей на основную модель + настройка всех вышеперечисленных функций для неё
Пока что не могу гарантировать, что успею всё это за выходные, но буду держать в курсе. Основная проблема сейчас это синхронизация данных, поскольку сейчас готова лишь клиентская часть, а я хочу, чтобы всё это можно было менять и со стороны сервера (кроме процедурных анимаций, они и должны вычисляться на клиенте). И нужно написать довольно сложную систему, чтобы передавать как можно меньше данных через сеть 🥲
Я в целом определился со структурой системы анимаций и клиент-серверным взаимодействием. Сейчас работаю над внутренней реализацией без общего API, которая уже умеет:
1) Воспроизводить анимации во всех режимах и автоматически рассчитывать переходы между анимациями
2) Настраивать отображение определённых костей
3) Прикреплять к костям разные объекты, вроде предметов или брони (в будущем и партиклы)
4) Рассчитывать процедурные анимации (поворот головы или зрачков)
5) Добавление под-моделей на основную модель + настройка всех вышеперечисленных функций для неё
Пока что не могу гарантировать, что успею всё это за выходные, но буду держать в курсе. Основная проблема сейчас это синхронизация данных, поскольку сейчас готова лишь клиентская часть, а я хочу, чтобы всё это можно было менять и со стороны сервера (кроме процедурных анимаций, они и должны вычисляться на клиенте). И нужно написать довольно сложную систему, чтобы передавать как можно меньше данных через сеть 🥲
🔥7❤1
Дорабатываю компоненты для сущностей 📦 | День 14
Те кто давно следит за развитием движка уже давно знают, что он перешёл с Forge Capability / Fabric Cardinal Components на мою собственную универсальную систему компонентов. Собственно, начав переносить функционал системы анимаций на эти самые компоненты, я понял, что их нужно доработать, чтобы Вам было проще с ними работать:
1) Обновил некоторую часть API по взаимодействию между компонентами, теперь
2) Добавил возможность обрабатывать события внутри компонентов (они срабатывают только если сам компонент добавлен и активен)
3) Добавил хотсвап скриптовых компонентов (т.е. при изменении компонента он обновится сразу у всех сущностей без необходимости перезахода в мир или убийства нпс)
Вполне вероятно сегодня ещё более подробно распишу, как с подобной системой работать, но уже на Boosty, а тут у меня символы заканчиваются 🙃
Ну а на этом у меня пока всё 🫡
Те кто давно следит за развитием движка уже давно знают, что он перешёл с Forge Capability / Fabric Cardinal Components на мою собственную универсальную систему компонентов. Собственно, начав переносить функционал системы анимаций на эти самые компоненты, я понял, что их нужно доработать, чтобы Вам было проще с ними работать:
1) Обновил некоторую часть API по взаимодействию между компонентами, теперь
owner компонента доступен всегда, а не только при прикреплении компонента.2) Добавил возможность обрабатывать события внутри компонентов (они срабатывают только если сам компонент добавлен и активен)
3) Добавил хотсвап скриптовых компонентов (т.е. при изменении компонента он обновится сразу у всех сущностей без необходимости перезахода в мир или убийства нпс)
Вполне вероятно сегодня ещё более подробно распишу, как с подобной системой работать, но уже на Boosty, а тут у меня символы заканчиваются 🙃
Ну а на этом у меня пока всё 🫡
🔥9❤1
Двести тысяч компонентов готовы и ещё миллион на подходе 📦📦📦 | День 15
Сегодня я потратил очередные 5 часов, чтобы наладить синхронизацию компонентов, чтобы обработать все случаи их создания и удаления на клиенте и сервере и... Оно теперь работает как надо 👀
Система анимаций ещё дорабатывается, но базовый компонент с моделькой нпс уже готов, так что выпускаю промежуточный дроп с небольшим примером, буду рад, если Вы протестируете его работу на Forge/Fabric или может даже добавите чего-нибудь от себя. Это поможет быстрее прийти к релизу и исправить все ошибки!
Инструкция:
1) Установите моды (HollowEngineCompiler.jar в папку
2) Удалите папки
3) Закиньте шаблон скрипта в
4) Если вы уже зашли в мир, то пропишите команду
5) Добавьте компонент на любую сущность командой
P.S. Жду в комментариях объяснение от нейронки, что делает код из скрипта 😃
P.P.S. Косяк с дублированием сообщений в видео исправлен в скрипте, кто первый угадает в чём дело, того могу добавить в следующем ролике про движок на YouTube, как нпс 👀
Ну и напоследок, напоминаюо моём Boosty о том, что скоро я займусь самими событиями для ваших историй и если вы ещё не голосовали за то, как оно будет работать, то сейчас последний шанс ⏰
Сегодня я потратил очередные 5 часов, чтобы наладить синхронизацию компонентов, чтобы обработать все случаи их создания и удаления на клиенте и сервере и... Оно теперь работает как надо 👀
Система анимаций ещё дорабатывается, но базовый компонент с моделькой нпс уже готов, так что выпускаю промежуточный дроп с небольшим примером, буду рад, если Вы протестируете его работу на Forge/Fabric или может даже добавите чего-нибудь от себя. Это поможет быстрее прийти к релизу и исправить все ошибки!
Инструкция:
1) Установите моды (HollowEngineCompiler.jar в папку
hollowengine, сам мод в папку mods, дополнительно ничего устанавливать не надо)2) Удалите папки
hollowcore и hollowengine/.cache если они есть3) Закиньте шаблон скрипта в
hollowengine/scripts4) Если вы уже зашли в мир, то пропишите команду
/reload, чтобы перезагрузить компонент5) Добавьте компонент на любую сущность командой
/hollowengine componentP.S. Жду в комментариях объяснение от нейронки, что делает код из скрипта 😃
P.P.S. Косяк с дублированием сообщений в видео исправлен в скрипте, кто первый угадает в чём дело, того могу добавить в следующем ролике про движок на YouTube, как нпс 👀
Ну и напоследок, напоминаю
boosty.to
Внеплановый опрос - Hollow Horizon
Как Вы помните, до релиза я хотел сделать 3 вещи: 1) Новая система анимаций (готова, осталось написать биндинги) 2) Улучшение и оптимизация редактора кода (осталось доработать обфускацию и пару мелких правок интерфейса) 3) Скриптинг событий, игроки и нпс…
❤1