Minecraftサーバーを動かす知識

Votifier APIで投票に対応する

投稿:  更新:  By: HimaJyun

Votifierは投票機能を実装するためのプラグインです。

Votifierはリスナープラグインを追加してはじめて効果を発揮します。ここでは、そのリスナープラグインを作るための方法を紹介します。

スポンサーリンク

プラグイン情報

Votifierは更新が停止して長く、現在はフォーク版のNuVotifierが継続して開発されているため、APIもNuVotifierの物を使用します。

プラグイン名Votifier
開発者Ichbinjoe, tuxed
フォーク元: blakeman8192, KramerC
ソースコードGitHub(NuVotifier/NuVotifier)
ライセンスGPLv3
Mavenリポジトリリンク
グループIDcom.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に掲載しているので、参考にしてみてください。