Skip to content

脚本引擎概述

Craftorithm 内置了一个编译型脚本引擎,用于触发器的条件判断和动作执行。

用途

触发器conditionsactions 本质上是脚本表达式

菜单中图标的actions和自定义页面的open_actions和close_actions

文档导航

语法

数据类型

Craftorithm的脚本系统具有四种数据类型,分别如下:

类型说明示例
Str字符串"hello"
Num数字1003.14-5
Bool布尔值truefalse
NullValue空值

在解析时,字符串一定要使用双引号包裹,否则将出现意外的错误

基础写法

脚本支持两种写法,分别是tell "你好,世界!"tell("你好,世界!")

通常来说,建议使用第二种写法,会更加直观一些

运算符

脚本支持多种运算符

比较运算符:

> < == >= <= !=

逻辑非运算符

!

例如:!perm("craftorithm.perm")

二元中缀运算符

&& ||

例如:if gamemode("creative") && perm("craftorithm")

算术运算符

+ - * / %

支持基本的加减乘除和取余运算,乘除优先级高于加减,可以使用括号改变优先级。

例如:

  • context("value") * 100 - 5
  • (context("level") + 1) * 10 % 7

+ 运算符同时支持字符串拼接,当任一侧为字符串时会自动进行拼接:

  • "Hello, " + context("name") + "!"
  • "HP: " + context("hp")

控制流

脚本系统支持使用if-else进行流程控制,写法如下:

if gamemode("creative")
tell "你正在创造模式"
elseif gamemode("survival")
tell "你正在生存模式"
elseif gamemode == "ADVENTURE"
tell "你正在冒险模式"
else
tell "你正在旁观者模式"
endif

如果是放在yaml中,可以是这样:

yaml
left:
  - 'if gamemode("creative")'
  - 'tell "你正在创造模式"'
  - 'elseif gamemode("survival")'
  - 'tell "你正在生存模式"'
  - 'elseif gamemode == "ADVENTURE"'
  - 'tell "你正在冒险模式"'
  - 'else'
  - 'tell "你正在旁观者模式"'
  - 'endif'

注释

脚本系统是支持行注释的,也就是说,你可以这样写tell "Hello world" //输出语句

函数嵌套

在脚本系统中,可以进行函数嵌套,例如tell("玩家是否是创造模式:", gamemode("creative"))

它会先运行gamemode("creative")得到结果,然后再tell输出

当然,也可以更多层的嵌套,例如tell("玩家是否有权限:", perm(context("perm")))

这句话会先从上下文中获得名为perm的变量,然后再判断玩家是否有这个权限,最后输出结果

函数命名限制

函数名称只能包含字母、数字和下划线[a-zA-Z0-9_]),不允许使用连字符 -。这是因为 - 在脚本引擎中被解析为减法运算符。

✅ 合法:my_functake_money

❌ 不合法:my-functake-money

基于 GPL-3.0 许可证发布