【Bukkit/Spigot/PaperMC】久しぶりにMinecraftサーバープラグインを作った所感

作ったもの

購入型のチェストロックプラグインを制作しました。

詳しい内容や使用法は下記リンク先に記載しています。

github.com背景

  • データベース使ったプログラムをあまり書いたことがなかった
  • 既存のチェストロックプラグインに不満があった(引退したプレイヤーの保護したチェストが邪魔になる)
  • 単純にBukkitプラグインを書きたかった

などの理由で製作するに至りました。

 

 

開発に関する話

開発段階でのプラグインのテストはDockerコンテナ上のPaperMCサーバーで行いました。Dockerを使用することでDBを含めた開発環境を素早く構築でき、PaperMC本体の更新なども容易でした。

 

DBはMySQLを使用し、プラグインからJDBCを通してSQLを実行することで操作を行いました。ORMを使うことも考えましたが、SQLの基本的な部分の勉強にもなるだろうと思い今回はSQLでの操作にしました。

 

チェストロックプラグインを一から作るとなるとそれなり量のコーディングが必要になると予想したので、全体の設計的な部分はよく考えてから行うようにしました。

 

結果的にイベントハンドリングやコマンドからDBの操作、設定ファイルの読み書きなど多くの要素を扱ってもそれぞれの独立性をある程度保つことができました。

 

 

反省

今回の制作では色々と反省した点があるのでいくつか取り上げます。

 

一つは開発言語にKotlinではなくJavaを使用してしまったことです。新たな言語への学習コストを考えて使い慣れたJavaを選択したのですが、これは判断を間違えてしまったかなと思います。

 

前述したようにコーディング量が自分にとっては少し多く時間がかかってしまったため、多少の学習コストを払ってでもJavaよりも記述量が少なくて済み現代的な機能を取り入れているKotlinを使用するべきだったと感じました。

 

実際に少し前他開発者様のKotlin製プラグインをフォークして遊んだ際、Javaに比べてコード量を大幅に削減できかつコーディングもしやすく、とても体験が良かったです。

 

 

もう一つ挙げると、開発当初からプラグイン作成用の汎用型の外部ライブラリに頼らなかったのも大きな反省点です。Bukkitプラグイン開発における多くの面倒な実装は、それを避けるために既に誰かがライブラリ化し配布してくれています。

 

今回自分はそのライブラリのリファレンスを読んでコードを書くよりも、自分で考えてコードを書く方が早いだろうという謎の誤った考えによってコマンドシステムやキャッシュなどを自力で実装してしまいました。

 

しかし制作後半の設定ファイル関連の実装が面倒で結局配布ライブラリを使用し、結局そのライブラリ内にコマンドシステムやキャッシュの実装も含まれていました。

 

最初から配布ライブラリを使用していれば制作時間を大幅に削減できていたはずなので、かなり反省しています。

 

普段プログラミングをする際は自力でコードを書くより既にあるライブラリを用いた方が良いと思っているのに、今回に限ってこのような行動をしてしまったのが本当に謎です。

 

 

その他

自分が昔サーバーを公開していた際、自分の追加したい機能ややってみたいことがあるとすぐそれを実現するためのコードを書いて動かして遊ぶのが好きでした。

 

しかし、今回プラグインを制作している際はプラグインを作ることが目的になっていて楽しいさよりも作業感を感じることが多く、昔ほどMinecraftに対する熱量がないのか、なにかものを作って遊ぶことへの興味がなくなったのか、よくわかりませんが少し悲しかったです。

 

今よりもコーディングや設計の能力、知識も乏しかったですが、昔の方が楽しんでかつ面白いものを作れていたように感じます。感性が枯れたのでしょうか。

 

 

まとめ

色々と思うところはありますが、一つのものを完成させてリリースすることができて良かったです。しばらくBukkitプラグイン制作はいいかな、という感じですが、今回学んだことを抽象化して今後の活動に役立てていきたいと思います。