Skip to content

核心配方结构

InWorldRecipe

核心配方类,实现 Recipe<InWorldRecipeContext>IPrioritized

构造参数

参数类型说明
iconItemStackTemplate配方图标(JEI/配方书展示)
triggerIRecipeTrigger触发条件
conflictingList<IRecipePredicate<?>>冲突谓词(消耗型匹配,消耗后阻止其他配方)
nonConflictingList<IRecipePredicate<?>>非冲突谓词(仅检查,不消耗)
outcomesList<IRecipeOutcome<?>>产出列表
priorityint优先级(数字越小越优先),可自动计算
compatibleboolean兼容模式(true 允许多配方共享输入)
maxEfficiencyint每触发最大执行次数,默认 Integer.MAX_VALUE

构造器重载

java
// 完整构造
new InWorldRecipe(icon, trigger, conflicting, nonConflicting, outcomes, priority, compatible, maxEfficiency);

// 省略 maxEfficiency(默认 Integer.MAX_VALUE)
new InWorldRecipe(icon, trigger, conflicting, nonConflicting, outcomes, priority, compatible);

// 自动计算优先级
new InWorldRecipe(icon, trigger, conflicting, nonConflicting, outcomes, compatible, maxEfficiency);
new InWorldRecipe(icon, trigger, conflicting, nonConflicting, outcomes, compatible);

核心方法

方法说明
matches(InWorldRecipeContext, Level)先检查非冲突谓词(ShapelessMatcher.compatible),再检查冲突谓词(兼容模式用 compatible,非兼容模式用 incompatible)。失败时清空谓词栈。
assemble(InWorldRecipeContext)依次弹出并消耗冲突谓词,按概率执行所有产出,返回图标 ItemStack
getSerializer()返回 LibRecipeTypes.IN_WORLD_RECIPE_SERIALIZER
getType()返回 LibRecipeTypes.IN_WORLD_RECIPE

优先级自动计算

calcPriority(trigger, conflicting, nonConflicting, outcomes) 将 trigger、所有谓词、所有产出的 priority 值求和。

序列化

InWorldRecipe.Serializer 提供 CODECMapCodec<InWorldRecipe>)和 STREAM_CODEC

JSON 字段:

字段类型默认值说明
iconItemStackTemplateminecraft:anvil配方图标
triggerIdentifier触发器注册表 ID
conflictingIRecipePredicate[]冲突谓词列表
non_conflictingIRecipePredicate[]非冲突谓词列表
outcomesIRecipeOutcome[]产出列表
priorityint1优先级
compatiblebooltrue兼容模式
max_efficiencyint2147483647最大效率

Getters

java
public ItemStackTemplate icon();
public IRecipeTrigger trigger();
public List<IRecipePredicate<?>> conflicting();
public List<IRecipePredicate<?>> nonConflicting();
public List<IRecipeOutcome<?>> outcomes();
public int priority();
public boolean compatible();
public int maxEfficiency();

使用示例

java
InWorldRecipe recipe = new InWorldRecipe(
    new ItemStackTemplate(Items.CRAFTING_TABLE),
    trigger,
    List.of(hasItemPredicate),
    List.of(hasBlockPredicate),
    List.of(spawnItemOutcome),
    true  // compatible
);

Released under the CC-BY-NC-SA 4.0 License.