この記事は執筆中です。加筆してくださる人を募集しています。 |
MinecraftForgeにはModLoaderの機能が含まれているが、一部のMODが正常に機能しない。
これはForgeで新たに追加されたメソッドが、既存のメソッドを呼ばなくなってしまった事に起因する。
このページでは、実際に使われなくなったメソッドを公開する。
目次
Block.class
float blockStrength(EntityPlayer par1EntityPlayer)
このメソッドは、ブロックの破壊速度を返す。
規定値はcanHarvestBlockを参照し、ツールの種類に合わせた破壊速度を返す。
このメソッドはForge環境では非推奨アノテーションが付与されており、他から参照されない。
代わりに
float blockStrength(World world, EntityPlayer player, int x, int y, int z)
もしくは
float blockStrength(EntityPlayer player, int meta)
を使う事が推奨されている。
blockStrength(EntityPlayer par1EntityPlayer) がオーバーライドされたMODは、Forgeでは正常に動作しない。
boolean func_50074_q()
このメソッドは、シルクタッチで回収可能かどうかを返す。
規定値は、renderAsNormalBlock() && !isBlockContainer を返す。
Forge環境では canSilkHarvest() となっているが、これは他から参照されない。
にもかかわらず、非推奨アノテーションも付与されていない。
代わりに
boolean canSilkHarvest(World world, EntityPlayer player, int x, int y, int z, int metadata)
を使う必要がある。
func_50074_q()がオーバーライドされたMODは、Forgeでは正常に動作しない。
対応するForgeのバージョン
筆者が確認したのは、[1.2.5]Forge3.3.7_135 ~ [1.4.5]Forge6.4.0_397 までだが一切修正されていない。
この前後のバージョンでも同様に不具合が発生している可能性がある。
ModLoader用のMODをMinecraftForgeに移植する際には注意が必要である。
対応方法
ModLoaderとForgeの両対応のMODを作りたいなら、これらのメソッドを両方定義してやる必要がある。
片方だけでは、もう一方で動かなくなるので注意しよう。