MCphone Forge 1.20.1 v0.11.0
MCphone Forge 1.20.1 v0.11.0
这一版把 1.21.1 那一支 1.9.0 ~ 1.9.3 的四个小版本一次搬了过来。 上一版(0.10.2)
跟到的是那边的 1.8.19,此后那一支加了图片消息、每个 App 一个快捷键、界面大小这几样,
现在两支又对齐了。
运行环境: Minecraft 1.20.1 · Forge 47.4.0 或更高 · 客户端与服务端都需安装
可选联动一个没变:Curios、Waystones + Balm、MCEF、NetMusic、Patchouli、GuideME、FTB Quests。
⚠️ 先说清楚这一版验到哪儿
别把它当成熟版本用,而且这一版欠的比上一版多。
代码、专用服务端启动、两道构建期校验都是绿的,断言测试从 6 个加到 10 个、
122,377 条全过;但新搬来的这五样一个像素都没在真游戏里看过:
| 验了什么 | 怎么验的 |
|---|---|
| 存档格式(含老存档兼容)的往返 | ChatMessageCodecTest,38 条断言 |
| 图片那三个包与会话摘要的线格式往返、上限两侧 | ChatImagePacketTest,47 条断言 |
| GIF 拆帧(局部帧、透明索引、隔行、延迟众数、抽稀) | GifDecodeTest,33 条断言 |
| 压图、透明底、自动降档、按内容去重 | ImageEncodeTest,55 条断言 |
| 服务端能起来、新配置项被吃下 | runServer → Done (7.338s)!,零 ERROR |
| 声明的 Forge 下限(47.4.0)仍然编得过 | ./gradlew compileJava -Pforge_version=47.4.0 |
完全没验的:发图与表情的界面、GIF 在别人手机上动起来、快捷键绑定与冲突提示、
界面大小那一页、相机的模糊闪光。
这台开发机没有显示环境,runClient 跑不起来——上面那几样全是要点着看的东西。
开个新存档试,别拿主力存档。 碰到问题请带上 logs/latest.log 开 issue。
多人游戏要两端都升。 这一版在聊天通道中间插了三个包,通道的协议号跟着 +1,
0.10.2 的客户端连 0.11.0 的服务端会被直接拒绝(这是刻意的:让它连上去只会解错包)。
📱 这一版多了什么
💬 美西螈能发图和表情了
输入栏左边多了一个「+」,点开有图片与表情两项。
- 图片就是相册:相机拍的、按 F2 截的都在里面,点一张就发出去。
也可以直接把图片文件拖进游戏窗口——正开着会话时拖进来就是发给他。 - 表情是你自己的表情包,放在
config/mcphone/stickers/,跟着客户端走。
拖进窗口导入(一次能拖一整包),或者点那一页右上角的「打开文件夹」丢进去。 - GIF 是动的。 拆成帧、拼成一张图传过去,播放在客户端。太大的自动降一档帧尺寸、
再不行隔帧抽稀(至多 36 帧),实在塞不下就退回去发第一帧。 - 收到的图点一下放大,右上角能存进相册(存的是原始文件)。
- 发之前会压:长边 512 像素,体积由服主定上限(默认 512 KB)。
每对会话只留最近 20 张图,更早的图片消息还在记录里,显示成「已过期」——
不删那一行,是因为删掉之后聊天记录会凭空少几句。文字消息仍是每对 100 条。
⌨️ 每个 App 一个快捷键
「设置 → App 管理器 → 点开某个 App → 快捷键」,按一个键就绑上,
以后在世界里按它直接开机并进这个 App。
- 键盘和鼠标键都能绑,包括侧键、中键、右键。左键除外,它是"算了"。
- 支持组合键(Ctrl / Shift / Alt,可以叠)。触发要求完全一致:
绑了 Ctrl+K,光按 K 不开,Ctrl+Shift+K 也不开。 - 撞了车不拦你,但会先说一声——那一行变成「再按一次强制」并写明被谁占了。
- 绑在鼠标键上的 App 打开时不会顺带挥手或用一次物品。
存在 config/mcphone-client.toml 的 appHotkeys 里。
📐 界面大小
「设置 → 界面大小」把整个手机放大或缩小,75%–300%,拖那条或者点 − + 一档 25%。
原版的 GUI 缩放是全局的,这一项只管手机。
「贴合清晰倍数」默认开着:字是位图,GUI 缩放 × 界面大小 是整数时像素才方正,
所以档位自动对齐到 1/GUI缩放。关掉能拖到任意值,代价是笔画时粗时细。
窗口放不下时自动夹回去,配置里的数不动。
🗂 App 管理器重做
每个 App 一页:图标、名字、作者、版本、介绍、它是哪个模组给的、
声明的前置与联动模组装没装。卸载要点两次,系统 App 的卸载键是灰的并写明原因。
这一页也是每个 App 自己开关的去处——第一个这样的开关是快捷键,第二个是下面这个。
📷 相机的快门闪光可以换成模糊
「设置 → App 管理器 → 相机 → 快门闪光」,在白闪与模糊之间换。
白闪在夜里会把屏幕顶到全白,模糊那一版只是糊一下再收回来,亮度不变。
两种都不会进照片。存在 config/mcphone-client.toml 的 cameraSoftFlash 里。
🔧 顺带修的
- 设置里四个页面滚不动:壁纸、App 管理器、App 详情、关于,
内容超出一屏就再也看不见。 - 相册与壁纸页多了「打开文件夹」,直接用系统的文件管理器开那个目录;
壁纸那一页点过之后会盯着目录,拖进去的图切回游戏就看得见。 - 动态图标的
partialTick一直是 0,附属模组做不了平滑动画。
🖥 服主须知
存档的 serverconfig/mcphone-server.toml 多了两项(升级后自动补进去,不必手加):
| 项 | 默认 | 说明 |
|---|---|---|
allowChatImages |
true |
关掉后图片键不再显示,服务端也拒收上传的图。已经发过的图不删 |
chatImageMaxKb |
512 |
一张图最多多少 KB(64–768) |
图片占多少硬盘:chatImageMaxKb × 20(每对会话最多留 20 张不同的图)。
默认就是每对好友封顶 10 MB。这是最坏情况:Minecraft 的截图大片是天空与地形,
512 长边压出来常常只有 1 KB。图片按内容存,同一张表情反复发只占一份。
图存在世界存档的 mcphone/chat-images/ 下,做备份时别漏。
服务器启动时会扫一遍,删掉没有任何消息认领的孤儿文件。
这一支没有配置界面(Forge 1.20.1 没有内置的),这两项要手改文件。
手机自己那几项——字体配色、界面大小、快门闪光、快捷键——都在「设置」里点得到,
那是模组自己画的界面,不受影响。
🔧 与 1.21.1 那一支的差别
老的三条不变(唱片判定按 RecordItem 类判、没有配置界面、传送石按"拿着传送石"计价)。
这一版新增的差别玩家都感觉不到,逐条记在 docs/PORTING.md 的
「第七刀」一节里。挑两条值得知道的:
模糊闪光是自己拼的后处理链。 1.20.1 的 PostChain 没有 setUniform,
所以这一支自带一份只声明中转贴图的链定义,两个 pass 用公开的 addPass 加进去,
着色器程序仍是原版那支。画出来是同一个效果,半径一样跟着时间收。
带上限的编解码补齐了发的那一侧。 1.21 那边 ByteBufCodecs.list(上限) 是收发
两侧都拦的;1.20.1 没有那套组合子,这一支原先九处只拦了收的那一侧。漏掉发的那一侧
不是少一道保险——超量的包会照发,由收方解码时抛,而那等于断开连接,症状是
"对方莫名其妙掉线"而错在发的那一端。现在两侧都拦,收进了一个 core/net/Wire。
组合键在这边要自己数修饰键。 Forge 只有单数的 getActiveModifier(),
它按 Ctrl → Shift → Alt 返回第一个按住的——照直译过来,Ctrl+Shift+K 会被认成
Ctrl,而且编译、绑定都正常,只有按下去不响应。这边逐个问,行为与那一支一致。
🙏 第三方
jar 里嵌着 JavaMP3(MIT,用于音乐 App 解码 mp3),
许可证全文见 jar 内的 THIRD-PARTY.txt。