純規の暇人趣味ブログ

首を突っ込んで足を洗う

[Bukkit/Spigot]別世界への移動時に/titleを表示するプラグイン作った

      2016/11/16    HimaJyun

こん、マイクラ鯖缶の@HimaJyunです。
我がAMiTサーバは十中八九……ではなく、(現段階で)30中の10プラグインが自作です。

機能が気に入らなかったり、エラーが出たり、思い付きだったりでプラグインを作っていたらこうなりました。
今回はその中でも個人的に良いなと思っている「ThisWorld」をご紹介します。

特徴

今回ご紹介する「ThisWorld(この世界)」は、ユーザが別の世界に移動した際に、Minecraft 1.8から追加された/titleコマンドの様なメッセージを表示するプラグインです。

AMiTサーバでは「ふえぇ……資源マップどれぇ(´;ω;`)」と、自分が移動した先の世界が資源ワールドか否かが分かっていない方がチラホラ居たために開発されました。

参考までに、以下の様な機能が実装されています。

  • /titleコマンド風の出力(+アクションバー)
  • 表示時間の変更も可能
  • 色コード対応(&~で指定出来ます)
  • ユーザが別世界に移動した際に、設定したタイトルを表示
  • ワールド単位で設定可能(もちろん表示のないワールドもおk)

これを使う事で、ユーザの方々に移動先の世界を確実に伝える事が可能です。

/titleコマンド風の出力

これが今回ご紹介するプラグインの最大の特徴です。

実際の様子はその目で確かめて頂くのが手っ取り早いと思いますが、異なる世界に移動した際に設定したタイトルを表示出来ます。

参考までに画像です。
bukkit-thisworld-001

(どうでも良いですが、Bukkitは普通の手法では/titleと同じ事は出来ないので、少し特殊な手法で実現しています。)

表示時間の変更も可能

/titleコマンドは「/title <ユーザ名> times ..., etc.」と言った具合のコマンドでフェードイン、フェードアウト、表示時間の変更が可能なのですが、別のサーバに移ってもリセットされないと言う大きな罠があります。

例えばですが、ユーザがミニゲームサーバなどに入ったとして、ミニゲームで/titleコマンドを使用するので表示時間を変更……、と言った出来事があり、その後に自分のサーバに来た場合でもその変更された表示時間がリセットされません。

実際にこの機能を付ける前にあった出来事として「表示されている文字が消えません!!」と言う質問を受けた事があります。

この場合マイクラを再起動すればリセットされるため、再起動する様に促したのですが、イチイチ再起動するのはとても面倒です。

そのため、このプラグインでは、ユーザのログイン時やコマンドを実行する事で表示時間を再設定出来ます。

色コード対応

先程の画像を見て頂ければお分かりだと思いますが、色コードでの設定に対応しています。

色コードとは何か?、ggrks色コードはマインクラフト内でのチャットなどで文字を装飾するために扱う記号です。

マインクラフトでは本来、「§(セクション)」を用いて表すのですが、多くのプラグインでは「&(アンパサンド)」で設定出来る様になっています。

もちろん、このプラグインも「&」で設定する事が出来ます。

色の変更だけではありませんよ、Minecraftの色コードで出来る事であれば一通り可能です。(例えば太字とか)

別世界に移動した際に表示

このプラグインでは、内部でユーザが別世界に移動した事を検出して表示しています。

そのため、/home系のプラグインやワープゲート作成プラグイン、ネザーゲートやエンドポータルなど、如何なる機能に依って生じた世界の移動でも対応出来ます。

ワールド単位で設定可能

このプラグインでは、割と簡単な設定で世界別に表示する文字を自由に設定可能です。
例えば、「マルバツシティ」や「PVP会場」、「幻想郷」なども設定可能です。

もちろん、何も表示しない世界を設定する事も可能です。
加えて、タイトルだけ、サブタイトルだけ、と言った設定も可能です。

使い方

  1. ThisWorldをダウンロード
  2. pluginsに入れて起動
  3. 設定変更後、リロード

Spigot 1.8.8~での動作を確認しています。
1.8から追加された機能を利用しているため、1.7以前では動きません

設定変更

少し設定項目が多いですが、内容は至ってシンプルです。
デフォルトでは以下の様なconfig.ymlを書きだします。

Messages:
  Dont_Have_Permission: "&cYou don't have permission."
  Not_Available: "&cNot available in this world."
  Config_Reloaded: "&aConfig has been reloaded."
  Fixed: "&aWas fixed display time."
  Help:
    Help: "Show this help."
    Show: "Show title of this world."
    Fix: "Fix display time."
    Reload: "Reload config file."

FixTitleTime:
# Will fix the display time of Title at the time of login of the player.
# It provides fixes in command even when it is set to false.
  Enable: true
# In seconds...
  Fadein: 0.5
  Show: 1.75
  Fadeout: 0.5

Worlds:
  world:
    title: "&2World"
  world_nether:
    title: "&cNether"
    subtitle: "world_nether"
  world_the_end:
    title: "&8The End"
    subtitle: "&kworld_the_end"
    actionbar: "vs EnderDragon"
# Syntax ------>
#  world_name:
#    title: "maintitle message."
#    subtitle: "&c&o&l&o&r&c&o&d&e subtitle message.(&&escape is &&)"
# <------ Syntax
# Color code is lowercase.

「Message」はコマンド利用時に出力されるメッセージです。

「FixTitleTime」は表示時間の修正機能です。
Enableがtrueの場合はログイン時に修正します(true推奨、falseでもコマンドで修正可能)

「Worlds」が実際に表示する世界とタイトルの設定です。
タイトルだけ、サブタイトルだけも可能です。

日本語版は以下の設定です。

Messages:
  Dont_Have_Permission: "&cあなたには権限がありません......"
  Not_Available: "&cこの世界では使えません!!"
  Config_Reloaded: "&a設定ファイルがリロードされました!!"
  Fixed: "&a表示時間が修正されました"
  Help:
    Help: "このヘルプを表示します。"
    Show: "この世界のタイトルを表示します。"
    Fix: "表示時間を修正します。"
    Reload: "設定ファイルをリロードします。"

FixTitleTime:
# trueの場合はログイン時に/titleの表示時間を修正します。
# falseの場合でも/tw fixコマンドで修正可能です。
  Enable: true
# /titleの表示時間を設定します、秒単位で指定して下さい。
  Fadein: 0.5
  Show: 1.75
  Fadeout: 0.5

Worlds:
  world:
    title: "&2World"
  world_nether:
    title: "&cNether"
    subtitle: "world_nether"
  world_the_end:
    title: "&8The End"
    subtitle: "&kworld_the_end"
    actionbar: "vs EnderDragon"
# 構文 ------>
#  世界の名前:
#    title: "メインタイトル"
#    subtitle: "サブタイトル"
# <------ 構文
# カラーコードは小文字で指定してください。
# 例:&c&o&l&o&r&c&o&d&e
# エスケープは&&です、&&eと指定した場合&eと表示されます。

日本語も利用できますが、文字コードに気を付けて下さい。
(Windows->Shift-JIS,*nix->UTF-8)

設定を変更したらサーバを再起動するか、「/tw reload」コマンドを利用して下さい。
(リロードは不完全かも知れないので、可能であれば再起動がおススメです。)

コマンド&パーミッション

コマンドは「/thisworld」ですが、短縮(別名)として「/tw」でも利用可能です。

コマンド パーミッション 説明 デフォルト
/tw help N/A コマンドの使い方を表示します。 全員
/tw show thisworld.show 今いる世界のタイトルを表示します。 全員
/tw  fix thisworld.fix 表示時間を修正します。 全員
/tw reload thisworld.reload プラグイン設定をリロードします。 OP
N/A thisworld.* 上記全ての権限を含みます。 なし

基本的にユーザのアクションに応じて機能するプラグインのため、コマンドは滅多に使う事が無いです。

このプラグインを使う事で世界別にメッセージを表示する事が出来るため、ユーザの方々も今どの世界に居るのかが分かるため、個人的にはとてもおススメです。

ぜひ使ってみて下さい。

 - サーバ運営 ,