提供: Minecraft Modding Wiki
移動先: 案内検索
(リンクが逆向き(リンクの名前))
 
5行目: 5行目:
 
== レシピの追加(動的) ==
 
== レシピの追加(動的) ==
 
ここではレシピを動的に追加する方法について解説する。
 
ここではレシピを動的に追加する方法について解説する。
[[https://fabricmc.net/wiki/tutorial:dynamic_recipe_generation|こちら]]を元にこのページを書いています。
+
[https://fabricmc.net/wiki/tutorial:dynamic_recipe_generation こちら]を元にこのページを書いています。
 
ここでの解説は([[DataPackによるレシピ追加|データパックによるレシピ追加]])を利用するのではなく、プログラム内で定義して追加する。
 
ここでの解説は([[DataPackによるレシピ追加|データパックによるレシピ追加]])を利用するのではなく、プログラム内で定義して追加する。
 
例えば、特定のMODがインストールされている場合に特定のMODのアイテムを使ったレシピを追加したりするために使うことができる。
 
例えば、特定のMODがインストールされている場合に特定のMODのアイテムを使ったレシピを追加したりするために使うことができる。

2022年1月18日 (火) 18:33時点における最新版

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

Stone pickaxe.png
中級者向けのチュートリアルです。
C item.png
Itemに関係のあるチュートリアルです。


レシピの追加(動的)[編集]

ここではレシピを動的に追加する方法について解説する。 こちらを元にこのページを書いています。 ここでの解説は(データパックによるレシピ追加)を利用するのではなく、プログラム内で定義して追加する。 例えば、特定の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;
	}
}