2017年12月19日火曜日

独自のクラフトレシピを作成する方法

概要

前回、独自鉱石を作成してみました
今回はその鉱石とインゴットをクラフトに使えるようにレシピを追加してみます

環境

  • macOS X 10.13.2
  • Minecraft 1.12.2
  • Forge 1.12.2 - 14.23.1.2555
  • Forge MDK 1.12.2 - 14.23.1.2555
  • Java 1.8.0_151
  • eclipse Oxygen.1a Release (4.7.1a)

com.sample.mod.handlers の作成

  • RecipeHandler.java
package com.sample.mod.handlers;

import com.sample.mod.init.BlockInit;
import com.sample.mod.init.ItemInit;

import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.common.registry.GameRegistry;

public class RecipeHandler {

    public static void registerCrafting() {
        GameRegistry.addShapedRecipe(new ResourceLocation("sm:sample_ore"), new ResourceLocation("sm:sample_blocks"), new ItemStack(BlockInit.sample_ore), new Object[] {"SSS", "SIS", "SSS", 'S', Blocks.STONE, 'I', ItemInit.sample_ingot});
    }

    public static void registerSmelting() {
        GameRegistry.addSmelting(BlockInit.sample_ore, new ItemStack(ItemInit.sample_ingot), 10);
    }
}

ポイントは GameRegistry.addShapedRecipeGameRegistry.addSmelting を使ってクラフトと精錬の定義を追加するという点です

まずクラフトレシピの追加に使う addShapedRecipe は 4 つの引数を使います
1 つ目はどのアイテムのレシピとして登録するか指定します
2 つ目は登録するレシピをどのグループのレシピに登録するか指定します
今回であれば sample_ore のクラフトであり sample_blocks のグループにレシピを登録します
3 つ目は実際にできる成果物です
今回はインゴットと石を使って独自鉱石を作成します
そして 4 つ目が作業台を使ってクラフトする際のレシピになります
Object クラスの配列として作成します
配列の使用するアイテムの数で上限するので可変です

  • new Object[] {"SSS", "SIS", "SSS", 'S', Blocks.STONE, 'I', ItemInit.sample_ingot}

今回の場合であれば S -> STONE と I -> 独自インゴットをクラフトに使うように定義しています
そして 3x3 のクラフトマスにどうやってそれらを配置するか定義します
各行ごとに String で定義する必要があり例えば "SSS" であれば一番上は石を 3 つ配置するということになります
ちなみに今回は 3x3 全部にアイテムを置くようにレシピを作成していますがピッケルや斧のように全マスを使用しないレシピなどの場合は半角スペースを使うことで空を表現することができます

精錬はかまどを使って作成することができるレシピです
その場合は addSmelting を使います
第一引数に精錬にしようするアイテムを指定して第二引数に作成されるアイテムを指定します
そして第三引数の数字は精錬時に取得できる経験値を指定します

  • RegistyHandler.java
package com.sample.mod.handlers;

import com.sample.mod.init.BlockInit;
import com.sample.mod.init.ItemInit;

public class RegistyHandler {

    public static void Client() {
        RecipeHandler.registerCrafting();
        RecipeHandler.registerSmelting();
    }

    public static void Common() {
        ItemInit.init();
        ItemInit.register();
        BlockInit.init();
        BlockInit.register();
        BlockInit.registerRenders();
    }
}

Client 側にレシピを登録する処理を追記します

これまでのも含めてパッケージエクスプローラは以下のようになっています
origin_craft1.png

動作確認

では動作確認してみます
テストには作業台とレシピ、石、独自インゴット、燃料 (今回は石炭) が必要になるのでインベントリから取得しておきましょう
まずクラフト側ですが指定の通りに石と独自インゴットを配置すると独自鉱石が生成できるようになっています
origin_craft2.png

origin_craft3.png

こんな感じです
次に精錬ですができた鉱石をそのまま精錬してみましょう
すると独自インゴットが作成できます
origin_craft4.png

origin_craft5.png

最後に

独自のクラフトレシピと精錬レシピを作成してみました
アイテムを追加したりするよりかはずっと簡単に作成できると思います
が、基本はその前に鉱石なりインゴットなり各種アイテムを作成しておく必要があるかなと思います

今回は鉱石とインゴットのレシピだけでしたがインゴットを生成したら武器なり防具なりを生成したくなります
それも同じようにレシピを登録するだけでできます
ただ、その際は武器や防具なりのアイテムの登録が必要になるのでやってみたい方はまずそこからやってみてください

また作業台を使わないでもクラフトできる不定形レシピも登録することができその場合は addShapelessRecipe を使います
不定形レシピとは例えば原木から木材を作成するレシピのようなことを指します

参考サイト

0 件のコメント:

コメントを投稿