概要
メタデータを付与したアイテムを追加する。
ソースコード
package com.tntmodders.tutorial;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
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 {
@Mod.Instance("aluminiummod")
public static AluminiumMod aluminiumInstance;
public static final Item COLOR_ALUMINIUM = new ItemColorAluminium();
@Mod.EventHandler
public void construct(FMLConstructionEvent event) {
MinecraftForge.EVENT_BUS.register(this);
}
@SubscribeEvent
public void registerItems(RegistryEvent.Register<Item> event) {
event.getRegistry().register(COLOR_ALUMINIUM);
}
@SubscribeEvent
@SideOnly(Side.CLIENT)
public void registerModels(ModelRegistryEvent event) {
//メタデータの分だけモデルを登録する。
for(int i = 0; i < 16; i++){
ModelLoader.setCustomModelResourceLocation(COLOR_ALUMINIUM, i, new ModelResourceLocation(new ResourceLocation("aluminiummod", "color_aluminium_" + i), "inventory"));
}
}
package com.tntmodders.tutorial;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.EnumDyeColor;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class ItemColorAluminium extends Item {
public ItemColorAluminium() {
super();
this.setRegistryName("aluminiummod", "color_aluminium");
this.setCreativeTab(CreativeTabs.MATERIALS);
this.setUnlocalizedName("color_aluminium");
//メタデータありのアイテムとして登録する。
this.setHasSubtypes(true);
this.setMaxDamage(0);
}
//翻訳名を変更する。後ろに.nameが着くためその前まで。
public String getUnlocalizedName(ItemStack stack) {
int i = stack.getMetadata();
return "item.color_aluminium." + i;
}
//クリエイティブタブに複数のアイテムを登録する。
@SideOnly(Side.CLIENT)
public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> items) {
if (this.isInCreativeTab(tab)) {
for (int i = 0; i < 16; ++i) {
items.add(new ItemStack(this, 1, i));
}
}
}
}
アセット
メタデータ0のもののみサンプルとして示す。今回はテクスチャはアルミニウムと同じものを使う。
メタデータを変更したモデルも作る必要があり、これは最後の数字をメタデータに対応させれば良い。
src/main/resources/assets/aluminiummod/models/item/に配置する
{
"parent": "item/generated",
"textures": {
"layer0": "aluminiummod:items/color_aluminium_0"
}
}
src/main/resources/assets/aluminiummod/lang/に配置する
#AluminiumMod English Langage File
item.color_aluminium.0.name=white colored aluminium
item.color_aluminium.1.name=orange colored aluminium
item.color_aluminium.2.name=magenta colored aluminium
item.color_aluminium.3.name=light blue colored aluminium
item.color_aluminium.4.name=yellow colored aluminium
item.color_aluminium.5.name=lime colored aluminium
item.color_aluminium.6.name=pink colored aluminium
item.color_aluminium.7.name=gray colored aluminium
item.color_aluminium.8.name=sliver colored aluminium
item.color_aluminium.9.name=cyan colored aluminium
item.color_aluminium.10.name=purple colored aluminium
item.color_aluminium.11.name=blue colored aluminium
item.color_aluminium.12.name=brown colored aluminium
item.color_aluminium.13.name=green colored aluminium
item.color_aluminium.14.name=red colored aluminium
item.color_aluminium.15.name=black colored aluminium
src/main/resources/assets/aluminiummod/lang/に配置する
#アルミニウムMOD 日本語言語ファイル
item.color_aluminium.0.name=白色アルミニウム
item.color_aluminium.1.name=橙色アルミニウム
item.color_aluminium.2.name=紅紫色アルミニウム
item.color_aluminium.3.name=空色アルミニウム
item.color_aluminium.4.name=黄色アルミニウム
item.color_aluminium.5.name=黄緑色アルミニウム
item.color_aluminium.6.name=桃色アルミニウム
item.color_aluminium.7.name=灰色アルミニウム
item.color_aluminium.8.name=銀色アルミニウム
item.color_aluminium.9.name=青緑色アルミニウム
item.color_aluminium.10.name=紫色アルミニウム
item.color_aluminium.11.name=青色アルミニウム
item.color_aluminium.12.name=茶色アルミニウム
item.color_aluminium.13.name=緑色アルミニウム
item.color_aluminium.14.name=赤色アルミニウム
item.color_aluminium.15.name=黒色アルミニウム
解説
AluminiumMod.java
ここはだいたいアイテム追加と一緒。モデルの登録だけメタデータ分やろう。
ItemColorAluminium.java
setHasSubtypes(boolean hasSubTypes)
メタデータを持つアイテムということを登録する。デフォルトでfalseになっているため、コンストラクターでtrueにしてやる。
public String getUnlocalizedName(ItemStack stack)
翻訳名を指定するメソッド。
ここでは"item.<翻訳名>.name"の中の".name"を除いた文字列を返す。
その為、翻訳名をメタデータに依存するものにする場合はItemStackから取ったメタデータを使って末尾に数値をつける。
public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> items)
アイテムをクリエイティブに登録する。ここでメタデータを含むアイテムスタックを登録することが出来る。
因みに、ここでアイテムスタックに対してエンチャントやデータを付与できる。
+
|
ここではシルクタッチのエンチャントを付与し、更にクリエイティブタブで64個スタックされた状態にしている。 |
@SideOnly(Side.CLIENT)
public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> items) {
if (this.isInCreativeTab(tab)) {
for (int i = 0; i < 16; ++i) {
ItemStack itemStack = new ItemStack(this, 1, i);
itemStack.addEnchantment(Enchantments.SILK_TOUCH,1);
itemStack.setCount(64);
items.add(itemStack);
}
}
}
|
color_aluminium_<メタデータ>.json
各メタデータごとにテクスチャを指定するモデルを作る。
コメント
この項目に関する質問などをどうぞ。
最終更新:2017年08月07日 22:47