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)

  1. 冷却 10 tick;
  2. 若 recipeChanged:用 ExtremeCraftingManager.findMatchingRecipe(9×9 matrix, world) 查找匹配配方;
  3. 若输出槽已有匹配结果:建立 patternMap = MetaItem.getKeySizeMap(81, 162, itemStacks)(key→所需数量映射);
  4. 若输出槽空但有匹配:占位空输出 ItemStack(stackSize=0)并建立 patternMap;
  5. 每次 tick 计算 matches(currentInputMap, patternMap):按 key 求最小可合成批次数;
  6. 限制为 (outputMaxStack - outputCurrentStack) / outputStackSize;
  7. 调 cleanInput(maxAmount) 同步消耗输入、处理 hasContainerItem 的容器物回填或掉落;
  8. 输出槽 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.singularity meta=3 + LudicrousBlocks.dire_crafting + Neutronium block 用于合成。
  • WanionLib:MetaItem.getKeySizeMap / getSmartKeySizeMap 提供 Trove TIntIntMap 字典聚合算法。

相关条目