既存MOBの置き換えについて

Modding・サーバPlugin制作・ツール制作など、開発関連の質問があればこちらにお願い致します。
フォーラムルール
質問関連フォーラムで質問する時は、必ず次のトピックを一読/厳守お願い致します。
viewtopic.php?f=5&t=999
  • (PostNo.24895)

既存MOBの置き換えについて

投稿記事by alice » 2012年2月17日(金) 18:32

件名の通り、既存のMOBの行動や外見を変更しようと考えています。
たとえば、クリーパーの場合、EntityCreeper.classやRendererCreeper.classを変更すれば済む話なのですが、敢えて変更せずにModLoader+MODディレクトリに入れるだけで動作するようなものを作りたいのです。
手始めに、クリーパーをMr.Minecraftに置き換えるところまではうまく行きました。
しかし、任意のスキン(Minecraftの公式サイトでログインしてスキンを変えるときに使う画像)を適用しようとすると、ファイルは読み込まれるもの真っ白になってしまいます。(形だけ反映されて、テクスチャは適用されない)
ソースコードを添付しますので、問題点が有りましたら指摘していただけませんでしょうか。
添付ファイル
creeparka.zip
ソースとクラスファイル(MC 1.1.0用)
(11.23 KiB) ダウンロード数: 256 回
アバター
alice
ID:14fbdb8c
金掘り
 
記事: 442
登録日時: 2011年10月23日(日) 20:10
お住まい: 舞天市

  • (PostNo.24927)

Re: 既存MOBの置き換えについて

投稿記事by MMM » 2012年2月17日(金) 20:22

alice さんが書きました:件名の通り、既存のMOBの行動や外見を変更しようと考えています。
単純にEntityCreeper.classやRendererCreeper.classを変更すれば済む話なのですが、敢えて変更せずにModLoader+MODディレクトリに入れるだけで動作するようなものを作りたいのです。
手始めに、クリーパーをMr.Minecraftに置き換えるところまではうまく行きました。
しかし、任意のスキン(Minecraftの公式サイトでログインしてスキンを変えるときに使う画像)を適用しようとすると、ファイルは読み込まれるもの真っ白になってしまいます。(形だけ反映されて、テクスチャは適用されない)
ソースコードを添付しますので、問題点が有りましたら指摘していただけませんでしょうか。

ソース拝見しました。
うちの開発環境ではそのまま動かなかったので少しいじらせてもらって確かめました。
結果から言うと恐らくRenderCreeparka中で関数の引数としてEntityCreeperを指定している部分が問題ではないかと。
EntityCreeperをEntityCreepakaに設定すると表示されました。
ただ、元のスレッドを使用して強制書き換えを行う物だと書き換えが大変なので大幅に変更していますので、もしかすると違う原因かもしれません。


あと、手前味噌となりますが、コンセプトとして同様の事を拙作Tachikomaで行っていますので参考にしていただければ幸いです。
画像
    独立支援型お役立ちユニット「littleMaid」です。           (画像提供 moyu氏)
MMM
ID:8f0b47e2
レッドストーン掘り
 
記事: 511
登録日時: 2011年7月20日(水) 22:56

  • (PostNo.24944)

Re: 既存MOBの置き換えについて

投稿記事by denpa » 2012年2月17日(金) 20:56

テクスチャモデルだけの置き換えは無理ということかな。
EntityListのEntityごと置き換える必要があるということだろうね。
自作MODトピック:http://forum.minecraftuser.jp/viewtopic.php?f=13&t=2686
久しぶりにマイクラ再開したら、見事に砂漠寺院で吹っ飛びました。
アバター
denpa
ID:bedf3bcd
石掘り
 
記事: 92
登録日時: 2012年1月07日(土) 03:35
お住まい: 火継ぎの祭祀場

  • (PostNo.25005)

Re: 既存MOBの置き換えについて

投稿記事by alice » 2012年2月18日(土) 01:20

ご指摘ありがとうございます。
MMM さんが書きました:ソース拝見しました。
うちの開発環境ではそのまま動かなかったので少しいじらせてもらって確かめました。
結果から言うと恐らくRenderCreeparka中で関数の引数としてEntityCreeperを指定している部分が問題ではないかと。
EntityCreeperをEntityCreepakaに設定すると表示されました。

