概要
何の機能もない基本的なアイテムを追加する。
ついでにテクスチャと言語ファイルも実装しちゃう。
ソースコード
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"));
}
}
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");
}
}
アセット
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 ]
}
}
}
src/main/resources/assets/aluminiummod/lang/に配置する
#AluminiumMod English Langage File
item.aluminium.name=aluminium
src/main/resources/assets/aluminiummod/lang/に配置する
#アルミニウムMOD 日本語言語ファイル
item.aluminium.name=アルミニウム
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=<名称> で登録できる。
全角スペースを使うととてもダサい見た目の翻訳名になるため十分気をつけていただきたい。
コメント
この項目に関する質問などをどうぞ。
最終更新:2017年08月15日 22:23