NeoTale
A project meant to make Hytale modding easier in general. For now it simplifies event subscriptions to Neoforge's event bus subscription practice, making event subscription a lot simpler for modders
Описание
Неотале
NeoTale - это легкая, основанная на аннотациях система событий для плагинов Hytale, вдохновленная системой событийной шины NeoForge. Он удаляет ручную регистрацию и boilerplate, автоматически обнаруживая и проводя ваши обработчики событий во время выполнения.
Особенности
- Подписка на события на основе аннотации
- Не требуется ручной регистрации
- Автоматическое сканирование классов
- Статический метод отправки
- Минимальный, чистый API
- Рабочий процесс в стиле NeoForge
Как это работает
При запуске NeoTale сканирует ваш плагин и автоматически обнаруживает:
- Классы, аннотированные с
@EventBusSubscriber публичный статическийМетоды внутри этих классов, аннотированные@Подписаться Событие
Любой метод, соответствующий этому шаблону, автоматически регистрируется в шине событий и вызывается при пожаре соответствующего события.
Пример события
@EventBusSubscriber
Серверные события последнего класса {
@SubscribeEvent
Публичная статическая пустота на Boot (событие BootEvent)
System.out.println («Загрузка сервера!»);
?
@SubscribeEvent
Публичная статическая пустота на Break (событие BreakBlockEvent)
System.out.println («Блок сломан!»);
?
?
Вот и все. NeoTale автоматически обрабатывает обнаружение и связывание.
Правила обнаружения
NeoTale будет регистрировать только те методы, которые отвечают всем следующим требованиям:
- Объявлено в классе с аннотацией
@EventBusSubscriber - маркированный
публичный статический - Аннотированный с
@Подписаться Событие - Принять ровно один параметр (тип события)
Система регистрации
NeoTale также может автоматически регистрировать системы ECS, используя тот же подход. Декларация публичный статический методы, аннотированные с @SubscribeSystem внутри @EventBusSubscriber класс. NeoTale будет использовать эти методы во время установки плагина и зарегистрировать возвращенную систему в правильном реестре.
Пример системы
@EventBusSubscriber
Системы финального класса {
@SubscribeSystem (магазин = SystemStore.ENTITY)
Публичная статическая система <EntityStore> myEntitySystem() {
Возвращение новой EntityEventSystem (BreakBlockEvent.class) {
@Override
Общественная ручка пустоты (int i,
@Nonnull ArchetypeChunk<EntityStore> кусок,
@Nonnull Store<EntityStore> магазин,
@Nonnull CommandBuffer<EntityStore> буфер,
@Nonnull BreakBlock Событие {
?
@Override
Публичный запрос <EntityStore> getQuery() {
Возвращение Query.any();
?
}
?
@SubscribeSystem (магазин = SystemStore.CHUNK)
Публичная статическая система (MyChunkSystem) {
RefSystem<ChunkStore>() {
@Override
Публичный запрос <ChunkStore> getQuery() {
Возвращение Query.any();
?
@Override
Публичная пустота на EntityAdded (Ref<ChunkStore> ref,
Адресная причина,
Магазин <ChunkStore>,
CommandBuffer<ChunkStore> буфер
?
@Override
Публичная пустота на EntityRemove (Ref<ChunkStore> ref.
Удалить причину,
Магазин <ChunkStore>,
CommandBuffer<ChunkStore> буфер
?
}
?
?
Настройка Gradle
Добавить репозиторий NeoTale Maven:
Грейдл (Groovy)
репозитории {
{url }https://dl.cloudsmith.io/public/lio/neotale/maven/' ?
?
зависимости {
Реализация "net.liopyu:neotale:$neoTaleVersion"
?
Котлин ДСЛ (Kotlin DSL)
репозитории {
мэвен()https://dl.cloudsmith.io/public/lio/neotale/maven/")
?
зависимости {
(перенаправлено с «net.liopyu:neotale: $neoTaleVersion»)
?
Почему NeoTale?
Нативные системы Hytale являются мощными, но проводка событий может быть повторяющейся и запутанной. NeoTale упрощает разработку, предоставляя простой, знакомый подход для разработчиков, поступающих из NeoForge.
Использование и распространение
NeoTale бесплатна для использования в любом проекте, включая общедоступные серверы, модули и перераспределенные сборки. Вам разрешено связывать и перераспределять NeoTale как есть везде, где вам это нужно.
Ярлык ARR применяется только к прямому владению источником/активами проекта. не ограничить нормальное использование или перераспределение построенного мода.
Показать оригинальное описание (English)
NeoTale
NeoTale is a lightweight, annotation-driven event system for Hytale plugins inspired by NeoForge’s event bus system. It removes manual registration and boilerplate by automatically discovering and wiring your event handlers at runtime.
Features
- Annotation-based event subscription
- No manual registration required
- Automatic class scanning
- Static method dispatch
- Minimal, clean API
- NeoForge-style workflow
How It Works
On startup, NeoTale scans your plugin and automatically detects:
- Classes annotated with
@EventBusSubscriber public staticmethods inside those classes annotated with@SubscribeEvent
Any method matching this pattern is automatically registered to the event bus and invoked when the corresponding event fires.
Event Example
@EventBusSubscriber
public final class ServerEvents {
@SubscribeEvent
public static void onBoot(BootEvent event) {
System.out.println("Server booted!");
}
@SubscribeEvent
public static void onBreak(BreakBlockEvent event) {
System.out.println("Block broken!");
}
}
That’s it. NeoTale handles discovery and binding automatically.
Detection Rules
NeoTale will only register methods that meet all of the following:
- Declared in a class annotated with
@EventBusSubscriber - Marked
public static - Annotated with
@SubscribeEvent - Accept exactly one parameter (the event type)
System Registration
NeoTale can also auto-register ECS systems using the same annotation-first approach. Declare public static methods annotated with @SubscribeSystem inside an @EventBusSubscriber class. NeoTale will invoke these methods during plugin setup and register the returned system into the correct registry.
System Example
@EventBusSubscriber
public final class Systems {
@SubscribeSystem(store = SystemStore.ENTITY)
public static ISystem<EntityStore> myEntitySystem() {
return new EntityEventSystem<>(BreakBlockEvent.class) {
@Override
public void handle(int i,
@Nonnull ArchetypeChunk<EntityStore> chunk,
@Nonnull Store<EntityStore> store,
@Nonnull CommandBuffer<EntityStore> buffer,
@Nonnull BreakBlockEvent event) {
}
@Override
public Query<EntityStore> getQuery() {
return Query.any();
}
};
}
@SubscribeSystem(store = SystemStore.CHUNK)
public static ISystem<ChunkStore> myChunkSystem() {
return new RefSystem<ChunkStore>() {
@Override
public Query<ChunkStore> getQuery() {
return Query.any();
}
@Override
public void onEntityAdded(Ref<ChunkStore> ref,
AddReason reason,
Store<ChunkStore> store,
CommandBuffer<ChunkStore> buffer) {
}
@Override
public void onEntityRemove(Ref<ChunkStore> ref,
RemoveReason reason,
Store<ChunkStore> store,
CommandBuffer<ChunkStore> buffer) {
}
};
}
}
Gradle Setup
Add the NeoTale Maven repository:
Gradle (Groovy)
repositories {
maven { url 'https://dl.cloudsmith.io/public/lio/neotale/maven/' }
}
dependencies {
implementation "net.liopyu:neotale:$neoTaleVersion"
}
Gradle (Kotlin DSL)
repositories {
maven("https://dl.cloudsmith.io/public/lio/neotale/maven/")
}
dependencies {
implementation("net.liopyu:neotale:$neoTaleVersion")
}
Why NeoTale?
Hytale’s native systems are powerful, but event wiring can be repetitive and confusing. NeoTale streamlines development by providing a simple, familiar approach for developers coming from NeoForge event bus subscription.
Usage & Distribution
NeoTale is free to use in any project, including public servers, modpacks, and redistributed builds. You are allowed to bundle and redistribute NeoTale as-is wherever you need it.
The ARR label only applies to direct ownership of the project’s source/assets; it does not restrict normal use or redistribution of the built mod.
Информация
Авторы:
Категории:
Версии игры:
Создан: 21.01.2026