どのような変更を行ったかは存じませんが…
実を言うと、いろいろ弄っているときにEntityCreeparka extends EntityCreeperも試したことがありました。これも失敗しましたが。
徹底的に調査しようということで、Process Monitorを使い画像ファイルの読み込みを監視したところ、なんと読み込まれていないということが判明しました。
パスは合っているんですが、どういうわけか読み込めない状態になっていました。
鉱夫のスキンは適用されているので、まさかと思いjarのmobディレクトリに入れたところ、指定したスキンが適用されました。
どうやら.minecraft/binディレクトリからの相対パスじゃないといけないようです。フルパスで指定しても、相対パスと見なしてしまうようでした。
resourceディレクトリ以下にスキンを配置して、指定することはできないようですね…何か良い方法がないかな。

MMM さんが書きました:あと、手前味噌となりますが、コンセプトとして同様の事を拙作Tachikomaで行っていますので参考にしていただければ幸いです。

タチコマMODのコードを参考にしたところ、リフレクションしまくりの汚いコードがすっきりしました。
私が作成したコードは将来のMCPのアップデートで修正が面倒になりそうだったので、大変参考になりました。ありがとうございます。

denpa さんが書きました:テクスチャモデルだけの置き換えは無理ということかな。
EntityListのEntityごと置き換える必要があるということだろうね。

一応リフレクションでリストを書き換えたから、モデルは反映されてました。
Process Monitorで調査したところ、テクスチャが適用されない理由はファイルが読み込まれない、でした。

2012-02-18_01.13.30.png
im1785494のスキンを適用

http://seiga.nicovideo.jp/seiga/im1785494より拝借しました。
アバター
alice
ID:14fbdb8c
金掘り
 
記事: 442
登録日時: 2011年10月23日(日) 20:10
お住まい: 舞天市

  • (PostNo.25083)

Re: 既存MOBの置き換えについて

投稿記事by MMM » 2012年2月18日(土) 14:51

おう、どうやら見当違いのレスをしてしまったようで申し訳ないです。
コード: 全て選択
   public static String ConfTexture = "/mob/char.png";

      if(!ConfTexture.equals("/mob/char.png"))
      {
         ConfTexture = Minecraft.getMinecraftDir() + "/resources/mod" + ConfTexture;
      }

となっていたので、てっきりテスト環境ではデフォルトテクスチャが読み込まれるが正常かと思っていました。
しかも、改変したテスト版の動作が、白い豆腐になるのではなくそもそも描画されなかったので、症状が違っていたというオチ。
因みにテスト用の改変はmod_Tachikomaを流用して行いました。


テクスチャの配置場所については、「.minecraft/mods/」以下にディレクトリを作成して、そこにmod_Creepakaを配置してやればそのディレクトリの中身をリソースとして使えるようになるので、それを利用すればよろしいかと。
コード: 全て選択
./minecraft/mods/Creepaka/
         mod_Creepaka
         /mob/creepaka.png

とした場合、テクスチャの指定に「/mob/creepaka.png」が使用できます。

またしても手前味噌になりますがFN5728Gunsのディレクトリ構成が参考になるかと思います。
画像
    独立支援型お役立ちユニット「littleMaid」です。           (画像提供 moyu氏)
MMM
ID:8f0b47e2
レッドストーン掘り
 
記事: 511
登録日時: 2011年7月20日(水) 22:56

  • (PostNo.25151)

Re: 既存MOBの置き換えについて

投稿記事by alice » 2012年2月18日(土) 20:47

MMM さんが書きました:テクスチャの配置場所については、「.minecraft/mods/」以下にディレクトリを作成して、そこにmod_Creepakaを配置してやればそのディレクトリの中身をリソースとして使えるようになるので、それを利用すればよろしいかと。
コード: 全て選択
./minecraft/mods/Creepaka/
mod_Creepaka
/mob/creepaka.png

とした場合、テクスチャの指定に「/mob/creepaka.png」が使用できます。

またしても手前味噌になりますがFN5728Gunsのディレクトリ構成が参考になるかと思います。

アドバイスありがとうございます。
modsディレクトリに配置すれば良かったのですね。
コード: 全て選択
.minecraft/mods/Creeparka.zip(mod_Creeparka.classとか)
.minecraft/mods/Creeparka/mob/creeparka.png

このような構成で、設定ファイルを次のようにしたところ、ちゃんと読み込まれました。
コード: 全て選択
Skin=/mob/creeparka.png


とりあえず、公開できるレベルになりました。
アバター
alice
ID:14fbdb8c
金掘り
 
記事: 442
登録日時: 2011年10月23日(日) 20:10
お住まい: 舞天市


Return to 質問:開発・制作関連

x