Skip to content

内置函数

RedScript 所有内置函数的完整列表。

聊天与显示

函数描述
say(message)向所有玩家广播消息
tell(target, message)向目标发送纯文本私信(悄悄话)
tellraw(target, message)向目标发送格式化消息
raw(command)原样输出原始 Minecraft 命令字符串
title(target, text)在屏幕上显示标题
subtitle(target, text)在屏幕上显示副标题
actionbar(target, text)在动作栏显示文本
rs
say("Hello everyone!");
tell(@s, "Only you can see this.");
tell(@a[tag=vip], "Welcome back, VIP!");
tellraw(@a, "Welcome to the server!");
title(@p, "You Win!");
subtitle(@p, "Congratulations!");
actionbar(@a, "Score: ${score}");

// 当没有对应内置函数时,输出原始命令
raw("weather thunder 600");
raw("difficulty peaceful");

tell vs say say 会带 [ServerName] 前缀向所有玩家广播;tell 只向指定选择器发送私信。

raw 当没有对应的类型化内置函数时的逃生舱口。字符串会原样写入编译后的 .mcfunction 文件。尽量少用——优先使用类型化的内置函数。

在 v1.2 中,聊天和显示类内置函数也支持运行时 f-string:

rs
say(f"Welcome {player}!");
actionbar(@a, f"Score: {score}");

实体管理

函数描述
summon(entity, x, y, z)在指定位置召唤实体
summon(entity, x, y, z, nbt)带 NBT 召唤
kill(target)杀死实体
tp(target, x, y, z)传送实体
tp(target, destination)传送到实体
rs
summon("zombie", ~0, ~5, ~0);
kill(@e[type=zombie]);
tp(@a, 0, 100, 0);
tp(@s, @p);

物品

函数描述
give(target, item, count)给予物品
give(target, item, count, nbt)给予带 NBT 的物品
clear(target)清除所有物品
clear(target, item)清除特定物品
clear(target, item, count)清除指定数量物品
rs
give(@a, "diamond", 64);
give(@s, "diamond_sword", 1, {Enchantments: [{id: "sharpness", lvl: 5s}]});
clear(@a);
clear(@s, "dirt", 10);

效果

函数描述
effect(target, effect, duration, amplifier)施加效果
effect_clear(target)清除所有效果
effect_clear(target, effect)清除特定效果
rs
effect(@a, "speed", 30, 2);
effect(@s, "instant_health", 1, 1);
effect_clear(@a);
effect_clear(@s, "poison");

记分板

