ページ 11

クラスの書き換えについて

投稿記事Posted: 2018年5月06日(日) 06:15
by 1.7.10modder
1.7.10,forge10.13.4.1558でmoddingをしています。
クラスの書き換えを使って、自作の羊肉を羊からドロップさせたいのですが、
チュートリアルを読んでも、いまいちよくわかりません。

どなたか、一からわかりやすく教えてください。
お願いします。

Re: クラスの書き換えについて

投稿記事Posted: 2018年5月06日(日) 23:50
by alice
1.7.10でドロップを追加するのであれば、LivingDropsEventの実装を行えばクラスの書き換えをしなくても実現出来ると思います。
コード: 全て選択
public class SheepEvent
{
  // モブが倒されてアイテムをドロップする直前に呼ばれるイベント
  @SubscribeEvent
  public void onLivingDrop(LivingDropsEvent eventDrop)
  {
    // 倒れたのは羊かどうか?
    if(eventDrop.entityLiving instanceof EntitySheep)
    {
      // ドロップアイテムを拾ったとき、プレーヤーのインベントリに加わるItemStackを作成する
      ItemStack item = new ItemStack(自作の羊肉のItemインスタンス, メタデータ, 個数);
      // 上記のItemStackからドロップアイテムを生成する
      // 座標は倒れたモブの位置にする
      EntityItem entityItem = new EntityItem(eventDrop.entityLiving.worldObj, eventDrop.entityLiving.posX, eventDrop.entityLiving.posY, eventDrop.entityLiving.posZ, item);
      // ドロップ一覧に追加
      eventDrop.drops.add(entityItem);
    }
  }
}

このようなクラスを作成後、FMLInitializationEventでMinecraftForge.EVENT_BUS.register(new SheepEvent());とすれば目的の動作は実現するはずです。

最後に、クラスの書き換えは他に方法が無い最終手段としておいたほうがよろしいかと。

Re: クラスの書き換えについて

投稿記事Posted: 2018年5月12日(土) 05:04
by 1.7.10modder
ありがとうございます。
では、既存のレシピを削除するのも、クラスの書き換えを使わずにできますか?
お願いします。

Re: クラスの書き換えについて

投稿記事Posted: 2018年5月12日(土) 17:40
by defeatedcrow
1.7.10modder さんが書きました:ありがとうございます。
では、既存のレシピを削除するのも、クラスの書き換えを使わずにできますか?
お願いします。


基本的に、書き換えは難易度が高いので上級者向きです
(既存チュートリアルの読解に不自由している状態では論外です)

レシピ削除は、バニラのCraftingManagerにある全クラフトレシピの一覧リストを
CraftingManager.getInstance().getRecipeList()
で取得できるので、このリストから目的のレシピ(IRecipeインターフェイスの形で入っています)を取得し、リストから削除してやれば削除できます
(Listの取り扱いについてはModding以前の予備知識の範疇なので除外)

1.7の場合、最新版と違ってバニラのレシピかForgeのOreRecipe(鉱石辞書レシピ)かどうかでinputの型が違うので、材料を調べたい場合は難易度が若干上がります
削除はせず、鉱石辞書レシピに変換して自動追加する機能であれば過去に作ったことがあるのでソースを置いときます
https://github.com/defeatedcrow/FluidityFoodstuffs_1.7.10/blob/master/java/defeatedcrow/addonforamt/fluidity/recipe/CustomizeVanillaRecipe.java

Re: クラスの書き換えについて

投稿記事Posted: 2018年5月13日(日) 20:03
by 1.7.10modder
本当にありがとうございます。
やってみます。