提供: Minecraft Modding Wiki
ModderKina (トーク | 投稿記録) 細 (→書式) |
ModderKina (トーク | 投稿記録) 細 (→書式) |
||
(同じ利用者による、間の9版が非表示) | |||
1行目: | 1行目: | ||
== Access Transformer == | == Access Transformer == | ||
Minecraft Forge (厳密にはFML) によって提供される、アクセス修飾子書き換えを行うための機能である。<br> | Minecraft Forge (厳密にはFML) によって提供される、アクセス修飾子書き換えを行うための機能である。<br> | ||
− | + | リフレクションなどを用いて参照を得ようとするよりも可読性が高くなると言った利点を持つ。<br> | |
何より簡単なので、あらゆるフックを通じてなお不可能である機能の実現の一つの手段として役立つだろう。 | 何より簡単なので、あらゆるフックを通じてなお不可能である機能の実現の一つの手段として役立つだろう。 | ||
− | === | + | === 準備 === |
build.gradleに以下を追加する | build.gradleに以下を追加する | ||
<source lang="groovy"> | <source lang="groovy"> | ||
12行目: | 12行目: | ||
} | } | ||
</source> | </source> | ||
− | この記述によって、MANIFEST.MFにAT.cfgの配置情報が記述されるようになる。 | + | この記述によって、MANIFEST.MFにAT.cfgの配置情報が記述されるようになる。<br> |
− | + | その後、<modid>_at.cfgをsrc/main/resources/META-INF下に作成する。 | |
以上で、使用するための準備は完了である。 | 以上で、使用するための準備は完了である。 | ||
=== 書式 === | === 書式 === | ||
− | + | 一般的に正規表現風<small>(エスケープを省いている)</small>で以下に示す | |
<source lang="text"> | <source lang="text"> | ||
アクセス修飾子([+-]f)? 所属クラスパス (記述子)? | アクセス修飾子([+-]f)? 所属クラスパス (記述子)? | ||
25行目: | 25行目: | ||
+fとすることでfinal修飾子の追加、-fとすることで除去ができる。<br> | +fとすることでfinal修飾子の追加、-fとすることで除去ができる。<br> | ||
所属クラスパスには、そのフィールドやメソッドが存在するクラスの完全修飾名を指定する。<br> | 所属クラスパスには、そのフィールドやメソッドが存在するクラスの完全修飾名を指定する。<br> | ||
− | + | 記述子には、フィールドやメソッドの識別名+返り型を記述する。何も書かなかった場合にはクラス自体のアクセスが変更される。無論SRG名なのでSRG名は別途調べること。 | |
:記述子書式参考 | :記述子書式参考 | ||
:*[https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.3 JVM Spec 4.3] | :*[https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.3 JVM Spec 4.3] | ||
31行目: | 31行目: | ||
:*org.objectweb.asm.Typeのソース | :*org.objectweb.asm.Typeのソース | ||
:英語がよくわからない人はforge_at.cfgなどを参考に地道にやっていってください。 | :英語がよくわからない人はforge_at.cfgなどを参考に地道にやっていってください。 | ||
+ | <nowiki>#</nowiki>以降はコメントとして解釈されない。<br> | ||
+ | アスタリスクを用いることで全メンバを指定することもできる。 | ||
+ | |||
+ | === 反映 === | ||
+ | AT.cfgに変更したい部分を記述した後、setupDecompWorkspaceすれば開発環境のコードに反映される。 |
2017年2月22日 (水) 16:16時点における最新版
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すれば開発環境のコードに反映される。