跳到主要内容

脚本系统

Ratziel插件内置了强大的脚本系统,支持多种脚本语言和格式,可以用于物品行为、自定义功能等。

支持的脚本语言

Ratziel支持多种脚本语言,每种语言有其特定的用途和优点:

脚本类型标记描述
JavaScript$js最常用的脚本语言,执行效率高
Kether$kether一种Taboolib特有的轻量级脚本语言
Kotlin脚本$kts支持完整Kotlin语法的脚本
JEXL$jexl轻量级表达式语言
Nashorn$nashorn旧版JavaScript引擎
GraalJS$graaljs高性能JavaScript引擎

JavaScript

Ratziel 支持两种 JavaScript 引擎,提供了最强大的脚本编程能力。

Nashorn 引擎

标识符: $js$nashorn

特点:

  • Java 8+ 内置引擎
  • 完整的 ES6 支持
  • 与 Java 对象无缝交互
  • 性能稳定可靠

配置示例:

# 在 settings.yml 中配置
Script:
JavaScript:
engine: "nashorn"

GraalJS 引擎

标识符: $graaljs

特点:

  • 高性能 JavaScript 引擎
  • 现代 JavaScript 特性支持
  • 更好的内存管理
  • 支持最新 ECMAScript 标准

配置示例:

# 在 settings.yml 中配置
Script:
JavaScript:
engine: "graaljs"

JEXL 表达式

标识符: $jexl

特点:

  • 轻量级表达式语言
  • 适合简单的计算和判断
  • 语法类似于数学表达式
  • 性能优异

使用示例:

JEXLItem:
meta:
action:
onInteract: |-
# 简单计算
damage = player.health > 10 ? 20 : 10;

# 字符串操作
message = "Hello " + player.name + "!";

# 条件表达式
result = item.durability > 100 ? "耐久充足" : "需要修理";

条件执行

Ratziel 脚本系统支持强大的条件执行功能:

ConditionalItem:
meta:
action:
# 简单条件
onInteract:
if: 'player.getHealth() > 10'
then: 'player.sendMessage("血量充足")'
else: 'player.sendMessage("血量不足")'

# 复杂条件
onAttack:
if: |-
health = player.getHealth()
mana = item.get("mana") || 0
return health > 5 && mana >= 10
then:
- 'item.set("mana", mana - 10)'
- 'event.setDamage(event.getDamage() * 2)'
- 'player.sendMessage("释放了强力攻击!")'
else:
- 'event.setCancelled(true)'
- 'player.sendMessage("条件不足,无法使用技能")'