[Tool][Modder]Modder向けパッチツール "MCClassPatcher" 0.4

開発したツールの公開や、見つけたツールの紹介などはこちらでどうぞ!
  • (PostNo.38090)

[Tool][Modder]Modder向けパッチツール "MCClassPatcher" 0.4

投稿記事by 御津凪 » 2012年5月12日(土) 19:53

このツールは、同じクラスファイルを書きかえる MOD に対応するために作られました。
 このツールで用意したパッチを行うクラスを用意し、パッチを当てたクラスファイルを導入することにより
 競合を防ぐことができます。
(自作MOD "BiomeColorStone"、 NickNames 等で使われています)
例えば、変更したいクラスファイルが forge などの前提MODとかぶる場合に、 javassist を利用すると、 forge 対応関連なしに、該当箇所だけ変更することが可能になります。
※ただし、変更したい内容によってはカバーしきれない場合があります。これは javassist の機能上の制限です。

・これで作られたパッチ同士で同じクラスファイルを対象としても、パッチをあてることが可能になっています。
 ただし、修正箇所が同じ場合は競合が発生します(例外が発生して適応できない)のでご注意ください。

開発情報
・パッチファイルは次のように作成します。
 ※同梱しているeclipseプロジェクトファイルを利用すると楽です。
 0.javassist.jar へのパスが切れているはずなので正しい場所を指定してください。
 1.mcclasspatcher.patch パッケージ内に接頭文字列 "patch_" で始まるクラスを作成し、
  mcclasspatcher.Patcher を継承します。
 2.getName() はパッチ名(MOD名とか)、 getVersion() はパッチバージョンを返してください。
 3.getTargets() は、パッチ対象のクラス名を配列で返してください。(パッケージ配置されている場合はその通りに書くこと)
  この時、パッチ対象のクラス名そのままを指定してください。
  また、jarへ入れる必要のある(追加する)ファイルがある場合は、拡張子を含めて指定してください。
 4.run() で実際のパッチ処理を行います。
  第一引数 ClassPool は処理中のデータで、余り使いません。
  第二引数 CtClass は、パッチ対象のクラスを含んだデータになります。
  CtClass の getName() で返される名前がクラス名になるので、それで判断しながらパッチ処理を行ってください。
  処理が完了しても書き出しする必要はありません。ツール側で一括して出力されます。
 5.デバッグ実行でGUIでテストするなどしてバグがないか(正しくパッチが当てられているか)確認します。
6.完成したら、プロジェクトフォルダ内にある "bin" フォルダから、対象のクラスを取り出し、
  パッケージ構造そのままに圧縮して完了です。
  なお、3.で指定した追加対象のファイルも含めてください。
 7.作成したパッチzipファイルを実際にテストして正しく出力されていれば完成です。


ダウンロード
MCClassPatcher-0.4.zip



注意
  • ツールで作成された "output" フォルダは、作成されるたびに前のファイル群を削除します。
  • 生成されたパッチを上書きする前に必ずバックアップを取ってください。ツールの特性上同じパッチを当てる(パッチを当てたファイルから同系統のパッチを当てる)と不具合が発生する場合があるためで、特にバージョンアップを行う際は注意してください。
  • このツールは、 javassist ライブラリを同梱しているため、ライセンスを javassist から継承して、 MPL(Mozilla Public License) / LGPL(GNU Lesser General Public License) / Apache License のトリプルライセンスで公開しています。

既知の不具合
  • Java7上で実行した場合に"./cfg.dat"が作成できない旨のエラーが発生、パッチが作られない(未確認)
  • パッチに失敗しても"Patch Completed!"と表示される(例えば何もパッチできるデータがない場合など)

機能追加予定
  • MOD自体へのパッチを行える構造の用意
  • エラー発生時のログ出力
  • GUIの日本語表記版の用意

更新履歴
0.4
パッチ処理シーケンスを修正し、パッチ以外のファイルをそのまま出力する部分をわかりやすくした
patch_*.class 以外で、ルートディレクトリにある "src" ディレクトリ内と "_" で始まるファイル名を除く
すべてのファイルがディレクトリ構造そのままに "output" フォルダに出力されるように

0.3
パッチ処理を行った後、ツールを終了するように
(javassist の使用上、パッチを当てると中間ファイルの修正がロックされ、以降のパッチが行えなくなるため)

0.1
初版
最後に編集したユーザー 御津凪 [ 2012年8月20日(月) 12:47 ], 累計 2 回
質問に答え、MODを制作し、身内系鯖主でそのワールドを使ってニコニコで東方鉱工芸動画を投稿してる人。
因みに名前は「みつなぎ」と読みます。
Modding近況 : マルチであだ名をつける MOD を最新対応させるための時間が... - 私の製作したMOD達はこちらからどうぞ
リアル近況 : 時間の割り振りで色々と厳しい
アバター
御津凪
ID:a30abd76
石炭掘り
 
記事: 191
登録日時: 2012年1月05日(木) 01:01
お住まい: 北の国

  • (PostNo.47031)

Re: [Tool][Modder]Modder向けパッチツール "MCClassPatcher" 0.3

投稿記事by 御津凪 » 2012年7月14日(土) 22:30

0.3 公開しました。(ちょっと地味な修正ですが)

パッチ処理を行った後、ツールを終了するように
(javassist の仕様上、パッチを当てると中間ファイルの修正がロックされ、以降のパッチが行えなくなるため)
質問に答え、MODを制作し、身内系鯖主でそのワールドを使ってニコニコで東方鉱工芸動画を投稿してる人。
因みに名前は「みつなぎ」と読みます。
Modding近況 : マルチであだ名をつける MOD を最新対応させるための時間が... - 私の製作したMOD達はこちらからどうぞ
リアル近況 : 時間の割り振りで色々と厳しい
アバター
御津凪
ID:8ad7af9b
石炭掘り
 
記事: 191
登録日時: 2012年1月05日(木) 01:01
お住まい: 北の国

  • (PostNo.52398)

Re: [Tool][Modder]Modder向けパッチツール "MCClassPatcher" 0.4

投稿記事by 御津凪 » 2012年8月20日(月) 12:49

0.4 公開しました。

パッチ処理シーケンスを修正し、パッチ以外のファイルをそのまま出力する部分をわかりやすくした
patch_*.class 以外で、ルートディレクトリにある "src" ディレクトリ内と "_" で始まるファイル名を除く
すべてのファイルがディレクトリ構造そのままに "output" フォルダに出力されるように

主にパッチデータの出力周りの修正です。
質問に答え、MODを制作し、身内系鯖主でそのワールドを使ってニコニコで東方鉱工芸動画を投稿してる人。
因みに名前は「みつなぎ」と読みます。
Modding近況 : マルチであだ名をつける MOD を最新対応させるための時間が... - 私の製作したMOD達はこちらからどうぞ
リアル近況 : 時間の割り振りで色々と厳しい
アバター
御津凪
ID:149c9510
石炭掘り
 
記事: 191
登録日時: 2012年1月05日(木) 01:01
お住まい: 北の国


Return to ツール 公開/紹介

x