Votifier APIで投票に対応する
Votifierは投票機能を実装するためのプラグインです。
Votifierはリスナープラグインを追加してはじめて効果を発揮します。ここでは、そのリスナープラグインを作るための方法を紹介します。
スポンサーリンク
目次
プラグイン情報
Votifierは更新が停止して長く、現在はフォーク版のNuVotifierが継続して開発されているため、APIもNuVotifierの物を使用します。
プラグイン名 | Votifier |
---|---|
開発者 | Ichbinjoe, tuxed フォーク元: blakeman8192, KramerC |
ソースコード | GitHub(NuVotifier/NuVotifier) |
ライセンス | GPLv3 |
Mavenリポジトリ | リンク |
グループID | com.vexsoftware |
パッケージ名 | nuvotifier-universal |
執筆時バージョン | 2.6.0 |
当サイト解説 | あり |
備考 | Votifierからフォーク |
ドキュメント:
ライセンスがGPLのため注意してください。
Maven依存関係の追加
Mavenの依存関係は次の通りです。
<repositories>
<repository>
<id>bintray-repo</id>
<url>https://dl.bintray.com/ichbinjoe/public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.vexsoftware</groupId>
<artifactId>nuvotifier-universal</artifactId>
<version>2.6.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
投票を検知する
VotifierのAPIは非常にシンプルな設計になっていて、イベントの仕組みを利用してVotifierEvent
を登録するだけで動作します。
@Override
public void onEnable() {
getServer().getPluginManager().registerEvents(this, this);
}
@EventHandler
public void onVotifierEvent(VotifierEvent e) {
}
VotifierEventにはいくつか種類がありますが、使用するのはcom.vexsoftware.votifier.model.VotifierEvent
です。
VotifierEventのgetVote()
メソッドで投票結果を取得できます。
@EventHandler
public void onVotifierEvent(VotifierEvent e) {
Vote v = e.getVote();
Bukkit.broadcastMessage(v.getAddress());
Bukkit.broadcastMessage(v.getServiceName());
Bukkit.broadcastMessage(v.getTimeStamp());
Bukkit.broadcastMessage(v.getUsername());
Bukkit.broadcastMessage(String.valueOf(v.getLocalTimestamp()));
}
あとはこの情報を元にアイテムを配ったり、メッセージを表示したり、投票回数をカウントするだけです。
シンプルですが、それゆえに必要な物はすべて自分で実装する必要があります。
Stringに注意
getUsername()
で得られるユーザー名はStringです。
投票サービス側はどんなユーザー名も通知できる(存在しないユーザーでも通知できてしまう)仕様になっているため仕方のない事かも知れませんが、ユーザー名からUUIDへの変換は開発者側で実装する必要があります。
名前変更のためにもUUIDに対応することが望ましいですが、投票の仕様からユーザーがオンラインだとは限らないため一筋縄では行きません。
Bukkit.getOfflinePlayer()
を使用するとメインスレッドが停止してしまう原因になります。スレッドを利用して自分でユーザー名→UUIDへの変換を実装しなければなりません。
(この「スレッドでユーザー名→UUID変換」の処理はどんなプラグインでも頻繁に必要となる処理なので、自分的に「コレだ!」と思える方法を発明しておくと良いでしょう)
ソースコード
ソースコードはGitHubに掲載しているので、参考にしてみてください。