正直言って、mcmod.infoが読み込まれないのは
よくあることで、
原因がわからないことも多く、
正直言っていちいち対策考えるのが面倒くさい(あくまで個人的な意見)ので、そもそもmcmod.infoを使わない方法を提案させてもらいます。
どうしてもmcmod.infoを使いたいのなら、この返信は無視していただいて結構です。
mcmod.infoを使わない方法ですが、
ModMetadataというものを使います。
これは、mcmod.infoの様に、別のファイルではなく@Modアノテーションを付けたクラス(以下、メインクラス)の中に、Java(もしくはその他のJavaVM言語)で記述することができるので、内部の変数などを用いることができ、個人的にはmcmod.infoのほぼ完全な上位互換だと考えています。
ここに、実際に
ModMetadataを使っている例を貼っておきますので、正常に動作しなかった場合、ここと比較してみるといいかもしれません。(Minecraft1.7.10以降、Java/Kotlinで動作を確認)
さて、肝心の使い方について説明していきます。なお、以下のコードはJavaです。それ以外のJavaVM言語を用いる場合、適宜変換してください。
なお、すべてメインクラスに記述してください。
まず、要求されるimport。IDEで自動生成するのなら、個別に書く必要はありません。
- コード: 全て選択
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.ModMetadata;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
まず。@アノテーション部分に、useMetadata = trueを追加します。
- コード: 全て選択
@Mod(modid = YourModID,useMetadata = true
次に、ModMetadataの変数を宣言します。
- コード: 全て選択
@Mod.Metadata
public static ModMetadata modMetadata;
この変数は、Forgeによって代入されるので、自身で初期化する必要はありません。
次に、FMLPreInirializetionEvent(以下preinit)にて、先程の変数に情報を書き込んでいきます。
- コード: 全て選択
@Mod.EventHandler
public void preinit(FMLPreInitializationEvent event) {
loadMeta(modMetadata);
//Any Codes
}
- コード: 全て選択
private void loadMeta(ModMetadata metadata){
metadata.modId = MOD_ID;
metadata.name = MOD_NAME;
metadata.version = MOD_VERSION;
metadata.authorList.add("Your Name");
metadata.description = "Some Descriptions";
metadata.autogenerated = false;
}
ここで、必ず書かないといけないのは、
metadata.autogenerated = false;
の部分です。これをfalseにしないと、ModMetadataの更新処理が行われていないとみなされ、mcmod.infoのデータが使われます。コレでは意味がありません。
他の部分は、基本的に任意です。まぁ、最低限ModID,Name,Version,authorListは更新しておいたほうがいいでしょう。
ここに書かれている以外にも、色々変数があり、mcmod.infoで指定できるものは、全てできるようになっています。
以上で、ModMetadataの使い方は終わりです。
慣れればこっちのほうがかなり楽です。特に、バージョンなんかは変数一つにまとめることができるので、場所によって情報が違うということは起こりにくくなります。(build.gradle内のバージョンは自分で書き換えないといけないが)