TCY服务器的妙妙小工具目前实现的功能
如果网页有bug或者没有及时更新最新数据,请尝试按ctrl+F5刷新网页重载,如果还是有问题,请在qq群@糖醋鱼反馈
本文暂未把全部实现的功能都编入,后续更新!暂时只写了玩家可能用的比较多的指令。
📝 /tcynote记事本 (箱子 GUI) 酒狐特供ver
| 指令 | 核心功能 | 交互方式 | 权限 |
|---|---|---|---|
/tcynote <内容> |
即时记录 | 酒狐会一边嚼零食一边帮你记录,自动生成秒级ID | 所有玩家 |
/tcynote history |
管理个人笔记 | 弹出箱子界面,酒狐会根据笔记数量吐槽或讨食 | 仅本人 |
/tcynote trashcan |
翻垃圾堆 | 打开回收站界面,查看或恢复最近删除的笔记 | 仅本人 |
/tcynote history <玩家ID> |
偷看他人笔记 | 弹出箱子界面,只读模式(不可修改) | 全员或管理员 |
/tcynote delete <笔记ID> |
指令删除 | 将笔记移入回收站(也可在GUI内操作) | 仅本人或管理员 |
注:游戏内指令按tab自动补齐可能还会显示restore_internal , delete_trash_internal ,internal_page ,这些是给 GUI 按钮用的内部指令,玩家一般不需要手动输入
举例说明:纯GUI交互实测很难行得通,直接在后台调用函数会冲突从而无法实现功能。
但Minecraft 对指令的处理优先级非常高,且流程独立,让按钮执行 /tcynote internal_page <页码> <目标> ,我让“下一页”按钮来代替玩家执行此操作,即可实现笔记本翻页
单条笔记字符上限?
通常来说,由于我们的内容会展示到物品“纸”的lore(显示端(物品 Lore))里,mc原版输入指令的聊天框(输入端(聊天栏))也许也有输入长度限制,考虑这些情况下 限制在 240 个字符左右 是最安全的。
输入端的瓶颈(主要限制)
这是最大的瓶颈。Minecraft Java 版客户端的聊天栏输入上限通常是 256 个字符。
- 你的指令前缀 /tcynote (含空格)占用了 9 个字符。
- 所以,玩家实际能输入的笔记内容大约是 256 - 9 = 247 个字符。
(注:如果是中文,也是按 1 个字符计算,但视觉上会更宽。)
2. 显示端的表现(Lore 自动换行)
在我们的脚本中,为了防止一行字太长超出屏幕,我写了一个自动换行逻辑:
for (let j = 0; j < rawText.length; j += 25) {
// 每 25 个字符切一段
loreList.push(getJsonText(rawText.substring(j, ...), "white"));
}
这意味着: - 如果你写满了 245 个字。 - 在物品 Lore 里会显示为 10 行 左右的文字。 - 10 行 Lore 在 Minecraft 界面里是非常舒服的长度,完全不会超出屏幕。
游戏内功能展示
-

笔记仓库
-

垃圾桶
-

