提供: Minecraft Modding Wiki
移動先: 案内検索

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 編集中の文章
1行目: 1行目:
 
{{前提MOD|reqmod="Minecraft Forge Universal 14.21.0.xxx~"}}
 
{{前提MOD|reqmod="Minecraft Forge Universal 14.21.0.xxx~"}}
 
{{チュートリアル難易度|difficulty=0}}
 
{{チュートリアル難易度|difficulty=0}}
このチュートリアルでは、基本的なレシピの追加方法について解説する。<br>
+
このチュートリアルでは、バニラの基本的なレシピの追加方法について解説します。
1.12からは以前の手法に加えて、Jsonによってレシピを記述できるようになった。<br>
+
<br />
また、その影響によって従来の方法にも少し変更が加えられている。<br>
+
==ソース==
バニラのクラスや書式を使う利点はないのでOreRecipeを用いる。
+
===RecipeSample.java===
== Jsonによる手法 ==
+
<source lang="java">
1.12ではバニラのレシピカスタマイズ機能が不完全なため、Modのエントリクラス(@Modアノテーションがついたクラス)は不可欠。<br>
+
package com.test.testmod;
ここではエントリクラスが存在するという前提で、Jsonのみについて解説する。<br>
 
 
 
なお、古いバージョン(1.12~1.12.2初期頃)のForgeではJsonレシピの一部機能が未実装であり未修正のバグも存在したため、それらのバージョンでJsonレシピを扱う際は注意が必要。<br>
 
 
 
=== サンプル ===
 
* dirt_to_diamond_vertical.json
 
<source lang="javascript">
 
{
 
  "type": "forge:ore_shaped",
 
  "group": "recipe_sample:dirt_to_diamond",
 
  "pattern": [
 
    " # ",
 
    " # ",
 
    " # "
 
  ],
 
  "key": {
 
    "#": {
 
      "item": "minecraft:dirt",
 
      "data": 0
 
    }
 
  },
 
  "result": {
 
    "item": "minecraft:diamond"
 
  }
 
}
 
</source>
 
* dirt_to_diamond_horizontal.json
 
<source lang="javascript">
 
{
 
  "type": "forge:ore_shaped",
 
  "group": "recipe_sample:dirt_to_diamond",
 
  "pattern": [
 
    "###"
 
  ],
 
  "key": {
 
    "#": {
 
      "item": "minecraft:dirt",
 
      "data": 0
 
    }
 
  },
 
  "result": {
 
    "item": "minecraft:diamond"
 
  }
 
}
 
</source>
 
* fluffy_diamond.json
 
<source lang="javascript">
 
{
 
  "type": "forge:ore_shapeless",
 
  "ingredients": [
 
    {
 
      "item": "minecraft:wool",
 
      "data": 3
 
    },
 
    {
 
      "item": "minecraft:feather"
 
    },
 
    {
 
      "item": "minecraft:web"
 
    }
 
  ],
 
  "result": {
 
    "item": "minecraft:diamond"
 
  }
 
}
 
</source>
 
=== 解説 ===
 
レシピのJsonは"assets/<modid>/recipes/"ディレクトリ下に配置すること。<br>
 
Jsonのファイル名はそのままレシピの内部名に用いられる。<br>
 
内部名はアドバンスメントによるレシピ解放などに用いる。<br>
 
group項目に同一文字列を入れるとレシピ本において同じ括りで表示されるようになる。<br>
 
 
 
data項目で材料のメタ値(ダメージ値)を指定することが可能。<br>
 
メタ値(ダメージ値)が0の場合はdata項目を省略することができる。<br>
 
ただしメタ値を利用して同一IDに複数種類が登録されているアイテムやブロックを材料にする場合は0でもdata項目を省略することができない。(上の例では<code>minecraft:dirt</code>や<code>minecraft:wool</code>が該当する)<br>
 
data項目に<code>32767</code>を指定するとWildcardとなりメタ値(ダメージ値)に関わらず材料として使用できるようになる。(ただしビルド2542より前ではWildcardメタが正常に動作しないので注意)
 
 
 
ちなみに、レシピの材料指定には[[鉱石辞書の利用]]も可能である。<br>
 
その場合はitem項目に代わってtype項目で<code>"forge:ore_dict"</code>を指定し、ore項目に材料の鉱石辞書名を指定する。
 
  
<source lang="javascript">
 
  "key": {
 
    "#": {
 
      "type": "forge:ore_dict",
 
      "ore": "dirt"
 
    }
 
  }
 
