
新传说
一个旨在总体上简化Hytale模组制作的项目。目前,它简化了Neoforge事件总线订阅实践中的事件订阅,使模组制作者的事件订阅变得更加简单。
NeoTale
NeoTale 是一个轻量级的、注解驱动的事件系统,专为 Hytale 插件设计,灵感来源于 NeoForge 的事件总线系统。它通过自动发现并在运行时连接事件处理器,消除了手动注册和样板代码。
特性
- 基于注解的事件订阅
- 无需手动注册
- 自动类扫描
- 静态方法分发
- 极简、清晰的 API
- NeoForge 风格的工作流
工作原理
启动时,NeoTale 会扫描你的插件并自动检测:
- 标注了
@EventBusSubscriber的类 - 这些类中标注了
@SubscribeEvent的public static方法
任何符合此模式的方法都会自动注册到事件总线,并在相应事件触发时被调用。
事件示例
@EventBusSubscriber
public final class ServerEvents {
@SubscribeEvent
public static void onBoot(BootEvent event) {
System.out.println("服务器已启动!");
}
@SubscribeEvent
public static void onBreak(BreakBlockEvent event) {
System.out.println("方块被破坏!");
}
}
就是这样。NeoTale 会自动处理发现和绑定。
检测规则
NeoTale 只会注册满足以下所有条件的方法:
- 声明在标注了
@EventBusSubscriber的类中 - 标记为
public static - 标注了
@SubscribeEvent - 只接受一个参数(事件类型)
系统注册
NeoTale 还可以使用相同的注解优先方法自动注册 ECS 系统。在 @EventBusSubscriber 类中声明标注了 @SubscribeSystem 的 public static 方法。NeoTale 会在插件设置期间调用这些方法,并将返回的系统注册到正确的注册表中。
系统示例
@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 配置
添加 NeoTale Maven 仓库:
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")
}
为什么选择 NeoTale?
Hytale 的原生系统功能强大,但事件连接过程可能重复且混乱。NeoTale 为来自 NeoForge 事件总线订阅的开发者提供了简单、熟悉的方法,从而简化了开发流程。
使用与分发
NeoTale 可免费用于任何项目,包括公共服务器、模组包和重新分发的构建。你可以按原样捆绑和重新分发 NeoTale,无需额外许可。
ARR 标签仅适用于项目源代码/资产的直接所有权,不限制对构建后模组的正常使用或重新分发。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。