跳至主要內容

JEI Crafting

Prunoideae2025年3月29日大约 3 分鐘neoforge-1.21

這個附屬模組增加了一種定義配方的方法,當玩家將光標懸停在 JEI 物品列表或書籤中的物品上並中鍵點擊它們時,玩家將獲得這些物品,同時消耗一些定義的材料。

也支持 JEI+EMITMRV+EMI,但在某些極端情況下,當真正的作弊功能啟用時,會有行為問題。

這個附屬模組主要是為模組包製作而設計的,所以它不包含任何配方,模組包作者可以定義自己的 JEI 製作配方,以便玩家更容易獲得某些物品。

2.png
2.png

理念

Minecraft 中的一些配方其實很煩人,尤其是對於彩色建築方塊或僅僅是建築材料但需要經過 2 或 3 次製作操作才能獲得的裝飾方塊。例如,如果你想用 5 種不同顏色的混凝土建造一座房子,那麼你需要準備那些染料並提前獲得 5 種混凝土粉末,如果你不小心用完了材料,你需要再去找工作臺來製作更多。

3.png
3.png

所以,正如模組所提出和提供的功能,一種更簡單的方法就是移除這些配方,讓玩家直接取出不同顏色的混凝土,同時消耗一些基本的混凝土材料。或者更激進一點,讓玩家免費獲得建築材料!

同樣適用於實際機器。例如,你在 Create 中有螺旋槳、黃銅手、攪拌機……但每個物品僅作為一兩台機器的製作材料。當你想要重新安置工廠或只是重建其中的一部分時,你的庫存會被機器、齒輪、皮帶和軸塞滿。而這可以通過模組解決,你可以將所有機器還原為原材料,並在需要時將它們轉換為其他機器。配方階段和門檻仍然存在,因為你可以定義製作不同機器所需的材料。

使用方法

這個模組提供的配方可以使用資料包定義:

{
  "type": "jei_crafting:jei_crafting",
  "output": {
    "id": "minecraft:smoker",
    "count": 1
  },
  "ingredients": [
    {
      "ingredient": {
        "tag": "minecraft:logs"
      },
      "count": 4
    },
       {
      "ingredient": {
        "tag": "c:cobblestones"
      },
      "count": 8
    }
  ],
  "uncraftsTo": [
    {
      "id": "minecraft:oak_wood",
      "count": 4
    },
    {
      "id": "minecraft:cobblestone",
      "count": 8
    }
  ]
}

所以我們定義了一個 JEI 製作配方,將 4 個原木和 8 個鵝卵石轉換為一個煙燻爐。JEI 製作的默認配置一次製作 8 次,並且可以在 config/jei/_crafting-client.toml 中調整。

可以省略 uncraftsTo 來禁用配方的反製作,並且可以省略 ingredients 來使配方“免費”,當玩家取出輸出物品時不消耗任何物品:

{
  "type": "jei_crafting:jei_crafting",
  "output": {
    "id": "minecraft:bedrock",
    "count": 1
  }
}

無輸入的配方自動不可反製作,因為那時它與將物品放入垃圾桶沒有太大區別。

最後,我們將得到如下所示的內容:

在 v1.1.0 中,你還可以配置 craftsInTicks 字段來設置製作所需的時間(以刻為單位),例如:

我們在 v1.2.0 中獲得了 KubeJS 的兼容性,允許你動態修改配方輸出。然而,目前 KubeJS 的配方支持並不完善,因為配方組件不允許空列表,這在定義無輸入或不可反製作的物品時是不可避免的 😕 但可以使用 event.custom 定義配方,例如:

ServerEvents.recipes((event) => {
  event.custom({
    type: "jei_crafting:jei_crafting",
    output: Item.of("minecraft:bedrock"),
    craftInTicks: 10,
  });

  event.custom({
    type: "jei_crafting:jei_crafting",
    output: Item.of("minecraft:copper_block"),
    ingredients: [
      {
        ingredient: Ingredient.of("minecraft:copper_ingot"),
        count: 9,
      },
    ],
    uncraftsTo: [Item.of("minecraft:copper_ingot", 8)],
    craftInTicks: 20,
  })
  .id("kubejs:foobar");
});

// 當這些事件 `are event.cancel()` 時,製作將失敗並會有一些通知聲音
JeiCraftingEvents.itemCrafting("kubejs:foobar", (event) => {
  // 當物品被製作時,將輸出修改為 Sussy baka
  event.recipeOutput = Item.of("minecraft:copper_block[custom_name='\"Sussy baka\"']");
});

JeiCraftingEvents.itemUncrafting("kubejs:foobar", (event) => {
  // 將原始的反製作列表覆蓋為另一個
  event.recipeOutput = [Item.of("minecraft:copper_block[custom_name='\"Sussy baka\"']")];
});
上次編輯於: 2025/3/29 上午5:04:42
貢獻者: Mango