提供: Minecraft Modding Wiki
Access Transformer
Minecraft Forge (厳密にはFML) によって提供される、アクセス修飾子書き換えを行うための機能である。
リフレクションなどを用いて参照を得ようとするよりも可読性が高くなると言った利点を持つ。
何より簡単なので、あらゆるフックを通じてなお不可能である機能の実現の一つの手段として役立つだろう。
準備
build.gradleに以下を追加する
jar { manifest { attributes 'FMLAT': '<modid>_at.cfg' } }
この記述によって、MANIFEST.MFにAT.cfgの配置情報が記述されるようになる。 そして、<modid>_at.cfgをsrc/main/resources/META-INF下に作成する。
以上で、使用するための準備は完了である。
書式
一般的に正規表現風(+のエスケープを省いている)で以下に示す
アクセス修飾子([+-]f)? 所属クラスパス (記述子)?
アクセス修飾子に書き換え後の修飾子を記述する。パッケージデフォルトはdefaultとする。
+fとすることでfinal修飾子の追加、-fとすることで除去ができる。
所属クラスパスには、そのフィールドやメソッドが存在するクラスの完全修飾名を指定する。
記述子には、フィールドやメソッドの識別名+返り型を記述する。何も書かなかった場合にはクラス自体のアクセスが変更される。無論SRG名なのでSRG名は別途調べること。
- 記述子書式参考
- JVM Spec 4.3
- ASM FAQ
- org.objectweb.asm.Typeのソース
- 英語がよくわからない人はforge_at.cfgなどを参考に地道にやっていってください。
#以降はコメントとして解釈されない。
アスタリスクを用いることで全メンバを指定することもできる。
反映
AT.cfgに変更したい部分を記述した後、setupDecompWorkspaceすれば開発環境のコードに反映される。