函数描述
scoreboard_add_objective(name, criteria)创建新目标
scoreboard_remove_objective(name)移除目标
scoreboard_display(slot, objective)在槽位显示目标(sidebarlistbelowname
scoreboard_hide(slot)隐藏槽位的显示
scoreboard_set(target, objective, value)设置玩家分数
scoreboard_add(target, objective, value)增加玩家分数
scoreboard_get(target, objective)获取玩家分数(返回 int
score(target, objective)scoreboard_get 的别名
rs
scoreboard_add_objective("kills", "playerKillCount");
scoreboard_display("sidebar", "kills");
scoreboard_set(@a, "kills", 0);
scoreboard_add(@s, "kills", 1);

let k: int = scoreboard_get(@s, "kills");
let k2: int = score(@s, #kills);  // #name 语法不需要引号

目标名称语法

目标名称可以写为带引号的字符串,也可以使用 #name 语法表示裸标识符:

rs
scoreboard_set(@s, "kills", 0);       // 字符串字面量
scoreboard_set(@s, #kills, 0);        // 裸标识符(无引号)

命名空间前缀

记分板目标在编译时会自动加上数据包命名空间前缀。

例如,在命名空间 minigame 中写 scoreboard_add_objective("kills", "dummy"),生成的数据包里会使用类似 minigame_kills 的目标名。这样可以避免不同数据包之间的目标名冲突。

队伍

函数描述
team_add(name)创建队伍
team_remove(name)移除队伍
team_join(name, target)加入队伍
team_leave(target)离开队伍
team_modify(name, option, value)修改队伍选项
rs
team_add("red");
team_modify("red", "color", "red");
team_modify("red", "friendlyFire", "false");
team_join("red", @s);

世界

函数描述
setblock(x, y, z, block)放置方块
fill(x1, y1, z1, x2, y2, z2, block)用方块填充区域
clone(x1, y1, z1, x2, y2, z2, dx, dy, dz)克隆方块
weather(type)设置天气
time_set(value)设置时间
difficulty(level)设置难度
gamerule(rule, value)设置游戏规则
rs
setblock(0, 100, 0, "diamond_block");
fill(~-5, ~0, ~-5, ~5, ~3, ~5, "stone");
weather("clear");
time_set("day");
gamerule("doDaylightCycle", "false");

声音

函数描述
playsound(target, sound)播放声音
playsound(target, sound, volume, pitch)带选项播放
stopsound(target)停止所有声音
rs
playsound(@a, "entity.experience_orb.pickup");
playsound(@s, "block.note_block.pling", 1.0, 2.0);
stopsound(@a);

粒子

函数描述
particle(name, x, y, z)生成粒子
particle(name, x, y, z, dx, dy, dz, speed, count)带选项生成
rs
particle("flame", ~0, ~2, ~0);
particle("heart", ~0, ~2, ~0, 0.5, 0.5, 0.5, 0.1, 10);

标签

函数描述
tag_add(target, tag)添加标签
tag_remove(target, tag)移除标签
rs
tag_add(@s, "playing");
tag_remove(@s, "playing");

经验

函数描述
xp_add(target, amount)添加经验点
xp_add_levels(target, amount)添加经验等级
xp_set(target, amount)设置经验点
rs
xp_add(@s, 100);
xp_add_levels(@s, 5);
xp_set(@a, 0);

数据

函数描述
data_get(target, path)获取 NBT 数据
data_merge(target, nbt)合并 NBT 数据
data_remove(target, path)移除 NBT 路径
rs
data_merge(@s, {Invisible: 1b});
data_remove(@s, "CustomName");

堆 / 动态分配

heap_new 在运行时分配一个命名的 NBT 存储槽并返回一个句柄(int 类型的 ID),可传递并在之后解引用。这是 RedScript 中动态数据结构的基础。

函数描述
heap_new(nbt)分配一个新的堆槽,设置初始 NBT 值;返回 int 句柄
heap_get(handle, path)handle 标识的堆槽中读取路径
heap_set(handle, path, value)向堆槽中的路径写入值
heap_free(handle)释放堆槽(标记为可重用)
rs
// 在堆上分配一个复合值
let h: int = heap_new({hp: 20, name: "boss"});

// 从槽中读取
let hp: int = heap_get(h, "hp");      // 20

// 写入新值
heap_set(h, "hp", 15);

// 完成后释放
heap_free(h);

实现说明: heap_new 将数据存储在 Minecraft 的 storage NBT 中,位于数据包命名空间下。每个句柄是记分板追踪的数字 ID。调用 heap_free 后不要再使用该句柄——行为未定义。

进度

函数描述
advancement_grant(target, advancement)授予进度
advancement_revoke(target, advancement)撤销进度
rs
advancement_grant(@s, "story/mine_diamond");
advancement_revoke(@a, "story/mine_diamond");

工具函数

函数描述
repeat(count) { }重复执行 N 次
for_each(array, lambda)遍历数组
map(array, lambda)转换数组
filter(array, lambda)过滤数组
random(min, max)随机整数

调度

函数描述
setTimeout(delay, callback)delay 个 tick 后执行一次回调
setInterval(interval, callback)按固定间隔重复执行回调
clearInterval(id)取消重复回调
rs
setTimeout(200, () => {
    say("Delayed!");
});

let id = setInterval(20, () => {
    actionbar(@a, f"Tick: {score}");
});

clearInterval(id);

这些计时辅助函数会编译为通过 Minecraft schedule function 命令调度的生成函数。

游戏模式

函数描述
gamemode(target, mode)设置游戏模式
spawnpoint(target, x, y, z)设置出生点
rs
gamemode(@s, "creative");
spawnpoint(@s, 0, 100, 0);

侧边栏显示

函数描述
sidebar_set(title, target, objective)配置侧边栏
rs
sidebar_set("Kills", @a, "kills");

Released under the MIT License.