[MC1.12]MOD製作チュートリアル > アイテムの追加

概要

何の機能もない基本的なアイテムを追加する。
ついでにテクスチャと言語ファイルも実装しちゃう。

ソースコード

  • 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");
    }
}
 

アセット

  • aluminium.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
src/main/resources/assets/aluminiummod/lang/に配置する
#AluminiumMod English Langage File
item.aluminium.name=aluminium
 

  • ja_JP.lang
src/main/resources/assets/aluminiummod/lang/に配置する
#アルミニウムMOD 日本語言語ファイル
item.aluminium.name=アルミニウム
 

  • aluminium.png
src/main/resources/assets/aluminiummod/textures/items/に配置する

解説

AluminiumMod.java

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

public void construct(FMLConstructionEvent event)

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

public void registerItems(RegistryEvent.Register<Item> event)

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

public void registerModels(ModelRegistryEvent event)

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

ModelLoader

public static void 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=<名称> で登録できる。
全角スペースを使うととてもダサい見た目の翻訳名になるため十分気をつけていただきたい。

コメント

この項目に関する質問などをどうぞ。
  • テクスチャや言語ファイルが適用されません。 - mod初心者 2017-08-04 13:00:16
    • テクスチャは表示されましたが、テクスチャが大きく、言語ファイルが適用されません。 - mod初心者 2017-08-04 13:07:33
      • テクスチャの大きさはmodels/itemのaluminium.jsonの"display"要素を変更してください。また、langファイルはunlocarizedNameを登録しているかお確かめください。 - Tom Kate 2017-08-04 19:37:04
      • UnlocarizedNameは登録してます。 - mod初心者 2017-08-05 22:20:29
        • とすると、こちらでのテストは正常に動いていますのでリソースの場所が違うか、大文字が入っているかですね…… プロジェクトディレクトリから全て大文字と全角文字、後スペースが無いか確かめていただけますでしょうか? - Tom Kate 2017-08-05 22:49:20
        • テクスチャは適用されているので場所は合ってると思います。 - mod初心者 2017-08-06 00:08:19
        • コードも間違っていませんでした。自分のlangファイル自体が違うということなのでしょうか? - mod初心者 2017-08-07 19:26:20
          • 実際にどうなっているのかがわからないのですが、リビルドしても治らないということですと原因になりそうなものがわからないです。一行目とかも確認してもなにも起きないようでしたら、こちらではどうにもできないかと思います。申し訳ありません。 - Tom Kate 2017-08-07 22:02:25
          • 環境構築し直しましたが無理でした。 - mod初心者 2017-08-08 09:31:49
            • ここまで来るとわからないですね……もし解決方法が見つかりましたら追記いたします。申し訳ありません。 - Tom Kate 2017-08-08 17:55:47
  • テクスチャの大きさに関してですがdisplayの要素が変わってしまっているようです firstperson_righthand を試してみてください。リンクをどこかにやってしまったのでそれ以上のことは分からないですが… - arbor 2017-08-14 15:21:38
    • jsonの導入方式に間違いが有りました。"builtin/..."ではなく"item/..."をparentに利用してください。 - Tom Kate 2017-08-15 22:21:17
  • ttps://minecraft-ja.gamepedia.com/%E3%83%A2%E3%83%87%E3%83%AB - 名無しさん 2017-08-14 15:23:27
  • ↑名無しは自分です もしかしたらここのリンクの項目かもしれないです h抜きになってます - arbor 2017-08-14 15:24:17
名前: