Skip to content

注册表达式

简介

YeeCore 支持通过 .js 脚本注册自定义表达式,并将其作为表达式函数使用。

脚本放入 plugins/YeeCore/expression 目录后,重载配置即可生效。

目录中会自动生成一个示例文件:示例表达式.js

编写规范

注册目录

text
plugins/YeeCore/expression

固定格式

javascript
var syntax = "表达式名,别名1,别名2"

function call(ctx) {
    return "";
}

上下文对象

call(ctx) 中可直接使用以下内容:

javascript
ctx.player   // 当前玩家,不存在时为 null
ctx.item     // 当前物品,不存在时为 null
ctx.env      // 原始环境 Map
ctx.args     // 参数数组
ctx.size     // 参数数量
ctx.arg(0)   // 获取第一个参数,不存在时返回 null

返回值

返回值支持:

  • 字符串
  • 布尔
  • 数字
  • Java 对象
  • null

编写规则

  • 一个 .js 文件对应一个表达式脚本
  • syntax 使用一个字符串,多个名字用英文逗号 , 分隔
  • 第一个名称视为主表达式名,后续名称视为兼容别名
  • call(ctx) 是唯一入口函数
  • 优先使用 ctx.playerctx.itemctx.arg(index)
  • 参数要自己做空值判断
  • 玩家对象要先判空,再调用其方法
  • 物品对象要先判空,再访问 itemMeta 或其它属性
  • 只有确实需要访问底层变量时才使用 ctx.env
  • 脚本尽量短小直接,不要过度封装

命名建议

建议尽量贴近 YeeCore 当前内置表达式风格:

  • 中文主名 + 英文兼容名
  • 文本类:文本.xxx
  • 物品类:匹配xxx物品.xxx
  • 玩家类:判断xxx播放xxx
  • 数值类:向下取整格式化时间

示例:

javascript
var syntax = "文本.前缀,text.prefix"
var syntax = "判断权限,permission"
var syntax = "匹配物品类型,match.type"
var syntax = "向下取整,floor"

示例

javascript
var syntax = "示例表达式,示例别名1"

function call(ctx) {
    var player = ctx.player;
    var item = ctx.item;
    var arg1 = ctx.arg(0);
    return true;
}
javascript
var syntax = "文本.前缀,text.prefix"

function call(ctx) {
    var text = ctx.arg(0);
    if (text == null) {
        text = "";
    }
    if (ctx.player == null) {
        return String(text);
    }
    return ctx.player.getName() + ":" + String(text);
}
javascript
var syntax = "判断权限,permission"

function call(ctx) {
    var permission = ctx.arg(0);
    if (ctx.player == null || permission == null) {
        return false;
    }
    return ctx.player.hasPermission(String(permission));
}
javascript
var syntax = "向下取整,floor"

function call(ctx) {
    var value = ctx.arg(0);
    if (value == null) {
        return 0;
    }
    return Math.floor(Number(value));
}

调试表达式

运行表达式

指令:

text
/yeecore run <玩家> <表达式>

示例:

text
/yeecore run Yeezhi 判断权限('vip.vip1')
/yeecore run me 判断权限('vip.vip1')

调试时的默认目标

使用 /yeecore run/yeecore eval 调试表达式时:

  • ctx.player 默认是你指定的目标玩家
  • ctx.item 默认是该玩家当前主手手持物品

也就是说,如果你的表达式里直接使用 ctx.item,默认取到的是目标玩家当前手里的物品。

使用 AI 创建表达式

使用步骤

  1. 使用下方提示词 prompt.md
  2. 追加你的具体需求
  3. 要求 AI 只输出最终 .js 脚本代码
  4. 将生成结果保存到 plugins/YeeCore/expression 目录

提示词

md
你正在为 YeeCore 编写一个放在 plugins/YeeCore/expression 目录下的 .js 表达式脚本。

目标:只生成表达式函数脚本,不要生成命令脚本、事件脚本、插件主类或其它无关内容。

固定格式:
var syntax = "主表达式名,别名1,别名2"

function call(ctx) {
    return "";
}

输出要求:
1. 只输出最终脚本代码,不要解释,不要加 Markdown。
2. 必须包含 var syntax = "..."。
3. 必须包含 function call(ctx) { ... }。
4. syntax 使用一个字符串,多个名字用英文逗号分隔。
5. syntax 的第一个名字视为主表达式名,后面的名字视为兼容别名。
6. 如果没有别名,syntax 只写一个名字即可。
7. 除非需求明确要求,否则不要依赖外部插件专有 API。

call(ctx) 中可直接使用以下内容:
ctx.player   // 当前玩家,不存在时为 null
ctx.item     // 当前物品,不存在时为 null;调试时默认是目标玩家主手物品
ctx.env      // 原始环境 Map
ctx.args     // 参数数组
ctx.size     // 参数数量
ctx.arg(0)   // 取第一个参数,不存在时返回 null

返回值允许为:
- 字符串
- 布尔
- 数字
- Java 对象
- null

编写规则:
1. 优先使用 ctx.player、ctx.item、ctx.arg(index)。
2. 只有确实需要访问底层变量时才使用 ctx.env。
3. 参数必须自己做空值判断,不要假设一定存在。
4. 玩家对象必须先判空,再调用其方法。
5. 物品对象必须先判空,再访问 itemMeta 或其它属性。
6. 脚本应尽量短小直接,不要过度封装。
7. 不要使用反射。
8. 不要输出与表达式无关的全局变量。
9. 不要定义额外的入口函数,统一只用 call(ctx)。

命名建议:
- 优先贴近 YeeCore 现有内置表达式风格
- 中文主名 + 英文兼容名
- 常见格式:
  var syntax = "文本.前缀,text.prefix"
  var syntax = "判断权限,permission"
  var syntax = "向下取整,floor"

禁止输出的内容:
- 命令注册代码
- 事件监听代码
- 插件启动代码
- onEnable
- Java.type(...)
- 反射调用
- 与当前表达式无关的大量辅助函数

提问示例

text
请按照 YeeCore JS 表达式脚本格式,只输出最终脚本代码。

我要一个表达式:
- 主名称:判断权限
- 英文别名:permission
- 功能:判断当前玩家是否拥有指定权限
- 参数:第一个参数为权限节点
- 要求:玩家不存在或参数为空时返回 false