末影莲祭坛 API(EnderLocusRegistry)
基本信息
| 属性 | 值 |
|---|---|
| 包路径 | com.fouristhenumber.utilitiesinexcess.api |
| 文件 | EnderLocusRegistry.java(注册表)、EnderLocusRecipe.java(单条配方) |
| 访问方式 | 单例 EnderLocusRegistry.instance() |
| 本模组自带配方数 | 13 条(RecipeLoader.java:1529-1705) |
| 供第三方 mod 扩展 | 是——MineTweaker 兼容层已实际使用 |
功能
EnderLocusRegistry 是末影莲祭坛(ender_locus)方块的独立配方注册表,与工作台配方完全分离。祭坛方块的 TileEntity(TileEntityEnderLocus)在玩家放入物品时调用 EnderLocusRegistry.instance().findRecipe(inv, consume) 匹配并产出结果(TileEntityEnderLocus.java:79, 116)。
它使用 fastutil 的 ObjectArrayList 与 Char2ObjectOpenHashMap(it.unimi.dsi.fastutil),因此 API 的所有集合返回类型都带 fastutil 语义。
公共方法
| 方法 | 签名要点 | 说明 |
|---|---|---|
instance() |
static EnderLocusRegistry |
单例访问(私有构造,REGISTRY 静态字段) |
addRecipe(ItemStack, String[], Object...) |
3×3 模板 + 符号映射 | 便捷重载,见下 |
addRecipe(EnderLocusRecipe) |
直接加成品配方 | 用于代码构造的复杂配方 |
removeRecipes(Predicate<EnderLocusRecipe>) |
返回被移除的 List |
批量移除(MineTweaker 撤销依赖此方法) |
removeRecipe(EnderLocusRecipe) |
void |
移除单条 |
findRecipe(InventoryCrafting, boolean consume) |
返回 ItemStack 或 null |
匹配并可选消耗材料 |
getAllRecipes() |
不可变列表 | 枚举全部配方 |
模板语法
addRecipe(output, pattern, inputs...) 要求 pattern 是恰好 3 个长度 3 的字符串——否则立即抛 IllegalArgumentException("Ender Locus recipe pattern must be 3 strings each with 3 characters")(EnderLocusRegistry.java 的 verifyPattern)。inputs 按 char, Object 成对传入,步长 2。
支持的材料类型(addRecipe 的 instanceof 链,按此顺序匹配):
| 传入类型 | 处理方式 |
|---|---|
Item |
new ItemStack(item) |
Block |
new ItemStack(block, 1, OreDictionary.WILDCARD_VALUE)(任意 meta) |
ItemStack |
stack.copy() |
DisableableItemStack |
取 stack.theStack |
ModItems |
item.newItemStack() |
ModBlocks |
block.newItemStack() |
String |
视为物品字典名,展开为 OreDictionary.getOres(ore) 的全部堆叠 |
注意 String 走物品字典:传入 "ingotIron" 会匹配所有注册了该 ore dict 名的物品堆,而非字面字符串。这是与其他模组配方 API 相同的约定。
数值
| 项目 | 值 |
|---|---|
| 模板尺寸 | 固定 3×3(verifyPattern 强制) |
| 输入槽位 | 固定 9 个(inputArray = new Object[9]) |
| 本模组自带配方 | 13 |
removeRecipes 初始容量 |
3(new ArrayList<>(3)) |
| 消耗行为 | findRecipe(inv, true) 时对 9 个槽位各 decrStackSize(i, 1) |
交互 — 已知使用方
| 使用方 | 位置 | 用途 |
|---|---|---|
TileEntityEnderLocus |
TileEntityEnderLocus.java:79, 116 |
祭坛方块的配方匹配与产出 |
EnderLocusRecipeHandler(NEI) |
compat/nei/EnderLocusRecipeHandler.java:32, 51, 67, 81 |
在 NEI 中展示祭坛配方(4 处遍历) |
EnderLocusCraftTweakerSupport |
compat/crafttweaker/EnderLocusCraftTweakerSupport.java:102, 113, 146, 166 |
MineTweaker 脚本 API:添加与移除祭坛配方,撤销时用 removeRecipes |
MineTweaker 支持类在 CommonProxy.preInit 中通过 MineTweakerAPI.registerClass(EnderLocusCraftTweakerSupport.class) 注册(CommonProxy.java:132-134),仅当 Mods.CraftTweaker.isLoaded()(modid MineTweaker3)时。
合成配方
本模组通过 RecipeLoader.loadEnderLocusRecipes() 向该注册表添加 13 条祭坛配方,受 RecipeConfig.enableEnderLocusOreRecipes 等开关控制(默认 true)。这些不是工作台配方,因此不计入 147 条总数中的有序/无序部分——详见配方总览。
相关条目
- 配方总览 - 13 条祭坛配方在 147 条总数中的位置
- 兼容模组 - MineTweaker 与 NEI 的接入方式
- 方块注册总表 -
ender_locus与convergence_crystal方块 - TileEntity 注册总表 -
TileEntityEnderLocus