« Minecraft MOD開発 9 | トップページ | Minecraft MODで出来る事 »

2014年3月17日 (月)

Minecraft MOD開発 10

GameData.javaを読んでいたらこんな文を見つけた。「アイテムやブロックの登録は、preinitializationでやってね。1.7以降では動かないかもしれないよ!」ということらしい。他のMODのアイテムを参照するレシピがあり得ることを考えると、アイテムとブロックの登録はpreInitで行い、initでレシピの登録を行うのが正しいだろう。チュートリアルでブロック名の登録をinitで行っているのはなぜだか分からないけど。

GameData.java

if (Loader.instance().hasReachedState(LoaderState.INITIALIZATION) || validated)
{
 FMLLog.severe("It appears something has tried to allocate an Item or Block outside of the preinitialization phase for mods. This will NOT work in 1.7 and beyond!");
}

設定ファイルでレシピを指定できるようにしたい。可読性を高めるため、アイテムIDではなくアイテム名を用いたい。アイテムを登録するときに使うGameRegistry.javaには、アイテム名、ブロック名からIDを返すメソッドがある。

GameRegistry.java

public static net.minecraft.block.Block findBlock(String modId, String name)
{
 return GameData.findBlock(modId, name);
}
 
public static net.minecraft.item.Item findItem(String modId, String name)
{
 return GameData.findItem(modId, name);
}

ただし、このメソッドを呼ぶためにはmodIdを知る必要がある。

アイテムIDの一覧を出力するID Checkerを使ってみる。IDChecker#2[1.5.1~~][Universal](MinecraftForge Version)となっているが、1.6.4でも動作した。

アイテムIDらしき数値とアイテム名らしき文字列が出力されるが、modIDが見あたらない。

ID Checkerをデコンパイルしてソースを参考にしたい。その前段階として、forge-1.6.4-9.11.1.965-src.zipを展開してインストールした直後(MODなどを導入しない状態)にdecompile.batを実行しても、大量のエラーを吐いて止まる。

decompileのエラーログ

« Minecraft MOD開発 9 | トップページ | Minecraft MODで出来る事 »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1499066/55411901

この記事へのトラックバック一覧です: Minecraft MOD開発 10:

« Minecraft MOD開発 9 | トップページ | Minecraft MODで出来る事 »