提供: Minecraft Modding Wiki
この記事は"Fabric API 0.3.2 build 230~"を前提MODとしています。 |
レシピの追加(動的)
ここではレシピを動的に追加する方法について解説する。 https://fabricmc.net/wiki/tutorial:dynamic_recipe_generationを元にこのページを書いています。 ここでの解説は(DataPackによるレシピ追加)を利用するのではなく、プログラム内で定義して追加する。 例えば、特定のMODがインストールされている場合に特定のMODのアイテムを使ったレシピを追加したりするために使うことができる。
// 未確認→動作確認済みのバージョン:1.14~1.16.3
ソースコード
- Main.java
package com.example.addrecipe; import java.util.ArrayList; import com.google.common.collect.Lists; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import net.fabricmc.api.ModInitializer; import net.minecraft.util.Identifier; public class Main implements ModInitializer { public static JsonObject sampleRecipe; @Override public void onInitialize() { sampleRecipe = createShapedRecipeJson( // レシピのパターンに使う文字を定義 Lists.newArrayList( '#', 'X' ), // 上記の順に処理されます。 Lists.newArrayList( new Identifier("minecraft:sticks"), new Identifier("minecraft:emerald") ), // 基本的にはタグを使いますが、:がない場合はitemにしましょう。 Lists.newArrayList("tag", "tag"), // レシピの定義 Lists.newArrayList( "XXX", " # ", " # " ), // レシピの結果 new Identifier("emerald_mod:emerald_pickaxe") ); } public static JsonObject createShapedRecipeJson(ArrayList<Character> keys, ArrayList<Identifier> items, ArrayList<String> type, ArrayList<String> pattern, Identifier output) { JsonObject json = new JsonObject(); // ここでレシピのタイプを決める。crafting_shaped(定形レシピ) json.addProperty("type", "minecraft:crafting_shaped"); // "type": "minecraft:crafting_shaped" JsonArray jsonArray = new JsonArray(); jsonArray.add(pattern.get(0)); jsonArray.add(pattern.get(1)); jsonArray.add(pattern.get(2)); // JsonArrayにレシピを一行ずつ入れてからパターンを作成 json.add("pattern", jsonArray); // "pattern": [ // "###", // " | ", // " | " // ] JsonObject individualKey; JsonObject keyList = new JsonObject(); for (int i = 0; i < keys.size(); ++i) { individualKey = new JsonObject(); individualKey.addProperty(type.get(i), items.get(i).toString()); keyList.add(keys.get(i) + "", individualKey); // "#": { "tag": "c:copper_ingots" } // "|": { "item": "minecraft:sticks" } } json.add("key", keyList); // "key": { // "#": { // "tag": "c:copper_ingots" // }, // "|": { // "item": "minecraft:stick" // } // }, JsonObject result = new JsonObject(); result.addProperty("item", output.toString()); result.addProperty("count", 1); json.add("result", result); // "result": { // "item": "modid:copper_pickaxe", // "count": 1 // } return json; } }