Ekra8154的头像

Ekra8154

加入于 2026年9月27日
资源 1
服务器 0
皮肤 0
Tupenter
模组Mod

Tupenter

## Tupenter Tupenter 是一个客户端 Fabric 模组,可充当命令助手。它允许你通过按键绑定重新发送命令或消息、使用内联数学和脚本语法,并创建支持自动补全的自定义命令和脚本! 它会将所有自定义脚本和语法转换为纯原版命令,展开后按顺序发送到服务器(如果确实需要发送到服务器的话)。许多纯计算脚本只会在客户端回显或显示消息,不会执行其他操作。服务器看到的始终只是纯 `/setblock` 命令,即使模组正在进行实际计算,将其变成彩虹螺旋。 ## 重新发送 Tupenter 会记录你发送的内容,并通过按键绑定(默认为 `R`)重放: - **按住**模式适合快速连续发送,或使用**切换**模式实现免手操作。 - 按任意顺序批量发送最近的 N 条消息,并为单条消息和整个批次设置延迟;支持预设消息列表和抑制命令反馈。 - 模组菜单中提供高度可自定义的设置,可切换模组功能,并为几乎所有功能进行设置。 ## 脚本 完整参考(包括所有指令、函数、参数类型和变量)请查看 GitHub 源码中的 SCRIPTING.md,或在游戏中运行 `/tupenter reference` 将其复制到剪贴板。* 本模组主要使用三种语法类型: | 语法 | 含义 | | --- | --- | | `$...$` | 表达式:可直接内嵌在原版语法中。表达式会在发送前求值并替换。 | | `#word` | 指令:用于控制 Tupenter。条件语句、循环和历史记录修改都以此为基础。永远不会发送到服务器。 | | `(...)` | 分组:在指令后,圆括号用于放置条件或语句组,例如 `#if (...) (...)`。在表达式中,它们的作用类似代码,可用于 `list(...)` 和 `blockset(...)` 等函数调用以及 `$(2 + 3) * 4$` 这样的数学运算。在普通命令文本中,它们只是普通字符。 | ### 链式命令 最简单的内联脚本方式是使用 && 链式执行命令。每条命令都有自己的 Brigadier 自动补全和语法高亮。由于链式命令会在发送到服务器前解析,因此兼容 WorldEdit 等模组。 ``` /time set day && /weather clear && /say ready //undo 2 && //replacenear 30 oak_planks spruce_planks && //replacenear 30 oak_stairs ^spruce_stairs ``` ### 注释 `##` 后跟一个空格即可开始一条不会执行的备注。备注会在下一个 `&&` 或行尾结束,因此即使是一行命令,也可以在各条语句之间添加备注: ``` ## bottom left && /activate 1 2 3 && ## the other one && /activate 2 3 4 ``` ### 内联计算 表达式允许你直接在普通原版命令中使用简单或复杂的数学运算。 ``` /give @s stick $32 + 5$ /give @s diamond $3s$ (s = stacks of 64) /summon $pick("zombie", "skeleton")$ /tp @s ~ ~$client.pos.y > 60 ? 10 : 0$ ~ ``` 数学运算是精确的,`1/3` 会保持为三分之一,不会产生浮点误差。 列表有两种形式:逗号会分别计算每个项目,而竖线会完全按照输入内容处理项目,因此方块和物品名称无需加引号。 ``` list(1, 2 + 3) list(oak_log | birch_log | spruce_log) ``` `/calc ` 会在本地打印任意计算结果,不会发送任何内容,适合在使用表达式前进行检查。 ### 读取世界信息 提供超过 90 个实时变量,例如位置、生命值、生物群系、光照等级、手持物品、准星指向的目标、天气、你正在看的实体及其 NBT。 ``` /echo standing on $block(client.blockpos.x, client.blockpos.y - 1, client.blockpos.z)$ #if (client.target.hit == "block") (/tp @s $client.target.blockpos$) ``` 许多并非内置的变量仍然可以直接通过 NBT 路径访问: ``` /echo elytra damage: $entity("self", "nbt.equipment.chest.components.minecraft:damage", 0)$ /echo $client.target.nbt.Health$ ``` 使用 `/tupenter dump` 浏览 NBT 树并找到所需路径。 ### 变量、循环和条件语句 Tupenter 支持创建仅在单次发送中有效的局部变量(`#local`)、会话持久变量(`#set`)、通过 `/tupenter var save ` 跨会话保存的变量,以及仅在变量尚不存在时创建变量的 `#setdefault`。 ``` #set spawn = "100 64 -200" #local roll = rand(1, 10) && /give @s stick $roll$ && /say I got $roll$! #local c:blockpos = blockpos(-10, 20, 85) && /tp $c$ #repeat 5 (/say tick $i$) #for $x$ in 1..10 step 2 (/summon zombie ~$x$ ~ ~) #foreach $mob$ in list(zombie | skeleton | creeper) (/summon $mob$ ~ ~ ~) #foreach $b$ in blockset(#minecraft:wool) (/give @s $b$) #if (client.health < 6) (/effect give @s regeneration 5 1) #setdefault runs = 0 && #set runs += 1 && /say run number $runs$ ``` 注册表标签会通过实时连接解析,在 `blockset(...)` 中输入 `#` 时,按 Tab 键即可自动补全该服务器上可用的标签。 ### 等待 使用 `#wait `,并以游戏刻、秒、分钟或 Minecraft 天为单位,在 Tupenter 操作之间创建延迟。默认情况下,它计算的是游戏时间,因此在 `/tick sprint` 期间会加速,并会在游戏冻结或暂停时停止。脚本采用惰性求值,这意味着 `#wait` 之后读取的值反映的是当时的世界状态,而不是按下 Enter 时的状态。 等待不会阻止后续命令并发运行。默认情况下,Tupenter 允许同时运行 8 个脚本。`/tupenter running` 会显示当前处于活动状态的所有命令和脚本及其 pid,`/tupenter abort ` 可终止它们。 ``` /say ready && #wait 3s && /say GO #wait 5m realtime && /echohud &ecows are ready to be fed! /echo you're at y=$client.pos.y$ && #wait 3s && /echo now you're at y=$client.pos.y$ ``` ### 静默、隐私和本地输出 ``` #silent /time set day && /weather clear (whole line) #repeat 5 (#silent (/give @s stick) && /say hi) (just part of it) #norecord /msg friend secret (kept out of resend history) /echo &amy y is &e$client.pos.y$ (shown only to you, sends nothing; &-codes color it) #unstage 2 (drop the newest 2 resend-history entries) ``` `#silent` 会隐藏你自己屏幕上的内容:命令反馈,以及 Tupenter 在 `#set` 创建或更新变量时显示的提示。命令仍会正常执行,其他玩家能够看到的内容也仍会发送给他们,例如 `/setblock` 命令的反馈。 ### 创建自己的命令 `/customcommand`,以及可从模组菜单和 `/tupenter menu` 访问的自定义命令选项卡,允许你使用原版命令和 Tupenter 语法创建自己的命令。它们可以轻松编辑或删除,并会自动加入 Mojang 的 Brigadier 自动补全,因此不会过时。 ``` /customcommand add waves = #repeat $count$ (/summon $mob$ ~ ~ ~) /waves 5 zombie ``` 下面是预装的 `/blink` 的定义方式。(`add` 拒绝已经存在的名称,因此请为自己的版本使用新名称,或者使用 `/customcommand update` 修改现有命令。) ``` /customcommand add blink "teleport to where you're looking" = #silent #local hit = raycast(maxdistance) && #if (hit == "miss") (/tp @s ^ ^ ^$maxdistance$) #else (/tp @s $hit$) ``` `/blink` 是真正的命令,拥有真正的自动补全、类型化参数和可选参数。预装的 `/portalcalc` 是另一个例子: ``` /customcommand add portalcalc = /echo $dim$: $floor(dim == "to_nether" ? p.x / 8 : p.x * 8)$ $p.y$ $floor(dim == "to_nether" ? p.z / 8 : p.z * 8)$ ``` 不带参数运行 `/portalcalc` 会告诉你对应传送门在另一个维度中的位置,并根据你所在的位置判断应采用哪种换算方向。这个命令完全不会向服务器发送任何内容。`/echo` 是 Tupenter 提供的客户端输出方式,只会向消息发送者本人显示消息,不会显示给其他人。 还有自定义*函数*,可用于在 `$...$` 中重复使用某个值。函数会计算一个值,但永远不会发送任何内容,这正是自定义命令的用途: ``` /customfunction add midpoint = scale(vadd(a, b), 0.5) /tp @s $midpoint(client.pos, spawn)$ ``` ### 每刻运行的脚本 模组菜单 → Tupenter → **脚本**中包含一些每刻运行一次的单行脚本,只要主开关处于开启状态就会运行。每一行已启用的脚本都会被包装在循环中,因此它是一个持续运行的脚本,而不是每刻重新解析一次:`#set` 的值会跨刻持久存在,`#wait` 也能自然工作。 脚本按世界分别启用,因此你为创造模式编写的脚本不会在生存服务器中触发,而你从未配置过的世界也不会运行任何脚本。`/tupenter scripts` 会显示你所在位置的世界中哪些脚本已启用,`/tupenter abort all` 则是紧急开关:它会停止所有脚本并关闭主开关。 由于脚本是循环,事件表现为需要测试的单刻标记: ``` #if (client.just_died) (/echo died at $client.blockpos$) #if (client.keypress.g) (/togglenightvision) ``` **使用脚本时的警告**:未加保护的命令放在每刻脚本中,会每秒执行 20 次,在多人服务器上会造成聊天刷屏。请像上面的示例一样使用 `#if` 进行保护。 ## 预提供的命令和脚本 下载模组后,它会自带一系列自定义命令和脚本。它们可以轻松删除或移除,且脚本默认处于禁用状态。 **可直接使用的命令:** | 命令 | 功能 | | --- | --- | | `/blink [maxdistance]` | 传送到你正在看的位置,并在墙壁处停止 | | `/ironkit` | 一整套铁制装备 | | `/portalcalc [pos] [dim]` | 在下界和主世界之间换算坐标 | | `/tickfreeze` | 切换 `/tick freeze` | | `/launch [speed] [no_gravity]` | 将实体朝你正在看的方向掷出 | **脚本:启用前全部处于禁用状态:** | 脚本 | 功能 | | --- | --- | | `rainbowTunnel` | 按下 `]` 并飞行,一条由荧石照亮、随你的移动形成螺旋的羊毛隧道会跟随你 | | `itemDespawnTimer` | 标记你死亡的位置,并倒计时物品的五分钟消失时间;在对应区块未被模拟时暂停计时 | | `creeperAlert` | 当苦力怕进入 8 个方块以内时,显示一次带距离的警告 | | `elytraWarning` | 在鞘翅损坏之前提醒耐久度 | | `restockReminder` | 村民在黎明时补货 | ## 生活质量 - **聊天栏语法高亮**:每个 `&&` 片段会根据其类型着色;命令会根据自身解析结果为各参数分别着色 - **感知链式命令的自动补全**:`/time set day && /weather cl⇥` 会补全*第二条*命令 - **可选择的聊天消息**:点击并拖动即可选中消息,按 Ctrl+C 复制 - **`/unroll`**:以试运行方式处理任意一行,并准确查看它将发送的内容,而不会真正发送 - **`/tupenter vars`**:列出你的变量;`/tupenter var save|delete `:管理已保存的变量 - **`/tupenter menu`**:从聊天栏打开设置界面;添加 `customcommands` 或 `scripts` 可直接进入对应选项卡 - 模组菜单中每项功能都有独立的开关 ## 文档 - `/tupenter help`:游戏内会为每条命令、指令、函数和变量提供文档,并附带可运行的示例 - `/tupenter reference`:将**完整**参考文档复制到剪贴板 - [SCRIPTING.md](https://github.com/ekra8154/Tupenter/blob/master/SCRIPTING.md):GitHub 上的相同参考文档,包括模型、所有指令、所有函数、所有参数类型、所有变量以及容易踩坑的地方 文档由代码所使用的同一组注册表生成,因此随着我更新模组,文档不会逐渐过时。 ## 许可证 许可证为 MIT,详情请参阅 GitHub 源码。 作者:Ekra8154
0
0
2026-09-27