AwAlog

めもちょー

@Mod アノテーションメモ

| Comments

Modのメインクラスに付けるアノテーションの解説とか。実はmodid以外はなくてもいける。

@Modアノテーションについて

FMF645 現在、以下の項目が設定可能です。

String modid
String name default ""
String version default ""
String dependencies default ""
boolean useMetadata default false
String acceptedMinecraftVersions default ""
String bukkitPlugin default ""
String modExclusionList default ""
String certificateFingerprint default ""
String modLanguage default "java"
String asmHookClass default ""

簡単な解説をしてみます。

@Modアノテーション 各項目の簡単な解説

詳しくは @Mod アノテーションの JavaDoc に書いてあるのでさわりだけ。過度な期待はうんたらかんたら。

解説というよりは自分用の備忘録。

String modid

mod の識別子です。

ユニーク値かつ必須。mcmod.info の解説でやったので省略。

String name default “”

mod の名前です。

mcmod.info の値より優先度は低いみたいです。mcmod.info用意しているなら不要だと思います。

String version default “”

modのバージョンです。

mcmod.info の値とは別の内部的なバージョン値です。

依存チェックで使うバージョンのことも考えると

メジャー.マイナー.ビルドナンバー.リビジョン

みたいなような指定にするのが無難だと思います。

このバージョンは version.properties からも設定できますが、アノテーションで指定したほうが優先度が高いようで、アノテーションに設定しちゃうと version.properties は無視されます。

version.properties を使うなら設定不要です。

String dependencies default “”

依存関係指定用の文字列の設定用。

javadocにも書いてあるように、RML (ModLoader) の BaseMod の getPriorities() を参照してください、とのことです。具体的には、require-before:mod-name とかって感じで設定する奴です。触ったことある人はあまりいない気がしますが。

確か最近の RML の javadoc にはこのあたりの仕様が記載されていないので、さらにわけわかめです。古いRMLの javadoc を探せば見つかると思います。

…思いますが、そんなもの漁るくらいなら mcmod.info なりメタデータなりで指定した方が楽だし、バージョンでのチェックもできるのでオススメ。この文字列のパース機能は、BaseMod互換にするために残ってる機能みたいなもんだと思います。

boolean useMetadata default false

MetaData クラスを使用する場合 true に設定します。

この値を true にすると、mcmod.info の依存関係のチェック用の情報をクリアします。mcmod.info で useDependencyInformation を true にしても無視されます。

この設定は、Mod.Metadata アノテーションを利用するための設定なんじゃないかなーと思います。mcmod.infoは外部ファイルなので改変される可能性があるから、そのための制約なのではないかと。ちゃんと調べてないですが。

String acceptedMinecraftVersions default “”

許可するMinecraftのバージョンを設定します。

通常設定する必要はないです。が、あえて過去ver専用のmodなどを作製する場合は、こいつを指定しておくといいかもしれないです。バージョン指定の書式はきちんと把握仕切れていないので、調べた時にでも書こうと思います。たぶん。

簡単に具体例を上げておくと

acceptedMinecraftVersions = "[1.5,)"

これで1.5.x 以降のマイクラでのみ実行できる、って指定になります。たぶん。

別にこれ、FML固有の書式ではなかったと思うので、検索すれば見つかると思います。Apache commons 関連のドキュメントだかで見た記憶があるような、ないような…。

String bukkitPlugin default “”

BukkitプラグインからロードされるためのプラグインのFQDNを設定します。

…だと思いますがちゃんと調べてないので省略。必要になったら調べるかもしれないですが、当面は必要ないかなーと…。

String modExclusionList default “”

カンマ区切りでmodidを記述し、他modとの共存可否の設定を行えます。

ようは拒否リストです。「貴方とは一緒に導入できないの」ってなるような設定をします。

競合するからこのmodとは一緒に使えないよ、とか、(作者の意向として、)このModとは共存させたくないよ、ってModがある場合などに利用します。競合することがわかってる場合に事前に回避したり、modが想定している難易度を崩してしまうような別のmodが導入されることを認めない、みたいな感じに使うものだと思います。

許可不許可を決める記号(+/–)を付与した modid をカンマ区切りで複数指定できます。許可する mod は modid の先頭に「+」、許可しない mod は先頭に「-」を指定します。modid の代わりに、すべての Mod を意味するワイルドカード「*」と、forge を意味するエイリアス「f」が使えます。何も指定しない場合は、全て許可「+*」と同じです。

String certificateFingerprint default “”

署名された jar を要求するようにするための設定。全て小文字で : が削除されたSHA-1の文字列。

デフォルトでは署名された jar を要求しません。

これはちょっとややこしいので省略。必要な人は自前で調べてください。

mod を jar ファイルとしてリリースして META-INF/ を同梱して署名を用意し、クラスファイルの破損や改変がないことをチェックしたりとか、そういうやつです(たぶん)。

本当はこの手のものは、開発者側がちゃんと理解して使用していくべきなんでしょうが、いろいろと敷居高い感がいなめない。それに、ユーザーもそういうの意識できる人って少ないですしね。

String modLanguage default “java”

mod を作製する際に用いられた言語の設定。

日本語とかそういう「言語」ではなく、「プログラミング言語」です。”java” 以外に “scala” が指定できます。バイトコード変換時に必要になってくるんだと思います。

まぁ scala で mod 作る好きものな人は説明しなくてもわかるはずなので省略。

String asmHookClass default “”

この mod からロードされるクラスに ASM を適用するための、フッククラスの FQDN を指定します。

たぶん簡易的な coremod 設定みたいな感じです。そういうことやるコア層に説明は不要だろうって事で省略。

結局@Modには何を指定すればいいの?

modid は必須です。それ以外は全部オプションです。つまりはそういうことです。

共存させたくない mod がある場合や、マイクラのバージョンを限定したい場合を除けば、普通は modid だけ指定すればOKでしょう。他の値のうちユーザーに伝える情報として重要になるものは mcmod.info と version.properties で指定ができるため、わざわざソースコード内ハードコードしておく必要はないとおもいます。


しかし改めてみてみると、すごい充実してる。FMLヤバい。

Comments