Skip to content

内置函数

perm

这个函数它的作用是判断玩家是否有某权限

它接受一个参数,当输入多个参数时,后续的参数将会被忽略

papi

这个函数的作用是解析一个PlaceholderAPI变量

它接受一个参数,当输入多个参数时,后续的参数将会被忽略

level/money/points/light_level

这四个函数的作用类似,都是用于返回玩家的某项数值

level返回玩家当前的等级

money返回玩家当前的Vault钱数

points返回玩家当前的PlayerPoints点数

light_level返回玩家当前所处位置的光照等级

world/gamemode/biome

这三个函数都有两种用法

world在无参数时会返回玩家当前所在世界的名字,而如果有输入参数,它会判断玩家是否在第一个参数所对应的世界

gamemode在无参数时会返回玩家当前的游戏模式(返回的字符串为全大写),而如果有输入参数,它会判断玩家是否是第一个参数对应的模式(无所谓大小写)

biome在无参数时会返回玩家当前所属群系的key,而如果有输入参数,它会判断玩家是否在第一个参数对应的群系

item

这个函数实际上只在物品相关的触发器里有效,它的作用是判断事件涉及的物品是否是某个物品

它接受一个参数,这个参数是物品ID,和在配方里的物品系统相同

in_rain/in_water

这两个函数的作用类似,in_rain返回玩家是否在雨中,in_water返回玩家是否在水中,他们都不接受任何参数

context

这个函数的作用是从上下文获取一个变量的值,所以它可能会返回任何类型的值

它接受一个参数,这个参数就是想要获取变量的名字

从1.13.3.0版本开始,你也可以使用形如${变量名字}的方式,来获取上下文变量

${变量名字}也可以用在字符串中,例如

yaml
set("player_name", "Steve")
tell("Hello, ${player_name}")

tell/actionbar/title/log

这四个函数的作用都是输出内容,并且都会自动解析PlaceholderAPI变量

但是用法有略微不同

tell actionbar log都接受所有的参数,它们会将所有参数拼接在一起输出

tell是发送消息给玩家聊天栏

actionbar是发送消息给玩家动作栏

log是发送消息给服务器后台

title它只接受两个参数,第一个参数发送给玩家的主标题栏,第二个参数发送给玩家的副标题栏

command/console

这两个函数的作用都是执行命令,并且都会自动解析PlaceholderAPI变量,都接受所有的参数,它们会将所有参数拼接在一起作为一个命令

command是以玩家身份执行命令

console是以服务器后台身份执行命令

take_money/give_money/take_level/give_level/give_exp/take_points/give_points

这七个函数的用法都差不多,他们都接受一个数字类型的变量

take_money take_level take_points分别是扣除玩家Vault钱数、等级和PlayerPoints点数

give_money give_level give_exp give_points分别是给予玩家Vault钱数、等级、经验和PlayerPoints点数

close/back

这两个函数都是在菜单里使用的,且他们都不接受任何参数

close是直接关闭玩家当前打开的页面

back在玩家有上一个菜单的大部分情况下将会返回到上一个菜单,如果没有上一个菜单则直接关闭页面

openmenu

这个函数用于打开Craftorithm的自定义菜单

它接受一个参数,会打开对应名字的菜单

discover_recipe/undiscover_recipe

这两个函数都是用于配方书管理的,它们都只接受一个参数

discover_recipe是为玩家在配方书解锁一个配方

undiscover_recipe则是取消解锁指定配方

sound

这个函数是用于给玩家播放音频的,它最多接受三个参数

第一个参数是音频的key,格式为<namespace>:<key>

第二个参数是音频的音量

第三个参数是音频的音高

set_inv_item(1.11.2.0+)

这个函数的作用是设置玩家当前打开页面的指定位置的物品, 它必须接受两个参数

第二个参数为物品的id, 和在配方里的物品系统相同, 并且它可以指定数量

示例: set_inv_item(0, "minecraft:bucket 1")

它的替换是强制的。并且为了防止出现一些意外的情况, 替换物品的操作会延迟1tick进行

set

这个函数的功能类似于声明变量,它一般情况下是配合context函数使用的

它接受两个参数,第一个参数是变量的名字,为字符串类型。第二个参数为变量的内容,可以是任意类型

delay

这是一个特殊的函数,他的作用是暂停当前的脚本运行,并在指定tick后运行

它接受一个参数,这个参数必须是整数

abs(1.11.3.0+)

这个函数的用途是返回传入值的绝对值,例如abs(-1)的返回值为1

min(1.11.3.0+)

这个函数的用途是返回传入两个值中的较小值, 例如min(1, 0)的返回值为0

max(1.11.3.0+)

这个函数的作用是返回传入两个值中的较大值, 例如max(1, 0)的返回值是1

round(1.11.3.0+)

这个函数的作用是四舍五入, 例如round(10.6)的返回值是11

floor ceil(1.11.3.0+)

floor的作用是向下取整, ceil的作用是向上取整

例如floor(6.1)的值为6, 而ceil(6.8)的值为7

pow(1.11.3.0+)

它的作用是进行幂运算, 必须输入两个数字变量, 可以是浮点数

例如pow(2, 4)返回的值为2的四次方, 也就是16

random(1.11.3.0+)

它的作用是返回一个随机数, 输入的变量数可以是0个,1个或2个

当没有变量输入时, 他会返回0到1之间的一个随机数, 这个随机数可能是0, 但不会是1

当输入一个变量时, 他会返回0到你输入的这个数之间的一个随机数, 这个随机数可能为0, 但不会是你输入的数

当输入两个变量时, 他会返回从第一个数到第二个数之间的一个随机数, 这个随机数可能会等于较小的值, 但不会是较大的值

自定义函数注册

插件开发者可通过 ScriptFunctionRegistry 注册自定义函数:

java
ScriptFunctionRegistry.INSTANCE.register("my_func", (context, vm, args) -> {
    // args 是 ScriptValue 列表
    // context 包含 Player 和变量
    String msg = args.get(0).getString();
    context.getPlayer().sendMessage(msg);
    return ScriptValue.NullValue.INSTANCE;
});

注册后即可在触发器中使用:

yaml
actions:
  - 'my_func("hello")'

函数命名限制

自定义函数的名称只能包含字母、数字和下划线[a-zA-Z0-9_]),不允许使用连字符 -

这是因为 - 在脚本引擎中被解析为减法运算符,会导致函数名被拆分为多个 token,从而无法正确识别。

✅ 合法的函数名:my_functake_moneygiveExp2check_level

❌ 不合法的函数名:my-functake-moneygive-exp

详细 API 参见 Script API

基于 GPL-3.0 许可证发布