シンタックスハイライト

Minecraftを読み解く(1)~Coremodのロード処理~

俺得エントリですが一応今後のために新シリーズをぶち立てておく。(前のシリーズはたち消えたが……。)
おおよその流れがわかり、実用的な範囲に入ってくれれば及第点と思います。
まずは手始めにCoremodから。
早速MinecraftではなくMinecraftForgeの処理であるがまぁそこはよしなに。

Coremodに関連するインターフェースとしてはIFMLLoadingPlugin、IClassTransformer、IFMLCallHook、ModContainerがある。

IFMLCallHookは通常のローディング処理よりも数段早い段階で呼ばれるものである。
FMLさんはここでこれからの処理が穏便に進められるかどうかの判断を下しているようだ。
これ目当てにCoremodにすることも結構ある。

つづいてModContainerであるが、これは処理上なくても問題ないと思われる。
しかし、Coremodがしっかり読み込まれていることの指標にもなるし実装しない理由はない。
Mod利用者向けに(mcmod.infoの代わりとして)情報を開示する手段である。

そしてIClassTransformerであるが、これがクラス書き換えにおいてもっとも重要だと思われる。
ここで実際に生のbyte配列をいじるわけですから。(実際にはASMを使うと思いますが……。)

IFMLLoadingPluginはエントリポイントである。

構造の概要はこんなものであろうか。詳しい説明はModdingWikiを参照してもらいたい。

で、本題である。ほぼおまけのような分量である。
ロード処理とは銘打ったもののどっちかというとソーティング処理のメモとしてみていただきたい。

ここで関わってくるのはIFMLLoadingPluginの中にあるアノテーションたちだ。
一応列挙しておこう:

  • TransformerExclusions
  • MCVersion
  • Name
  • DependsOn
  • SortingIndex
以上である。

で、一番目のやつはソーティングには関係ない。
ASM改変の恐怖からクラスを守ってくれる御札みたいなアノテーションである。(実際アノテーションは御札みたいなものである)

そして二番目。これはその名の通りとでも言うべきであろうか。
前提のMinecraftのバージョンを指定でき、合致しなければMod利用者に通告してくれるようになる。

三番目。ここからがソーティングに関係のあるアノテーション。
これは通常のModで言うところのmodidのようなものと形容すべきであろうか。
特に指定しない場合は、IFMLLoadingPluginの置かれているパッケージ名となる。
将来パッケージを動かすかもしれないと思うのであれば、指定すべきであろう。

四番目が最もソーティングで重要であろうか。
依存関係を指定できる。
依存関係なので指定したCoremodがないとエラーを起こす。
そして指定したCoremodよりもあとに読み込まれるようになる。
肝心の指定する方法であるが、前提に指定したいCoremodのIFMLLoadingPluginに付加された前述のNameアノテーションで指定されている文字列(もしくはそのIFMLLoadingPluginの置かれているパッケージ名)を配列に含めてあげれば良い。
これで任務達成!

そんでもって五番目。ソーティングにおける優先度を指定する。比較的細やかな指定であるといえる。
詳しい指定はnet.minecraftforge.fml.relauncher.CoreModManager#sortTweakListをみてくだされ。

いかがでしたでしょうか。あ、Forgeのビルドは1563です。




0 件のコメント:

コメントを投稿