CS2-Box 在 GUI 里渲染 3D 物品预览(26.x PIP / 1.21.1 Matrix4fStack / forge_1_20_1
PoseStack + TACZ 枪械 3D)。本文件记录与 Modern UI(modernui,
Motschen 系之外的 Modern UI for Minecraft)
的兼容策略:装 Modern UI 时 3D 预览保持 3D,不降级。
说明:2026-09 核查时 不存在“Cocoon UI”模组——Modrinth 上的 Cocoon 是服务端插件兼容层,与 UI/3D 渲染无关, 因此不在本兼容范围内。
| 环境 | 3D 预览(PIP/拖拽/TACZ 枪械) | 背景模糊 | 其它 UI |
|---|---|---|---|
| 无 modernui(基线) | 3D 正常 | 原版模糊 / Blur 模组接管 | 正常 |
| 装 Modern UI | 保持 3D(不降级) | 原版模糊 / Blur 接管 | 正常 |
| Modern UI + Iris/Oculus | 降级为 2D(shader 规则优先,见 SHADER-COMPAT.md) | 原版模糊或不可见 | 正常 |
- 官方兼容承诺:Modern UI 的 README 明确声明其引擎面向
“Minecraft 与基于 vanilla GUI 系统的模组”,无需改代码即可获得其现代化文本/动画
系统(原文:“allows Minecraft and Mods based on Vanilla GUI system to enjoy a
modern text system … without modifying their code”)——CS2-Box 的所有屏幕都是
原版
Screen+GuiGraphics体系。 - 渲染路径分离:Modern UI 接管/增强的是字体与 UI 文本管线;CS2-Box 的
3D 物品预览走的是物品渲染引擎(26.x
submitPictureInPictureRenderState/getRenderState().addPicturesInPictureState,legacyItemRenderer+ 立即模式 buffer),与字体管线无交集。 - 与 Blur 的既有适配独立:Blur/背景模糊走原版背景钩子,Modern UI 不参与该路径。
因此把 modernui 加入 2D 降级列表会不必要地牺牲 3D 观感,与“尽可能保持 3D”
的目标相反。
-
supports3D()仍只对 shader 模组返回 false:!isShaderModActive()。 -
isShaderModActive()保持iris || oculus,不包含 modernui;注释写明决策与 “若未来某版本实测破坏 3D 路径,在此追加”的扩展点。 -
新增一次性诊断日志(首次调用
supports3D()时输出):[csgobox] 3D preview env: supports3D=true iris=false oculus=false modernui=true平台差异:NeoForge 26.x / 1.21.1 与 Forge 1.20.1 用
ModList.get().isLoaded(); Forge 26.x 用静态ModList.isLoaded();26.x 用CsgoBox.LOGGER,legacy 用本类LOGGER(Imports/字段已按平台适配)。 -
公开 op 签名未变(
supports3D()仍为无参 boolean),check-animops-drift.sh不受影响。
| 平台 | 构建 | 来源 |
|---|---|---|
| NeoForge 26.1.2 | ModernUI-Forge-26.1.2-3.13.0.4(NeoForge loader) |
CurseForge |
| NeoForge 1.21.1 | ModernUI-NeoForge-1.21.1-3.13.0.1 |
CurseForge |
| 26.2 / Forge 26.x / Forge 1.20.1 | 视发布情况而定 | 按需在 Modrinth/CurseForge 查 |
Forge(非 NeoForge)各平台若没有对应 Modern UI 构建,则
isLoaded("modernui")自然为 false,保持基线行为,无需特殊处理。
前置:把对应版本 Modern UI(含其前置,如 midnightlib 视版本而定)装入
run/mods/ 后 runClient。
- 启动日志出现
[csgobox] 3D preview env: ... modernui=true且supports3D=true - 开箱进度屏:滚动条带动画 + 3D 出货模型渲染正常(无黑框/翻转/闪烁)
- 拖拽 3D 预览(
GuiItemMove):旋转、缩放、中心点正常 - 批量开箱总览/流水屏正常;终端谈判屏报价 3D 预览正常
- TACZ 枪械(v1_21_1 / forge_1_20_1)检视视口 3D 渲染正常
- 字体渲染(Modern UI 接管后)中文/物品名无乱码、不遮挡
- 背景模糊与 Blur 模组共存时正常(若装 Blur)
- 无 modernui 基线不改动(回归:
supports3D()仍 true)
- 静态分析无法替代真机验证:Modern UI 的渲染引擎版本较多,某版本若被实测破坏
上述 3D 路径(黑屏/不可见),按本文件“扩展点”把该 mod id 加入
isShaderModActive()即可快速恢复 2D 兜底——这是刻意保留的后门,不默认开启。 - 降级开关只影响「预览表现」,不触碰服务端 RNG 与任何概率/玩法逻辑(同 SHADER-COMPAT.md 规则)。
- Modern UI + Iris/Oculus 同装时按 shader 规则优先降级 2D(shader 破坏面更大)。
docs/SHADER-COMPAT.md— Iris/Oculus 降级矩阵(与本策略并列)docs/ARCHITECTURE.md§渲染 — AnimRenderOps 门面与 3D 路径docs/CODE-REVIEW.md— 渲染门面审查清单