注册表达式
简介
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.player、ctx.item、ctx.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 创建表达式
使用步骤
- 使用下方提示词
prompt.md - 追加你的具体需求
- 要求 AI 只输出最终
.js脚本代码 - 将生成结果保存到
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