提供: Minecraft Modding Wiki
2014年11月30日 (日) 20:44時点におけるA.K. (トーク | 投稿記録)による版 (新規作成)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先: 案内検索

この記事は"Minecraft Forge Universal 11.14.0.xxx~"を前提MODとしています。

Wood pickaxe.png
初心者向けのチュートリアルです。
C item.png
Itemに関係のあるチュートリアルです。

アイテムの追加

簡単なアイテムの追加方法

ソースコード

SampleMod.java

package com.example.examplemod;

import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.model.ModelBakery;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;

@Mod(modid = "SampleMod", name = "SampleMod", version = "1.0", dependencies = "required-after:Forge@[1.8-11.14.0.1239,)", useMetadata = true)
public class SampleMod {
    public static final String MOD_ID = "SampleMod";

    @Mod.Instance("SampleMod")
    public static SampleMod INSTANCE

    public static Block sampleBlock;
    public static Item sampleItem;

    @EventHandler
    public void preInit(FMLPostInitializationEvent event) {

        sampleItem = new Item()
                .setCreativeTab(CreativeTabs.tabMaterials)/*クリエイティブのタブ*/
                .setUnlocalizedName("SampleItem")/*システム名の登録*/
		/*.setHasSubtypes(true)*//*ダメージ値等で複数の種類のアイテムを分けているかどうか。デフォルトfalse*/
		/*.setMaxDamage(256)*//*耐久値の設定。デフォルト0*/
		/*.setFull3D()*//*3D表示で描画させる。ツールや骨、棒等。*/
		/*.setContainerItem(Items.stick)*//*クラフト時にアイテムを返却できるようにしている際の返却アイテムの指定。*/
		/*.setPotionEffect(PotionHelper.ghastTearEffect)*//*指定文字列に対応した素材として醸造台で使える。PotionHelper参照のこと。*/
		/*.setNoRepair()*//*修理レシピを削除し、金床での修繕を出来なくする*/
                .setMaxStackSize(64);/*スタックできる量。デフォルト64*/
        //アイテムの登録。登録文字列はMOD内で被らなければ何でも良い。
        GameRegistry.registerItem(sampleItem, "sampleItem");

        //テクスチャ・モデル指定JSONファイル名の登録。
        if (event.getSide() == Side.CLIENT) {
            //ItemStackのmetadataで種類を分けて描画させたい場合。登録名を予め登録する。今回は使ってない。
            //ModelBakery.addVariantName(sampleItem, MOD_ID + ":" + "sampleItem0", MOD_ID + ":" + "sampleItem1");
            //モデルJSONファイルのファイル名を登録。1IDで1つだけなら、登録名はGameRegistryでの登録名と同じものにする。
            //1IDでmetadata別複数モデルを登録するなら、上のメソッドで登録した登録名を指定する。
            Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(sampleItem, 0, new ModelResourceLocation(MOD_ID + ":" + "sampleItem", "inventory"));
        }
    }
}

sampleitem.json

{
    "parent": "builtin/generated",
    "textures": {
        "layer0": "items/apple"
    },
    "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 ]
        }
    }
}

解説

SampleMod.java

//テクスチャ・モデル指定JSONファイル名の登録。
        if (event.getSide() == Side.CLIENT) {
            //ItemStackのmetadataで種類を分けて描画させたい場合。登録名を予め登録する。今回は使ってない。
            //ModelBakery.addVariantName(sampleItem, MOD_ID + ":" + "sampleItem0", MOD_ID + ":" + "sampleItem1");
            //モデルJSONファイルのファイル名を登録。1IDで1つだけなら、登録名はGameRegistryでの登録名と同じものにする。
            //1IDでmetadata別複数モデルを登録するなら、上のメソッドで登録した登録名を指定する。
            Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(sampleItem, 0, new ModelResourceLocation(MOD_ID + ":" + "sampleItem", "inventory"));
        }

アイテムのテクスチャ・モデルのJSONファイルのファイル名を登録している。 ModelBakery#addVariantNameメソッドは、染料のような、1IDで複数種類のアイテムのモデルを登録する際の登録名を予め指定しておくメソッドである。 meta別のモデルがない場合は必要ない。 ItemModelMesher#registerメソッドでテクスチャ・モデルのJSONファイルを登録している。 ここで登録されるのは手持ちやドロップアイテム時の描画についてである。 1.7と同様の処理については1.7のアイテム追加を参照のこと。

sampleitem.json

{
    "parent": "builtin/generated",
    "textures": {
        "layer0": "items/apple"
    },
    "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 ]
        }
    }
}

アイテムモデル用JSONファイルである。このファイルは、
assets\<modid>\models\block
ディレクトリに配置する。

parent:親のモデルJSONファイルを指定。"builtin/generated"で通常のアイテムのモデルを指定。

texture:テクスチャのファイルパスを指定。"layer0"と"layer1"を指定できる。マルチパスレンダリングしないなら、"layer0"のみで良い。

display:描画時の回転、平行移動、拡大縮小の係数を指定する。コピペ安定。

"thirdperson"は三人称視点、"firstperson"は一人称視点