</source>
 
 
== 従来の手法 ==
 
Forgeにより以前から提供されていたレシピ登録機能も引き続き利用できる。将来廃止されるかどうかは不透明である。<br>
 
ちなみに、Forge側は「1.13ではServer-Client同期が実装されることが予期されるから、Jsonに移行すべきだ」としている。
 
=== サンプル ===
 
<source lang="java">
 
import net.minecraft.init.Blocks;
 
 
import net.minecraft.init.Items;
 
import net.minecraft.init.Items;
 
import net.minecraft.item.ItemStack;
 
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
 
 
import net.minecraft.util.ResourceLocation;
 
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.event.RegistryEvent;
 
 
import net.minecraftforge.fml.common.Mod;
 
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.oredict.ShapedOreRecipe;
+
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.oredict.ShapelessOreRecipe;
 
  
@Mod.EventBusSubscriber
 
 
@Mod(modid = RecipeSample.MOD_ID, version = RecipeSample.MOD_VERSION)
 
@Mod(modid = RecipeSample.MOD_ID, version = RecipeSample.MOD_VERSION)
 
public class RecipeSample{
 
public class RecipeSample{
    public static final String MOD_ID = "recipe_sample";
+
public static final String MOD_ID = "recipesample";
    public static final String MOD_VERSION = "1.0";
+
public static final String MOD_VERSION = "1.0";
 +
@Mod.EventHandler
 +
public void init(FMLInitializationEvent event) {
 +
GameRegistry.addShapedRecipe(new ResourceLocation("addDiamond"), new ResourceLocation("addDefaultItemRecipe"), new ItemStack(Items.DIAMOND),  new Object[] {
 +
"###",
 +
"# #",
 +
                                "###",
 +
'#', Items.DIAMOND});
 +
}
 +
}
 +
</source>
  
    @SubscribeEvent
+
==解説==
    public static void registerRecipes(RegistryEvent.Register<IRecipe> event){
+
===レシピを作る===
        event.getRegistry().registerAll(
+
レシピの登録はinitで行います
                new ShapedOreRecipe(new ResourceLocation(MOD_ID, "dirt_to_diamond"), Items.DIAMOND,
+
以前のバージョンとの違いは、addShapedRecipeメソッドの引数です
                        " # ",
+
第一引数に名前、第二引数にグループを追加します
                        " # ",
+
第三引数は、完成物
                        " # ",
+
第四引数移行は、レシピの情報になっています
                        '#', new ItemStack(Blocks.DIRT)
+
</br>
                ).setRegistryName(MOD_ID, "dirt_to_diamond_vertical"),
+
完成物の個数を変えるには、第3引数で
 +
<source lang=java>
 +
new ItemStack(Items.DIAMOND, 16)
 +
</source>
 +
このようにすれば、完成物の個数が変わります
  
                new ShapedOreRecipe(new ResourceLocation(MOD_ID, "dirt_to_diamond"), Items.DIAMOND,
+
===不定形レシピを作る===
                        "###",
+
[[category:その他]]
                        '#', new ItemStack(Blocks.DIRT)
 
                ).setRegistryName(MOD_ID, "dirt_to_diamond_horizontal"),
 
 
 
                new ShapelessOreRecipe(null, Items.DIAMOND,
 
                        new ItemStack(Blocks.WOOL, 1, 3),
 
                        Items.FEATHER,
 
                        Blocks.WEB
 
                ).setRegistryName(MOD_ID, "fluffy_diamond")
 
        );
 
    }
 
}
 
</source>
 
=== 解説 ===
 
第一引数のnameと第二引数のgroupが新たに追加された。<br>
 
<del>現状Wildcardを用いるとレシピ本においては正常に扱えないうえに、従来のように材料に生のItem/Blockインスタンスを入れるとWildcardメタ扱いになるため注意。</del><br>
 
<ins>ビルド2542で修正されWildcardメタが正常に動作するようになり、ItemStackでラップしてあげる必要はなくなった。</ins>
 

Minecraft Modding Wikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細はMinecraft Modding Wiki:著作権を参照)。 著作権保護されている作品は、許諾なしに投稿しないでください!

このページを編集するには、下記の確認用の質問に回答してください (詳細):

取り消し 編集の仕方 (新しいウィンドウで開きます)

このページで使用されているテンプレート: