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。
cleanInput 流程
- 对 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.singularitymeta=3 +LudicrousBlocks.dire_crafting+ Neutronium block 用于合成。 - WanionLib:
MetaItem.getKeySizeMap/getSmartKeySizeMap提供 TroveTIntIntMap字典聚合算法。
相关条目
- Compressed Chest - 243 槽普通大箱子
- Infinity Chest - 243 槽 + 无限堆叠箱子