初心者modderの備忘録

マイクラのmodを作りたくて、初めて見たのですが難しくて忘れそうなので自分用の備忘録も兼ねてブログにしようと思います

1日目 アイテムの追加

今日はアイテムやブロックの追加にチャレンジします。

まず、フォルダを作ります。

forge-1.12.2-14.23.5.2768-mdkを展開するとたくさんフォルダが出てきて、その中のsrc/main/javaにcom.example.examplemodというパッケージがあると思います。これは例みたいなものなので削除してしまいます。

f:id:json_fileman:20181229214119p:plain



削除したらsrc/main/javaに新しいパッケージとクラスファイルを作ります。

f:id:json_fileman:20181229214614p:plain

こんな感じになりました。このtestmod.classの中でアイテムの追加などを行ってそれに必要なクラスファイルをその都度つくる感じで行きます。
では、すこしtestmodの中身を書いていきます。

package testmod;

import net.minecraftforge.fml.common.Mod;

@Mod(modid = testmod.MOD_ID, name = testmod.MOD_NAME, version = testmod.MOD_VERSION)

public class testmod {
    public static final String MOD_ID = "testmod";
    public static final String MOD_NAME = "testmod";
    public static final String MOD_VERSION = "1.0.0";
}

これでIDと名前、バージョンを指定しました。

続いて、新しいアイテムを作成します。
新しくItemTomatoという名前のクラスを作成します。
ItemTomatoの中身を書いていきます。

package testmod;

import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;

public class ItemTomato extends Item {

    public ItemTomato() {
        this.setRegistryName("tomato");
        this.setCreativeTab(CreativeTabs.MATERIALS);
        this.setUnlocalizedName("tomato");
    }
}

RegistryName、UnlocalizedNameはそれぞれ小文字のみで名前をつけなければならないようです。

続いて作成したアイテムの登録を行います。なのでそのためのコードをtestmodに書き加えていきます。

package testmod;

import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.registry.ForgeRegistries;

@Mod(modid = testmod.MOD_ID, name = testmod.MOD_NAME, version = testmod.MOD_VERSION)
public class testmod {
    public static final String MOD_ID = "testmod";
    public static final String MOD_NAME = "testmod";
    public static final String MOD_VERSION = "1.0.0";
    
    public static final Item Tomato = new ItemTomato();
    
    @Mod.EventHandler
	public void preInit(FMLPreInitializationEvent event) {
    	ForgeRegistries.ITEMS.register(Tomato);
    
    	if(event.getSide().isClient()) {
    		ModelLoader.setCustomModelResourceLocation(Tomato, 0, new ModelResourceLocation(new ResourceLocation("testmod", "tomato"), "inventory"));
    	}
    }
}

ForgeRegistriesでnewしたアイテムの登録をModelLoderでそのテクスチャ等を設定しました。
この状態で一旦起動してみます。クリエイティブモードでワールドを新規作成してアイテム欄の一番うしろを見るとピンクと黒の変なアイテムが追加されてます。

f:id:json_fileman:20181229222716p:plain

モデルとなるjsonファイルおよびテクスチャーの画像を設定していないからですね。
まずjsonファイルを作ります。
src/main/resourcesの中に assets.testmod.models.itemというパッケージを作成します。
このパッケージの中にtomato.jsonという名前のファイルを作成します。
中身を書いていきます。

{
    "parent": "item/handheld",
    "textures": {
        "layer0": "testmod:items/tomato"
    }
}

次にテクスチャの画像を追加します。
今回はこんな感じの適当なトマトの画像をペイントで描いて、web上で透過処理をかけました。
今回はこのサイトを使っています。

WEBブラウザ上で簡単に透過PNG画像を作成できるツール | 無料で画像を加工できるサイト PEKO STEP

ちなみに画像はこんな感じです。
tomato.png

f:id:json_fileman:20181229223709p:plain

この画像をいれるパッケージを作成します。
src/main/resourcesの中にassets.testmod.textures.items
というパッケージを作成します。
そしたら、eclipse上のこのパッケージに先ほどの画像をドラック&ドロップでコピーするとここに画像が入ります。

パッケージ名やjsonファイルの中身は1文字でも間違えるとうまく参照できなくなって読み込まれないので、誤字に気をつけなければいけません。

ここまで設定したらもう一度マイクラを起動してみます。

f:id:json_fileman:20181229224525p:plain

画像が登録され、うまく表示されています。
最後にアイテムの名前が
item.tomato.nameになっているのでちゃんとした名前になるように設定します。

langファイルを作成します。

先ほどまでと同様にassets.testmodの中にlangというパッケージを作成します。
langの中に英語用と日本語用のlangファイルを作ります。それぞれ
en_us.lang
ja_jp.lang
という名前のファイルをつくります。
中身は

en_us.lang

item.tomato.name=tomato

ja_jp.lang

item.tomato.name=トマト

とします。
最後にこれで起動しえみると、画像も名前もうまく表示されました!!

f:id:json_fileman:20181229231123p:plain




最終手的なパッケージエクスプローラーの様子はこんな感じです。

f:id:json_fileman:20181229231207p:plain


次はブロックの追加に挑戦したいと思っています。

最後に、今回の最終的なclassファイルをアップロードしておきます。
testmod.java
ItemTomato.java