聊天栏提示示例
🎮 界面交互说明
-
记录 (Input)
-
玩家输入
/tcynote 今天挖了一组钻石(支持空格/符号) 后,系统会自动生成yyyyMMddHHmmss格式的时间戳 ID。 -
数据通过
TCYPerf.writeAsync异步存入kubejs/tcy_note_storage/玩家名.json,同时酒狐会反馈她“写好了”。
-
-
浏览与管理 (GUI)
-
左键点击笔记:“抄作业”。酒狐会将内容打印到聊天栏,点击文字即可复制到剪贴板(并吐槽玩家太懒)。
-
中键点击笔记:“大喇叭”。酒狐会护主心切,将这条笔记内容全服广播给所有人看。
-
右键点击笔记:“扔掉”。将笔记移入回收站,酒狐会表示嫌弃。
-
底部控制栏:包含翻页箭头与 下界之星(提示按 ESC 退出,点击会触发酒狐想吃宵夜的语音)。
-
-
查看他人 (Social/Admin)
-
当使用
/tcynote history <玩家ID>查看别人时,界面标题会标注(只读)。 -
此时 右键 的删除逻辑会被锁定,无法修改他人的任何数据。
-
-
垃圾堆管理 (Trashcan GUI)
-
左键点击笔记:“捡回来”。笔记恢复至主列表顶部,酒狐会求夸奖(“给粘回来了!”)。
-
右键点击笔记:“喂食”。永久删除该条记录,酒狐会把它“吃掉”(彻底销毁)。
-
机制说明:回收站自动保留最近 100条 删除记录,超过限制自动顶替旧数据。
-
💾 技术底层支撑
-
读取机制:通过
TCYPerf.readAllText同步读取 JSON 字符串,再由 KubeJS 进行对象解析。确保界面打开无延迟。 -
写入机制:通过
TCYPerf.writeAsync实现非阻塞式 IO,保证在保存大量笔记时,无论是记录、删除还是恢复,都不会导致服务器主线程卡顿。 -
存储结构:数据存储在
玩家名.json中,包含id,time,text三个核心字段。-
主库:
kubejs/tcy_note_storage/玩家名.json(活跃数据)。 -
回收站:
kubejs/tcy_note_storage_trash/玩家名.json(已删数据)。
-
-
交互优化:底层采用
gui.getSlot(x, y)坐标定位法,并配合ClickType逻辑修正,解决 Shift+右键 在部分服务端无法检测的问题,改为更稳定的 纯右键/中键 触发。
常见问题🦊 1. 普通玩家会误删别人的笔记吗?
绝对不会!一万个放心!
底层原理: 在我的代码逻辑里,每个玩家的数据是物理隔离的。
-
存储方式:
kubejs/tcy_note_storage/玩家A.json和kubejs/tcy_note_storage/玩家B.json是两个完全不同的文件。 -
删除逻辑:
JavaScript
// deleteNote 函数第一行: let data = loadData(player.username); // 只能读取【下指令的人】的文件当玩家 A 输入
/tcynote delete 20251221120000时,系统只会打开 玩家A 的本子,找这个 ID,撕掉。 哪怕 玩家B 在同一秒也有一个一模一样的 ID20251221120000,系统根本看都不会看玩家B的文件一眼。
酒狐吐槽:
“哼,本狐虽然贪吃,但记性很好的!每个人的本子都是分开藏在不同树洞里的,A抢不走B的零食,也撕不掉B的笔记!”
👑 2. 管理员如何删除指定玩家的“同ID”笔记?
既然普通删除指令只能操作自己,那管理员想删别人的,确实需要一个新的特权指令。我们需要明确告诉系统:“我要删 玩家B 的 那个ID”。
酒狐增加了一个管理员专属指令: /tcynote admin_delete <目标玩家ID> <笔记ID>
只会用来管熊孩子,但实际上可能不如直接去本地json进行大调查来得快(?)
🦊 /foxqqh 酒狐悄悄话
| 指令 | 核心功能 | 交互方式 | 权限 |
|---|---|---|---|
/foxqqh on |
开启陪伴 | 重置计时器,开始发送悄悄话 | 所有玩家 |
/foxqqh off |
安静模式 | 停止发送悄悄话,酒狐进入休眠 | 所有玩家 |
/foxqqh <分钟> |
频率设置 | 设置发送间隔 (支持 1-30 分钟) | 所有玩家 |
游戏内功能展示
-

*聊天框设置提示
🎮 系统交互说明
-
智能计时 (Logic)
-
进服时,系统通过
TCYPerf.readAllText读取玩家配置,并无条件发送欢迎界面(酒狐大脸) 。 -
计时器基于服务器 Tick 运行,每秒累加一次 。
-
当
foxTimer达到设定分钟数时,从语录库中随机抽取一条文本发送 。
-
-
语录库管理 (Content)
-
语录存储于
kubejs/server_scripts/酒狐文本存储foxqqh用.txt。 -
系统启动时通过
TCYPerf.readAllText一次性读入内存并按行分割 ,确保随机抽取时达到零延迟。 -
支持 Minecraft 原生颜色代码(如
&d自动转换为§d) 。
-
-
配置持久化 (Persistence)
-
读取:利用
TCYPerf.readAllText绕过 KubeJS 沙箱,同步获取 JSON 配置。 -
写入:修改开关或频率时,调用
TCYPerf.writeAsync异步保存。 -
非阻塞:即使有大量玩家同时修改设置,得益于
IO_EXECUTOR单线程池,也不会造成服务器瞬时卡顿(MSPT 飙升)。
-
💾 技术底层支撑
-
读取机制:通过
TCYPerf.readAllText同步读取。该方法在 Java 层直接调用Files.readAllBytes,相比脚本层更稳定且不受类过滤器拦截。 -
写入机制:通过
TCYPerf.writeAsync实现。它将 JSON 字符串提交至后台线程池处理,避免了主线程在执行Files.write时产生的 IO 等待。 -
存储结构:
-
配置:
酒狐foxqqh各玩家配置保存.json,结构包含enabled(开关),interval(频率),name(最后在线ID)。 -
语录:
.txt文档,每行代表一条独立语录。
-