You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Minecraft配方食材的所有变体?自动合成插件技术问询

问题解答

不能直接通过getIngredientMap()返回的ItemStack获取所有木材变体,原因如下:

  • Minecraft中木棍这类支持多变体的默认配方,实际是通过**物品标签(Tag)**来匹配所有符合条件的木材木板,而非单一指定橡木木板。
  • getIngredientMap()返回的映射表中,对应字符的ItemStack只是该物品标签的示例物品(通常是标签内排序第一的物品,也就是橡木木板),并不包含所有可替代的变体。

正确的获取方式

要拿到所有可用于合成的木材变体,需要从配方的Ingredient(原料)中提取对应的物品标签,步骤如下:

  1. 从配方中获取原料映射(注意部分旧版API返回的是Map<Character, ItemStack>,但本质对应Ingredient实例);
  2. 判断原料是否为标签类型的Ingredient(如TagIngredient,不同MC版本类名可能略有差异);
  3. 若为标签类型,调用getTag()获取对应的物品标签,遍历标签内的所有物品即可得到所有变体。

代码示例

// 假设已获取ShapedRecipe实例recipe
Map<Character, Ingredient> ingredientMap = recipe.getIngredientMap();

for (Map.Entry<Character, Ingredient> entry : ingredientMap.entrySet()) {
    Ingredient ingredient = entry.getValue();
    
    // 检查是否为标签型原料
    if (ingredient instanceof TagIngredient tagIngredient) {
        Tag<Item> woodPlankTag = tagIngredient.getTag();
        // 遍历所有可替代的木板变体
        for (Item plankItem : woodPlankTag.getValues()) {
            ItemStack variantStack = new ItemStack(plankItem);
            // 处理每个木材变体
        }
    } else {
        // 非标签型原料,直接获取所有可用ItemStack
        ItemStack[] availableStacks = ingredient.getItems();
    }
}

版本兼容提示

  • 若使用的是1.12及更早的MC版本,Ingredient的实现逻辑略有不同,可通过ingredient.getStacks()方法直接获取所有可替代的ItemStack数组,里面会包含所有木材变体。

内容的提问来源于stack exchange,提问作者RIVERMAN2010

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 18:52:48