AE2 Pattern Disk 0.5.0 [NeoForge 1.21.1]
Curse Maven Snippet
What's new
新增
JEI 里可以直接把物品拖进样板编辑区(两个终端都有):把 JEI 里的物品/流体拖到合成格、处理槽、切石或锻造格上,那一格就设成它(只认当前编码模式在用的格子,与 AE2 自带拖放的规则一致:AE2 的 EMI 集成对 AE2 屏幕通用,本模组在 EMI 侧不另写代码)。只填编辑区、不自动写盘,是否写盘仍由「编写样板」决定。
管理终端可以把样板磁盘存回容器:两条手势——① 手握样板磁盘左键点某个容器的「剩余槽位」格,即存进这台容器;② Shift+左键背包里的一张样板磁盘,存进当前右键选中那张盘所在的容器(先右键选中一张盘,没选中会在聊天栏提醒)。具体落到哪个空槽由服务端挑(客户端清单可能落后一帧);写完立即重推磁盘清单,表与盘内容跟着更新。已占用的磁盘格仍是原手势(左键取到光标),不做覆盖交换;成功存入只在动作栏报一句(可连点,不刷聊天栏),「没盘可存」「容器已满」「容器不在网格上」则在聊天栏说清原因。
背包里的 Shift+左键不再把物品「塞进第一个空的编码格/处理槽」(两个终端都修):AE2 有一条给过滤器槽准备的兼容回退,会把一份不消耗原物的「鬼影」写进 FakeSlot(不看这个物品槽收不收、也不看那个格位当前是不是活的),于是在合成格/处理槽里凭空多出一份、原物还在背包里。现在两个终端都不再走这条回退:编码终端其余照 AE2 常规(已编码的样板回到样板编辑槽,普通物品进 ME 网络——本屏有物品网格,送进去看得见,网络放不下时只会原地不动);管理终端没有网络物品栏,Shift+左键只认样板磁盘(存进选中盘所在的容器),其余物品不会被送进网络、也不会落进编码格位(已编码的样板仍照常回到样板编辑槽)。想让物品进网络请到有物品网格的终端。
「附加排序」开关(按 mod 排序时出现):默认开着,开了相当于同时开两层排序。一级:把去掉数字后名称相同的归为一组(
1k存储元件与4k存储元件同组,1k存储组件另成一组),这样同一系列的不同容量会相邻,而不是被拆成「1k存储元件、1k存储组件、4k存储元件」;二级:组内按名字里的数值排(1k < 4k < 16k < 64k < 256k < 1M、4 < 16 < 64 < 256 < 1024,数字后面跟 k/M/G/T/P/E 时按 1024 的幂算)。关掉就退回 AE2 原本的两层(mod → 名字字面序,「16k」会排到「1k」前面)。开关只在「按 mod」那一档露面,两个终端各一枚(编码终端管物品网格,管理终端管盘内样板)。物品网格那条走一个极小 mixin(KeySortersMixin:在 AE2 的比较器构造处打个头,只在本模组终端开着这一档时改返回值),并且require = 0+ 配置required: false——AE2 将来改了这个方法的签名,最多是这个功能静默失效,不会让游戏起不来;mixin 配置也正式在neoforge.mods.toml里声明了。管理终端补回排序模式:工具栏上那两枚 AE2 排序按钮(名称 / 数量 / 按 mod,以及正倒序箭头)不再被藏掉,改作用在盘内的样板上——名称档比格子里显示的那个名字(主产物),mod 档先按产物所属 mod 分组再比名字,数量档对样板没有可比的东西(一枚就是一件)保持原顺序。排序只改显示与命中口径,取件/换槽仍按盘里的存储序号说话(显示位次→存储序号是一张显式映射表,排的是序号而不是堆)。
管理终端列出所有支持样板磁盘的容器:分组的骨架从「磁盘清单」换成「网格上的宿主名单」——没插盘的供应器、被抽空盘的机器都在表里(能插几个、还剩几个空槽看得见);宿主名单(位置 + 身份盐)同时进了刷新指纹,所以插一台空供应器、或把最后一盘抽走都会让表跟着刷新。搜索框有内容时,没命中磁盘的机器不再列出来(否则一搜就满屏空机器)。
管理终端接上了滚动条:右侧那条拖拽/滚轮/点击轨道翻页的滚动条(AE2 同款,表不长时自己变暗),滚轮在整张界面上都能用;行数变化时范围由屏幕喂给它(它管的是这张自画表格,不是 AE2 的物品网格,所以另接一枚,并把物品网格那枚的滚轮接管关掉——它排在前面又默认接管整屏滚轮,会把表格的滚轮吃掉)。
管理终端磁盘格补上同款提示:鼠标搁在磁盘格上,弹出与编码终端磁盘列表同一套信息——名字、已用/容量、标记(开了原版高级信息还多一行标记 id),以及这一格上的五种手势(左键取到鼠标 / Shift+左键取进背包 / 右键选中写盘目标 / Shift+右键打标 / 中键改名)。
模式轮换按钮的提示语报出当前类型:鼠标搁上去第一行就是现在所属的配方类型(合成 / 处理 / 锻造 / 切石),第二行是「切换模式」;附加排序那枚则在第一行写当前状态(开着就写「启用附加排序」),后两行把上面那两层规则各自说清楚。
工具栏按钮的次序固定下来:管理终端从前到后为「打开指南 → 排序按 → 附加排序 → 排序顺序 → 终端风格 → 显示模式 → 显示槽位 → 模式轮换」(编码终端没有后三枚中的前两枚,它就走到模式轮换为止)。顺带把管理终端样式里那个
sortable: false去掉了——它一直让 AE2 不给这屏加「排序按」按钮,于是排序档位在本终端根本无法切换(本轮的两项排序功能都靠它)。AE2 那根按钮条只有「加」没有插入接口,所以本模组直接调整它内部的按钮表;改不动时则退回默认次序(宁可位置不对,不该把界面弄坏)。样板磁盘供应器补上扳手调「全向 / 定向」:方块形态与 AE2 样板供应器同一套手势(扳手旋转档点某一面:全向时改成朝这一面的反向推,点它正推着的那一面就回到全向,点别的面绕一圈转一格),直接用那块
PUSH_DIRECTION方块状态(贴图与 blockstate 本来就在,换档自动切模型);面板形态没有「点哪一面」这回事,所以改成依次轮换(贴附面 → 全向 → 其余五面 → 回贴附面),档位存在自己的 NBT 里(没动过时仍是旧行为:只朝贴附的那一面推),并在动作栏报一声当前档位(面板没有箭头模型,不报玩家看不出扳手做了什么)。新增「ME样板磁盘管理终端」(电缆上挂载:
ae2_pattern_disk:pattern_disk_management_terminal):与编码终端同一套磁盘逻辑与编码区,但磁盘列表换成一张铺满面板的表格——按持有磁盘的机器分组(组头带图标、名字与张数,以及该组的显示/隐藏开关),一张盘从一行开始:首格是磁盘本身(底色叠一层浅绿,纯上色不带贴图),后面 16 格是盘内样板,装不下的往下续行、续行 17 格全是样板(盘内容按需从服务端拉,视口变了才重发,另有一秒心跳兜底;行数靠服务端在分组里带出的张数,不必等内容到货)——样板格显示的是该主产物,与样板访问终端同一口径(AE2 的EncodedPatternItem#getOutput),任何类型都直接显示(非物品产出由 AE2 包成伪物品),不必按住 Shift 才看得出它做什事;解不出来的样板仍然标红。搜索沿用编码终端的口径;操作手势见下面那条(管理终端已改成就地取放)。组件贴图走管理终端自己的一套(与编码终端分开,本批重绘了其中两张),界面贴图用自绘的guis/pattern_disk_management_terminal;面板高度改由终端风格档位决定(terminalStyle几何一并修正为「表头 17 + 行 18×n + 尾饰 95」,页脚的真槽位/控件/提示全部改bottom锚定跟随面板底边),宽度 340。管理终端新增「显示模式」按钮:与 AE2 样板访问终端共用同一个设置(显示全部 / 只显示可见的 / 只显示还有空槽的),筛选在服务端做,换档后重新分组推送,按钮图标随档位回显。
管理终端新增「隐藏槽位 / 显示槽位」按钮:机器还没插盘的剩余空槽列在该组磁盘后面;收起时整台机器只占一行、格子的右上角写出它代表多少空槽,展开时每个空槽一行(竖着排在第一列)。按钮图标是本模组新绘的两枚(
states.png的 (64,32) 四格 = 展开、(80,32) 单格 = 收起),就在「标准 / 极速」右侧、同一行同一规格。两个终端的开关有了记忆:「强制显示无标记样板磁盘」与「合并相同物品」原先一个存在屏幕、一个存在菜单,都是开一次界面就回到默认;现在与「替换」同款,值存在终端部件自己的 NBT 里(服务端权威:客户端点一下发动作、服务端写 logic 并回读),重开终端保持上次选择。
管理终端可以就地取放样板与磁盘:磁盘左键取到鼠标、Shift+左键取进背包、右键选中(再右键取消);选中的那张盘就是「编写样板」的写盘目标,首格会描一圈高亮。盘里的样板同样左键取到鼠标、Shift+左键取进背包、右键填进样板编辑槽。取一张样板要从 ME 网络扣一张空白样板(与样板访问终端取走同一套账,网络里没有就取不出来),写回磁盘时退回;磁盘本体不扣空白样板。既有手势照旧:手里拿着工作方块右键仍是打标(空手/拿着别的才是选中)、Shift+右键文本打标、中键改名。
修复
管理终端表格按显示名合并同名容器,并不再写坐标:组头改成显示它贴着/指向的那台机器的图标与名字(与 AE2 样板访问终端同一口径;供应器被命名过则显示命名的名字,什么都没挨着才显示自己)。指向同一台机器、或同型号但没接东西的几台机器以前各占一行、靠坐标后缀区分,现在合成一行,坐标也就不再写。存盘时从同名几台里挑一台还有空槽的;「隐藏槽位」收起的空槽数是它们之和。
「附加排序」按钮的提示语首行改成写当前状态(开着就写“启用附加排序”),与「隐藏槽位」等开关一个口径;之前写的是点下去会做什么,和按钮画的图标正好反着。
管理终端表格滚动条的落点:向右 3px、向下 1px,贴着行带右缘、落在表头下方。
「空的样板磁盘供应器不出现在管理终端」修好了:上一批只把宿主名单推到了客户端,而表行的骨干架仍然是「磁盘清单」——客户端逐张盘生成行,没有盘的机器自然生不出任何行,看起来就像没实现。现在客户端改成按宿主分组生成行:有盘就把盘挂到该组下,没盘也占一组(与它的剩余槽位行),隐藏整台机器的开关与搜索过滤照旧。
管理终端不再把背包里的东西 Shift+点击送进 ME 网络:本屏没有网络物品栏(AE2 的物品网格被移除),而菜单仍是 ME 存储菜单,那一下会让物品进入网络——从视线里消失、也没地方拿回来。现在本终端重写的「快捷入网络」入口直接拒绝这一路径;终端自己槽位之间的快捷移动不受影响。
修掉「高效分子装配室」翻页后物品不显示:翻到别页再翻回来时,那一页样板槽/合成槽里的东西不再显示,关开界面才恢复。槽位的启用状态只由
showPage()维护、原先只在渲染帧刷新,而服务端的字段包先于槽位包到达,槽位包在客户端 tick 落地时按「这个槽不在当前页」被整包丢弃——服务端此时已把它记进remoteSlots,不会再补发。现在客户端处理服务端字段同步时先把当前页应用一遍,启用状态抢在槽位包之前就位。「编写样板」不再销毁样板编辑槽里的样板:网格为空而编辑槽里已经停着一枚写好的样板时,原先会把它清成空白样板(等于把玩家的样板弄没了);现在改成:有唯一写盘目标就把它写进那张盘,没有就原样留着。
管理终端的物品落点与槽位对齐:两处手写几何都少了 1px。其一是样式 JSON 里的玩家背包/快捷栏槽位写成了
left: 7,而 AE2 的槽位值用的是「物品坐标」(格子包围盒在 7、物品在 8,见 AE2 自带screens/common/player_inventory.json与TerminalStyle#getSlotPos的注释),横向因此整体偏 1px(纵向 136/194 与 AE2 的bottom: 84/26在 220 高面板上本来就等价,未动);其二是自绘表格的行带内容:AE2 的槽位口径是「行带内格框填充区从带上沿 +1 起」,而代码按 +2 绘制,纵向低了 1px(物品压在格框上边线上、底下露缝)。现在槽位内容走CELL_Y_INSET = 1(磁盘格、盘内样板格、空槽格一致),纯文本的组头行单独用ROW_TEXT_Y_INSET = 2保持原观感;空槽格用的 18×18 槽框贴图也改为与行带格框同格位,不再出现 1px 双线。横向仍为 +1。管理终端表格的落点与底色按贴图重新对齐:表格是自绘的,原先把填充区起点当成面板的 (1,1)、标题条按 17px 算,而行条切片又从标题条末行起手——三处合起来让画出的物品、磁盘格浅绿底色与鼠标命中都偏了约 8px,行条还丢了 y=35 那条 1px 分隔线。现在按贴图实测取值:填充区从 x=8 起(落点口径沿用 AE2 的「格子 x/y 即物品左上角」,底图在它 −1 处,所以取
LIST_X=7)、标题条 18px、行条切片 y18..35;绘制与命中仍共用同一组常量。修掉「ME样板磁盘管理终端」开出编码终端界面:菜单实例携带的
MenuType才会被服务端写进开界面的包、由客户端据此挑屏幕,而编码终端菜单的构造器写死了自己那一个,管理终端菜单沿用父类构造器时被一并带成编码终端类型——菜单数据其实是管理终端的,所以不崩、只是开错界面。现在类型改由构造器参数下发,管理终端传自己的类型;编码终端与 ExtendedAE Plus 适配子类行为不变。同一错位还静默废掉了按管理终端类型登记的 JEI/EMI 配方处理器(客户端报的是编码类型,永远匹配不上),一并修好。管理终端不提供上传入口:它走标记路线,不把样板上传到网络。NEO ECO 的上传按钮原本由父屏
init()主动注入、继承后照样会显示,现由屏幕钩子挡掉(默认保留,编码终端与 EAE+ 适配屏不受影响);ExtendedAE Plus 那条本就挂在编码类型下,天然不会出现在管理终端。修掉 0.4.0 引入的可选依赖硬引用:编码终端的菜单/界面适配子类被「总是加载」的类直接引用,而类一被加载就会解析它
implements的 ExtendedAE Plus 接口——if守卫只挡执行、不挡加载,于是没装 EAE+(或装着不含该契约的版本,包括在架的 1.6.2)的客户端会在启动注册阶段直接崩在NoClassDefFoundError: com/extendedae_plus/api/upload/IPatternUploadMenu。现在两个适配子类只经反射按类名创建(ExtendedAEPlusCompat/ClientExtendedAEPlusCompat),总是加载的类里不再出现它们的名字。顺带删掉mods.toml里那条凭空生出的 EAE+ 依赖声明:代码对它的版本零要求,真正要认的是「那两个接口类在不在」。契约探测同时检查上传菜单与上传终端两个接口,只带其中一个的构建会整体退回基类,不会出现「一半能用」的状态。
变更
- 两个终端的排序不再“看得到却管不着”:编码终端的磁盘列表本来就按显示名排(那是列表自己的顺序,与排序按钮无关);现在按钮真正管的是物品网格与盘内样板——与 AE2 终端的口径一致(排序是视图层的事,不动任何存档数据)。
- JEI 改成更宽的兼容范围:可选依赖从
[19.56.0,)改为[19.52.0,20.0.0)。本模组只用到 19.52.0 才有的配方转移监听器接口(IRecipeTransferListener/IRecipeTransferContext/RecipeTransferResult,19.52.0 新增、19.51.0 还没有),19.56 是可选联动的 ExtendedAE Plus 自己要的版本、由它自己声明——没装它的整合包不必为了本模组把 JEI 拉高。上界封在 20.0.0:那是另一条 Minecraft 线,且RecipeType被IRecipeType取代(本模组的标记名反查仍在用前者)。编译基线仍是 19.56.0(已用 19.52.0 实际编译验证过)。 - 网络格式变更:磁盘分组包每张盘多带一个「样板数」字段(表格据此决定续行行数),服务端与客户端需要同版本。
- 对外上传链的空白样板账收紧:上传/写入路径(ExtendedAE Plus 的「上传到供应器」按钮,以及走同一套 API 的 AE2:Utility 自动上传)写盘成功后退回网络的那张空白样板,现在退不回去就不写——旧行为是照写、退失败只在日志里报一句,等于把那张空白样板吞掉。网络不在、或网络塞不下时,这次上传以失败告终,样板留在发起方手里(EAE+ 那边会把它报成上传失败,不会静默当成已上传)。同时给终端视图契约加了一个默认实现的预检钩子(
hasRoomForBlankPatterns),不影响其它宿主。
This mod has no additional files

