更多事件

更多事件

通过覆盖Hytale与特定交互关联的类文件,为ECS添加更多可取消的事件。

生活质量

更多事件

由于Hytale尚未支持某些可取消事件,我制作了一个模组来添加它们!

使用此模组,您可以处理以下事件:

  • 采集
  • 收获
  • 填充桶
  • 放置流体
  • 更改方块样式

与处理其他可取消事件(如破坏或放置方块)一样,不会影响其他模组自定义这些事件行为的能力。

这非常巧妙,因为举例来说,如果您想跨两个插件修改交互行为,仅使用类注册覆盖会迫使两个插件的逻辑合并为一个,因为覆盖是服务器范围(而非插件特定)的设置。

如何使用

下载 MoreEvents

将 MoreEvents.jar 移动到您的插件依赖文件夹(与插件引用的 Hytale.jar 相同的文件夹,用于依赖关系)

在 build.gradle.kts(或等效文件)中将 MoreEvents.jar 标记为编译时依赖:

dependencies {
    compileOnly(files("libs/HytaleServer.jar"))
    compileOnly(files("libs/MoreEvents-1.0.jar"))
}

将 MoreEvents 作为依赖添加到模组的 manifest.json 文件中,格式如下:

"Dependencies" : { 
    "Mods:MoreEvents" : ">=1.0.0" 
}

导入您想使用的事件

使用导入的事件注册一个系统!示例:

public class YourPlugin extends JavaPlugin {
    @Override
    protected void setup() {
        getEntityStoreRegistry().registerSystem(
            new PlaceFluidEventSystem(PlaceFluidEvent.class));
    }
}
public class PlaceFluidEventSystem extends EntityEventSystem<EntityStore, PlaceFluidEvent> {
    public PlaceFluidEventSystem(@Nonnull Class<PlaceFluidEvent> eventType) {
        super(eventType);
    }

    @Override
    public void handle(int i, @Nonnull ArchetypeChunk<EntityStore> archetypeChunk,
                       @Nonnull Store<EntityStore> store,
                       @Nonnull CommandBuffer<EntityStore> commandBuffer,
                       @Nonnull PlaceFluidEvent placeFluidEvent) {
    }

    @Nullable
    @Override
    public Query<EntityStore> getQuery() {
        return Player.getComponentType();
    }
}

没有找到你想要的事件?

现在有通用事件,您可以在玩家击中或与方块交互(F 键)时监听,并使用提供的上下文检测特定事件。此事件在足够早的阶段拦截这些交互,从而实际取消大部分交互,这与 Hytale 内置的事件不同。

如果您想请求向插件添加特定类型的事件,只需询问,我会看看能否添加支持。