こにゃにゃちわ=^_^=
サーバーのプラグインって、割と開発に関して情報をまとめている日本人が少なく、海外のサイトを参照するしかないって謳われているんだが最近はどうやらかなりまとめている日本人も増えているようで、とても楽に書く事が出来た(中身はまだないが)。
しかし、それでも行き詰った点があったので。
そもそも、サーバー(今回はspigot鯖)のプラグインはJavaなので、IDEであるなんたらbeans,Intellij,eclipseのどれかで開発するのが定番になっているようだ。
そのうえで私は大学でeclipseを使っているので、eclipseを使って書くことにした。
という訳で、色々調べながらやってたんだけど、このサイトが一番参考になった。
プログラムの中身の部分まで丁寧に解説してあるね。
・・・という訳で、やり方についてはこのサイトのを見様見真似しただけなので完璧に端折る。
この記事は詰まった所、だけ。
〇この記事の「はまったところ」
まんま同じミスをした。しかし対処法が書いてあったのですぐに対処する事が出来た。
plugin.ymlの中に色々記述するんだけど、
main: (作成者名→)neko.AziServer(←クラス名)って記述したところ
指定されたクラスが見当たらない、と。
しかし、手順通りやるとsrc/main/javaの中にneko.azipluginってフォルダ(っていうのか?)を作ってその中にjavaファイルがあるので、
指定時にはこのazipluginの名前も入れなければならない。
よって、この場合
AziServer.javaをmain指定するのであれば
main: neko.aziplugin.AziServer
てな感じになった。
ちなみに、著者名っていうの?なんかみんなcom.xxx.xxxとかorg.xxx.xxxとかにしてたんだけど、素人の俺にはよく分からなかったので
nekoとだけ入力してある。
なので多分普通はもっと長くなるのかな。
そして詰まったのがもう一つ
〇apiがUnsupported
spigot-apiをpom.xmlで指定してコンパイルするのだが、
こんな感じになってERRORを吐いてプラグインが読み込めなかった。
APIのバージョンがあっていない?俺はちゃんと1.17.1のサーバーを動かしているのに???????って。
よく分からなくてダブルクォートを外すとか、コンパイルするために使うJDKのバージョンがいつぞやからJDK16になったらしいので、Qiitaからコピペした時の値が12だったのでそれを変えてみたりもしたが(※これは多分やらないとコンパイルできないかも)
ダメ。
海外のサイトを見ていたところ、バージョンを古いものにしてみてはどうだろう、ということでapiのバージョンを下げてみる。
このサイトに存在するapiでバージョンを指定して、色々試していたところ、1.15のapiにしたら起動した。
ちなみにこの時ちゃんとplugin.ymlのapi-versionも同じ値に変更しながら試してた。
・・・しかし、何故最新のapiが使えないのか???
そこで、
このサイトを閲覧していたところ、plugin.ymlでのapi-version指定の意味を初めて知る。
どうやら、これは「このバージョン以下のapi-versionを使ってるときは対応していない(Unsupported)としてロードさせないよ~ん」という設定らしい。
だから、この項目を削除するとプラグインが読み込めるようになった、とか言う謎現象も起きるわけだ。
実はこの項目、なくても警告(WARN)が出るだけでちゃんとロードできる。
まあ警告放置するのはあんま良くないが・・・
つまり、api-versionのロードさせないよ規制の項目であるこれは、1.15とかにしておいても別に動作場では1.17.1のapiを使っているので問題が無いという訳だ。
何で1.17/1.16指定した時にUnsupportedになるのかの意味はいまだに分からないが・・・
という訳で、最終的にはapi-version: 1.15と記述してコンパイルすれば問題なくプラグインを警告も出さずに読み込む事が出来るようになった
というお話でした。
1.13.2とかのapi使うなら1.13って記述して問題ないだろうけど、何故か1.17.1のapiを使うときは1.17指定だとエラーで読み込んでくれないので注意が必要。
恐らくこっちが何かしら不備があったとも思えないし・・・
バグだろう。うん。(安直)
という訳で、とりあえずはようやくプラグイン開発のスタートラインにこんだけ悩んだ挙句、立てたという訳で。
こんなことに詰まった、というお話でした。
0
この記事へのコメント