Skip to content

Trigger API

获取触发器管理器

java
TriggerManager manager = api.getTriggerManager();

触发事件

java
// 以指定类型和上下文触发
TriggerContext context = new TriggerContext(player, variables);
manager.fire("my_trigger_type", context);

TriggerContext

java
// 配方事件上下文
TriggerContext ctx = new TriggerContext(player, recipeKey, recipeType);

// 通用事件上下文
Map<String, ScriptValue> vars = new HashMap<>();
vars.put("damage", new ScriptValue.Num(10.0));
vars.put("entity_type", new ScriptValue.Str("ZOMBIE"));
TriggerContext ctx = new TriggerContext(player, vars);

// 获取变量
ScriptValue val = ctx.getVariable("damage");

// 转换为脚本上下文
ScriptContext scriptCtx = ctx.toScriptContext();

Trigger 数据模型

java
public class Trigger {
    String id;
    String typeKey;
    List<String> recipes;
    CompiledScript conditionScript;
    CompiledScript actionScript;
    int priority;
    long cooldownMillis;
    boolean perPlayer;
    boolean enabled;
}

注册触发器类型

实现 TriggerType 接口:

java
public class MyTriggerType implements TriggerType {
    @Override
    public String typeKey() {
        return "my_type";
    }

    @Override
    public Class<? extends Event> eventClass() {
        return MyEvent.class;
    }

    @Override
    public TriggerContext extractContext(Event event) {
        // 从事件中提取上下文
        return new TriggerContext(player, variables);
    }
}

事件

RecipeLoadFromConfigEvent

配方从配置文件加载时触发,可取消:

java
@EventHandler
public void onRecipeLoad(RecipeLoadFromConfigEvent event) {
    if (event.getRecipeKey().getKey().equals("my_recipe")) {
        event.setCancelled(true); // 阻止加载
    }
}

相关类

说明
TriggerManager触发器管理器
Trigger触发器数据模型
TriggerContext触发器上下文
TriggerType触发器类型接口
ScriptValue脚本值类型
ScriptContext脚本执行上下文

基于 GPL-3.0 许可证发布