[Java・マイクラMod開発]自作アイテムを追加はできたがアイテム名とテクスチャが反映されない。
やっていること
MineCraftのMod作成(主に新アイテムの追加)
[Minecraft JE 1.12.2(-1.13.x)] MOD作成のすすめ(チュートリアル) Part01 : アイテムを追加するまでを参考にしました。
発生している問題
追加したtest_item
と定義しているアイテムに名前とテクスチャを適応させたいのですが、resourceというファイルに入れているアイテム名やテクスチャが一切反映されません。
実際にrunしてみるとアイテム名はitem.test_item.name
となり、テクスチャがない場合に出る例の黒と紫のブロック状の表示になっていました。
該当のソースコードとディレクトリ構造
※実際のコードが入っているファイル以外は省略しています。必要なものがあればお手数ですがお教えください。
MoreSwordMod/src/main
├ java/moresword/tutorial
│ ├ MoreSwordMod.java
│ └ MoreSwordItems.java
└ resources/assets/tsukineko_moresword
├ lang
│ ├ en_us.lang
│ └ ja_jp.lang
├ models/item
│ └ test_item.json
└ textures/items
└ test_items.png ※ 現在はテクスチャとして使用していません。
package com.moresword.tutorial;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
@Mod(modid=MoreSwordMod.MOD_ID, name=MoreSwordMod.MOD_NAME, version=MoreSwordMod.VERSION)
public class MoreSwordMod {
public static final String MOD_ID = "tsukineko_moresword";
public static final String MOD_NAME = "MoreSwordMod";
public static final String VERSION = "1.0";
//アイテム・ブロック・ディメンション登録用
@Mod.EventHandler
public void preInit(FMLPreInitializationEvent event){
MoreSwordItems.init();
MoreSwordItems.register();
}
//レシピ・バイオーム・エンティティー登録用
@Mod.EventHandler
public void init(FMLInitializationEvent event){
}
//既存レシピの変更や他Modとの連携性登録用
@Mod.EventHandler
public void postInit(FMLPostInitializationEvent event){
}
}
package com.moresword.tutorial;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
public class MoreSwordItems {
public static Item test_item;
public static void init(){
test_item = new Item()
.setRegistryName(MoreSwordMod.MOD_ID, "test_item")
.setUnlocalizedName("test_item")
.setCreativeTab(CreativeTabs.MATERIALS)
.setMaxStackSize(64);
}
public static void register(){
ForgeRegistries.ITEMS.register(test_item);
}
public static void registerRenders(){
registerRender(test_item, 0);
}
private static void registerRender(Item item, int meta){
Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(
item, meta, new ModelResourceLocation(item.getRegistryName(), "Inventory")
);
}
}
コードについて
基本的には上で取り上げた動画のコードのアイテム名など固有の部分以外丸パクリで、中身自体はほとんど理解していません。
試したこと
調べた結果、Intellij IDEAを使っていると、resourcesが読み込まれない?みたいな問題があるという風に書いてありました。
具体的な原因は、IntellijだとModelResourceLocation
(MoreSwordItems.java末尾四行目)で、mainのclassがある同じディレクトリ内しかresourocesを探さない?かららしいです(?)
そこでbuild.gradl末尾に下記コードを突っ込むと読み込むようになるらしいのでやってみました。
copy {
delete {
delete "$buildDir/classes/java/main"
}
into "$buildDir/classes/java/main"
from sourceSets.main.resources
}
理論上はModelResourceLocation
がresouroesを探してくれる場所に、毎回resourocesをコピーして作ってくれることで、見つけれるようにするらしいです。
効果はありませんでした。
補足情報(FW/ツールのバージョンなど)
OS: Win10
Editor: Intellij IDEA Community Edition 2020
MineCraftVer: 1.12.2
質問者のスキルレベル: Javaほぼ無知・Pythonがメイン言語