ETT - EMI树形标签

ETT - EMI树形标签

管理多个EMI配方树

EMI 树形标签

同时追踪多个 EMI 配方树,并获取涵盖所有这些配方树的合成列表。

Minecraft 1.20.1 · Forge · 需要 EMI 1.1+ · 仅客户端

EMI 在内存中只保留一棵配方树,因此打开第二棵配方树会静默丢弃第一棵。本模组会保留一个配方树列表,并在您切换标签时将其正确的一棵交换到当前位置——EMI 自身的树形界面负责所有绘制和编辑,因此每棵配方树的行为完全符合您的预期。


功能说明

标签页

您打开的每棵配方树都会成为一个标签页,而不是替换上一个。打开时按住 Shift 可单次反转此行为。

  • 每个标签页的实时进度——灰色(未收集任何材料)、琥珀色(部分已备齐)、绿色(已拥有全部材料),会定时对照您的物品栏进行检查
  • 分叉配方树——使用 + 或 Ctrl+D:目标相同、解决方案独立,这样您可以并排比较通向同一物品的两条不同路线
  • 重命名——这样“冶炼厂用的强化合金”就不会只是一个铁锭图标
  • 每个标签页独立的视口——每个标签页保留自己的平移、缩放和批次数量
  • 每个标签页独立的视图/合成模式——与 EMI 自身的模式按钮一致,但按配方树分别设置。只有处于合成模式的配方树才会向合成列表提供内容,因此您可以保持十几个配方树打开以供参考,同时只看到您实际正在建造的内容
  • 标签页在重启和资源重载后仍然保留——以其目标配方加上您选择的解决方案存储,然后重建

跨所有配方树的合成列表

当有多棵配方树处于合成模式时,EMI 的合成列表会从所有这些配方树中提取内容,重复的配方和材料会合并为单个条目。

配方树会针对一个逐渐缩减的资源池进行成本核算,而不是每棵配方树都假设拥有您的全部物品栏。两棵配方树各需要 10 个铁,而箱子里有 10 个铁时,会正确报告仍需要 10 个铁,而不是两棵配方树都宣称已满足需求。对标签页重新排序可以改变哪棵配方树优先获得资源。

真正的第二个侧边栏面板

本模组在 EMI 自身的侧边栏选择器中添加了一个合成页面类型,与索引、可合成物品和收藏并列。您可以将其作为页面或子面板添加到任意侧边栏,合成列表就会出现在那里,您的收藏内容不受影响。

列表分为待合成、共享材料(被两棵或更多配方树需要)以及每棵配方树各自的区域,区域之间有分隔线,区域标题可以点击折叠。


操作方式

全部位于 EMI 的配方树界面中。

操作 按键
切换标签页 左键单击,或 Ctrl+Tab / Ctrl+Shift+Tab
跳转到标签页 1–8,或最后一个 Ctrl+1 … Ctrl+8、Ctrl+9
重新排序 横向拖动标签页
重命名 右键单击标签页,或按 F2
视图 ⇄ 合成模式 Ctrl+单击 标签页
关闭 中键单击、× 按钮,或 Ctrl+W
重新打开已关闭的标签页 Ctrl+Shift+T
分叉当前配方树 + 按钮,或 Ctrl+D
滚动标签条 在标签栏上滚动鼠标滚轮

设置第二个面板

  1. 在 EMI 的设置中,向侧边栏添加页面或子面板
  2. 从选择器中选择合成

完成。一旦存在合成面板,收藏侧边栏就不再携带合成列表,因此不会显示两次。

如果在选择器中找不到此页面类型,说明模组未能注册它——请检查 latest.log 中来自 emitreetabs 的警告,它会回退为共享收藏面板。


配置

在游戏中:模组 → EMI Tree Tabs → 配置,这需要 Cloth Config。这是一个软依赖——没有它,模组功能完全相同,您可以手动编辑 config/emitreetabs.json。对该文件的修改会在几秒钟内生效,无需重启。

键 默认值 含义
enabled true 关闭意味着没有标签栏并恢复原版 EMI 行为
openInNewTab true 新配方树作为新标签页打开;Shift 单次反转
persistTabs true 在会话之间保存已打开的标签页
showProgress true 按物品栏进度为标签页着色
progressIntervalMs 500 重新检查进度的频率
barAtBottom false 将标签栏移动到配方树界面底部
maxTabs 32 每个标签页包含整个材料图,因此这是内存的主要控制项
closedTabHistory 16 Ctrl+Shift+T 可以恢复多少个已关闭的标签页;0 表示禁用
keyboardShortcuts true 上述快捷键的总开关
aggregateCraftingFavorites true 合成列表从所有处于合成模式的配方树中提取内容
sharedCraftingInventory true 配方树按标签页顺序申领材料,而非每棵配方树假定拥有全部物品栏
groupCraftingList true 将合成列表分为多个区域
showGroupSeparators true 在区域之间绘制分隔线
collapsibleGroups true 点击区域标题将其折叠
craftingInFavorites true 允许收藏侧边栏也携带合成列表。一旦放置了合成页面,此设置将被忽略,否则会显示两次
craftingPanelSide NONE 回退方案:接管某一侧的收藏面板

已知限制

  • 区域标题占据整行。 EMI 的侧边栏是固定的 18px 网格,悬停检测通过相同的运算将鼠标位置映射回去,因此只给标题其文本高度就意味着要在多个地方同时覆盖 EMI 的布局,并可能使点击落在错误的物品上。分隔线是免费的——它们绘制在间隙中——但文本不行。
  • 区域按行对齐,而非按页。 EMI 对侧边栏进行分页,因此一个区域可能跨页中断。填充到页面边界会在窄侧边栏中浪费大量槽位。
  • 合并后的配方树每个材料只能保留一个配方,这就是为什么没有单一的组合树视图。两个标签页以不同方式冶炼铁,无法在一棵配方树中同时满足。

兼容性

由于 EMI 没有为配方树暴露任何公共 API,本模组直接挂钩 EMI 的内部实现。已验证可用的组合:EMI 1.1.24 · Forge 47 · MC 1.20.1。如果 EMI 更新导致源码中列出的内部实现被重命名,本模组将失效,最可能的表现是启动错误而非静默失败。已与影响部分相同类的 EMI++(emixx)进行了联测。

构建

需要 JDK 17。

./gradlew build

生成的 jar 文件位于 build/libs/。./gradlew runClient 会启动包含 EMI 的开发客户端。

AI 披露

本模组中的代码由 AI 助手根据我的指示编写。完整声明请参阅 AI-DISCLOSURE.md。

许可证

MIT。