アイテムの追加(1.12.2)

ソースコード

AluminiumMod.java

package com.tntmodders.tutorial;

import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.event.FMLConstructionEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

@Mod(modid = "aluminiummod", version = "1.0", name = "AluminiumMod")
public class AluminiumMod {
    public static final Item ALUMINIUM = new ItemAluminium();

    @Mod.EventHandler
    //この関数でMODファイル自体をイベントの発火先にする。
    public void construct(FMLConstructionEvent event) {
        MinecraftForge.EVENT_BUS.register(this);
    }

    //アイテムを登録するイベント。旧preinitのタイミングで発火する。
    @SubscribeEvent
    public void registerItems(RegistryEvent.Register<Item> event) {
        event.getRegistry().register(ALUMINIUM);
    }

    //モデルを登録するイベント。SideOnlyによってクライアント側のみ呼ばれる。旧preinitのタイミングで発火する。
    @SubscribeEvent
    @SideOnly(Side.CLIENT)
    public void registerModels(ModelRegistryEvent event) {
        ModelLoader.setCustomModelResourceLocation(ALUMINIUM, 0, new ModelResourceLocation(new ResourceLocation("aluminiummod", "aluminium"), "inventory"));
    }
}

 

 ItemAluminium.java

package com.tntmodders.tutorial;

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

public class ItemAluminium extends Item {

    public ItemAluminium() {
        super();
        //レジストリに保存する名称を登録する。大文字禁止。
        this.setRegistryName("aluminiummod", "aluminium");
        //クリエイティブタブを設定する。
        this.setCreativeTab(CreativeTabs.MATERIALS);
        //翻訳名を登録する。大文字非推奨。
        this.setUnlocalizedName("aluminium");
    }
}

 

アセット

 alminium.json

src/main/resources/assets/aluminiummod/models/item/に配置する

{
  "parent": "item/generated",
  "textures": {
    "layer0": "aluminiummod:items/aluminium"
  },
  "display": {
    "thirdperson": {
      "rotation": [0, 90, -35],
      "translation": [0, 1.25, -3.5],
      "scale": [0.85, 0.85, 0.85]
    },
    "firstperson": {
      "rotation": [0, -135, 25],
      "translation": [0, 4, 2],
      "scale": [1.7, 1.7, 1.7]
    }
  }
}

 

en_US.lang

#AluminiumMod English Language File
item.aluminium.name=aluminium

 

ja_JP.lang

#アルミニウムMOD 日本語言語ファイル
item.aluminium.name=アルミニウム

aluminium.png

 

解説

AluminiumMod.java

@Modの使い方は1.7.10版参照。MODIDは小文字推奨。

 

construct

(FMLConstructionEvent event)

MODを起動した最初のときに呼ばれる。(クライアントだとマインクラフトのウィンドウが起動した直後)
ここでイベントとしてMOD本体を登録することで、アイテムやブロック、モデルの登録が可能になる。

 

registerItems

(RegistryEvent.Register<Item> event)

アイテム登録用のイベント。このイベント(RegistryEvent.Register<Item>)を今までのGameRegistry.register(item,name)代わりに使う。
レジスタ名はここの代わりにアイテムのインスタンス側に保存される。

 

registerModels

(ModelRegistryEvent event)

モデル登録用のイベント。引数は使われない。

 

ModelLoader

setCustomModelResourceLocation

(Item item, int metadata, ModelResourceLocation model)

アイテム、メタデータに対応したモデルを登録する。第三引数のModelResourceLocationにはResourceLocation(MODIDと名称[小文字限定])を第一引数に、状態を第二引数に渡す。(基本的に”inventory”)。

 

aluminium.json

アイテムのモデルjsonはsrc/resources/assets/<modid>/models/item/ に配置する。名称はsetCustonResourceLocationに渡したModelResourceLocationでの名称にする。
要素ごとに解説する。

 

parent

親となるjsonを取得する。通常アイテムなら基本チュートリアル通りでよい。
バニラのjsonを取りたい場合は”item/<アイテム名>”を渡す。

 

textures

テクスチャを指定する。基本は”layer0″のみで良い。
指定方法は<modid>:items/<テクスチャ名>。テクスチャ名も小文字にしたほうが良い。
これで指定したパスのテクスチャをアイテムのものとして読み込める。

 

display

表示の大きさ、場所等を調整する。
“thirdperson”(二人称・三人称視点)と”firstperson”(一人称視点)でそれぞれ指定できる。
  • rotation …… 角度
  • translation …… 位置
  • scale …… 大きさ
の三要素を変更できる。

 

en_US.lang, ja_JP.lang

src/resources/assets/<modid>/lang/に配置する。
ファイル名は英語がen_US.lang,日本語がja_JP.lang。
一行目は読み込まれないのでコメントを配置しておくと良い。
アイテムの名称は item.<翻訳名>.name=<名称> で登録できる。
全角スペースを使うととてもダサい見た目の翻訳名になるため十分気をつけていただきたい。

アイテムの追加(1.12.2)” への4件のフィードバック

  1. 最新のforgeのバージョン(14.23.3.2655)だとen_US.lang, ja_JP.langでは読み込まず、en_us.lang,ja_jp.langに変更しないといけないみたいですね…

    1. ご報告ありがとうございます。
      同じ2655forge環境下の私のMOD開発環境では読み込んでますね……
      詳しく確認した後、追記いたします。

  2. MOD作りを始める上でとても参考になりました。
    マインクラフト1.11 以降の仕様では、pack.mcmeta ファイルの pack_format の値が 3 の場合は、言語ファイルを含めたすべてのリソースファイル名は小文字である必要があるらしいです。(en_us.lang 等)
    古いリソースパックの形式( pack_format: 2 )の場合は逆に、大文字がある前提で読み込むらしいです。(en_US.lang 等)

    1. ありがとうございます。moddingに関しては必要になるまでは他のバージョンから変更する手間を考えて過去版とできる限り同じやり方をとるつもりです。

コメントはこちら。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

[最終更新日]2017/12/08 23:54