Skip to content

数学 / 随机 / 字符串函数

数学

函数参数返回说明
max(a, b, ...)多个数值Number最大值
min(a, b, ...)多个数值Number最小值
abs(n)NumberNumber绝对值
floor(n)NumberInteger向下取整
ceil(n)NumberInteger向上取整
round(n)NumberInteger四舍五入
round(n, decimals)Number, IntegerNumber保留 N 位小数
sqrt(n)NumberNumber平方根
pow(base, exp)Number, NumberNumber幂运算
clamp(val, min, max)Number×3Number限制在 [min, max] 区间
between(val, min, max)Number×3Boolean是否在 [min, max] 区间内(含端点)
yaml
成功率 = clamp(80 - 等级 * 5, 10, 100)
伤害 = floor(攻击力 * 1.5)
精确值 = round(3.14159, 2)           # 3.14

# clamp 示例
clamp(15, 0, 10)   # 10(超过最大值)
clamp(-5, 0, 10)   # 0(低于最小值)
clamp(5, 0, 10)    # 5(在范围内)

# between 示例
between(5, 1, 10)   # true
between(15, 1, 10)  # false

对比:clamp vs min + max

两种写法等价,clamp 可读性更高:

yaml
# 等价
成功率 = max(10, min(100, 80 - 等级 * 5))
成功率 = clamp(80 - 等级 * 5, 10, 100)

随机

函数参数返回说明
rand(max)IntegerInteger[0, max] 随机整数
rand(min, max)Integer×2Integer[min, max] 随机整数
rand_float(max)NumberNumber[0, max) 随机浮点
rand_float(min, max)Number×2Number[min, max) 随机浮点
weighted_random(options)StringString加权随机选择
yaml
随机攻击 = rand(10, 50)            # 10-50 整数
随机索引 = rand(5)                 # 0-5 整数
随机倍率 = rand_float(0.8, 1.2)    # 0.8-1.2 浮点

加权随机

选项串格式 名称:权重 用逗号分隔:

yaml
品质 = weighted_random('普通:50,稀有:30,传说:15,史诗:5')
# 权重总和可任意,按相对比例抽取

字符串

函数参数返回说明
length(str)StringInteger字符数(列表用法见 列表函数
substring(str, start)String, IntegerString截取子串(start 到末尾)
substring(str, start, end)String, Integer×2String截取 [start, end)
replace(str, old, new)String×3String替换所有出现
lowercase(str)StringString转小写
uppercase(str)StringString转大写
trim(str)StringString去首尾空白
contains(str, sub)String×2Boolean是否包含子串
startswith(str, prefix)String×2Boolean前缀匹配
endswith(str, suffix)String×2Boolean后缀匹配
split(str, delim)String×2List<String>分割为列表
split(str, delim, index)String, String, IntegerString分割后取第 index 段(支持负索引)
format(template, arg0, ...)String, Any...String模板替换 {0}, {1}...
color(str)StringString&§ 颜色码转换
matches(str, pattern)String×2Boolean正则匹配
equals(s1, s2)String×2Boolean字符串相等
isempty(value)AnyBoolean是否为空(null、空串、空列表)
yaml
名称长度 = length(@input.name)
等级文本 = split("等级:5", ":", 1)                      # "5"
格式化 = format("玩家{0}获得{1}金币", player.name, 100)  # "玩家Steve获得100金币"
彩色文本 = color("&a成功")                              # "§a成功"

split 负索引

yaml
文本 = "a,b,c,d,e"
split(文本, ",", -1)   # "e"
split(文本, ",", -2)   # "d"

字符串方法链

字符串对象也支持方法链调用,两种写法等价:

yaml
# 函数形式
length(text)
substring(text, 0, 5)
contains(text, "abc")

# 方法形式(更链式)
text.length()
text.substring(0, 5)
text.contains("abc")

详见 引用与插值 - 字符串 / 列表方法链

TQ Minecraft Server Plugin Docs