提供: Minecraft Modding Wiki
2021年7月15日 (木) 18:08時点におけるRedice (トーク | 投稿記録)による版 (ページの作成:「{{前提MOD|reqmod="Fabric API 0.3.2 build 230~"}} {{チュートリアル難易度|difficulty=0|clear=none}} == レシピの追加(動的) == ここではレシピ…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先: 案内検索

この記事は"Fabric API 0.3.2 build 230~"を前提MODとしています。

Wood pickaxe.png
初心者向けのチュートリアルです。


レシピの追加(動的)

ここではレシピを動的に追加する方法について解説する。 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;
	}
}