Extreme Auto Crafter
基本信息
| 属性 |
值 |
| 注册名 |
avaritiaddons:ExtremeAutoCrafter |
| TileEntity |
TileEntityExtremeAutoCrafter |
| GUI ID |
2(Avaritiaddons.GUI_ID_EXTREME_AUTO_CRAFTER) |
| 硬度 |
50.0 |
| 爆炸抗性 |
2000.0 |
| 工具等级 |
镐(pickaxe)等级 3 |
| 材质 |
铁(Material.iron) |
| 脚步声音 |
Block.soundTypeGlass |
| 朝向 |
不可旋转(无 FacingSide) |
功能
9×9 终极合成台的自动化版本,提供 81 输入槽(GUI 槽 0–80)+ 81 矩阵展示槽(slot 81–161,FakeSlot 仅展示)+ 1 输出槽(slot 162,SpecialSlot 只能取出)。每 10 个 tick 检查一次:当输入矩阵与某个 ExtremeCraftingManager 配方匹配时,按"最小公倍数 + 输出槽最大堆叠"限制批量消耗输入并填满输出槽。当槽位 81–161(recipe matrix)被修改时设置 recipeChanged=true,触发下次重算。
输入物品被消耗时,如果有 hasContainerItem(如桶/瓶/木桶),会在输入槽中尝试放回容器物;放不下则在方块中心生成 EntityItem。
摆放要求
- 任何实心面皆可放置(无朝向设定)。
getItemDropped 返回 null(原版掉落关闭);被打掉时由 breakBlock 手动生成带 NBT 的 EntityItem 掉落物。
数值
| 数值 |
值 |
| 总槽位数 |
163(81 输入 + 81 矩阵展示 + 1 输出) |
| 输入槽号 |
0–80 |
| 矩阵展示槽号 |
81–161(FakeSlot,不可取放) |
| 输出槽号 |
162(SpecialSlot,只能取出) |
| 单槽最大堆叠 |
64 |
| Tick 间隔 |
10(coolDownTime) |
| GUI 尺寸 |
352×276 |
GUI 布局
| 区域 |
槽位号 |
坐标 |
| 输入区(9×9) |
0–80 |
(8…170, 18…180) |
| 矩阵展示区(9×9,FakeSlot) |
81–161 |
(184…346, 18…180) |
| 输出槽(SpecialSlot) |
162 |
(256, 188) |
| 玩家背包主区(3×9) |
163–189 |
(8…170, 194…248) |
| 玩家快捷栏(1×9) |
190–198 |
(8…170, 252) |
交互
| 触发 |
行为 |
| 左键 |
无直接效果 |
| 右键 |
打开 GUI(GUI_ID_EXTREME_AUTO_CRAFTER),服务端注册客户端打开 |
| 在输入槽修改物品 |
setInventorySlotContents 触发 recipeChanged=true |
| 在矩阵展示槽修改物品 |
FakeSlot.putStack 同步写入 slot 81–161 并触发 recipeChanged=true |
| 在输出槽右键 |
SpecialSlot.canTakeStack 仅允许取出与玩家手持相同的物品;空槽位不可取出 |
| 被打掉 |
掉落带 NBT 的方块物品,TileEntity 内容完整保存 |
配方
仅当未加载 GTNH/dreamcraft 且 craftingOnly=false 时注册:
S
NCN
N
S = avaritia:singularity meta=3
N = ore:blockCosmicNeutronium
C = avaritia:dire_crafting
算法(TileEntityExtremeAutoCrafter.updateEntity)
- 冷却 10 tick;
- 若
recipeChanged:用 ExtremeCraftingManager.findMatchingRecipe(9×9 matrix, world) 查找匹配配方;
- 若输出槽已有匹配结果:建立
patternMap = MetaItem.getKeySizeMap(81, 162, itemStacks)(key→所需数量映射);
- 若输出槽空但有匹配:占位空输出 ItemStack(
stackSize=0)并建立 patternMap;
- 每次 tick 计算
matches(currentInputMap, patternMap):按 key 求最小可合成批次数;
- 限制为
(outputMaxStack - outputCurrentStack) / outputStackSize;
- 调
cleanInput(maxAmount) 同步消耗输入、处理 hasContainerItem 的容器物回填或掉落;
- 输出槽
stackSize += maxAmount * outputStackSize。
- 对 patternMap 每个 key:
itemStack.stackSize -= diff,归零置 null;
- 若
original.getItem().hasContainerItem(original):取 getContainerItem 的容器物复制 diff 个,先尝试 tryAddStackToInputSlots 回填到输入区,放不下则 spawnEntityInWorld 为 EntityItem。
ISidedInventory 行为
| 方向 |
可访问槽位 |
可插入 |
可抽取 |
| 任意 side |
0–80, 162(slotsForAllSides) |
slot 0–80 |
仅 slot 162 且 stackSize > 0 |
第三方 mod 集成
- Avaritia:
LudicrousItems.singularity meta=3 + LudicrousBlocks.dire_crafting + Neutronium block 用于合成。
- WanionLib:
MetaItem.getKeySizeMap / getSmartKeySizeMap 提供 Trove TIntIntMap 字典聚合算法。
相关条目