【Minecraft JE 1.15.1】サーバーに初回ログインかどうか調べる方法

minecraft

とある小さなサーバーを設置しているのですが、初回ログインした時のみサーバーの説明をするチュートリアルを行いたいと思い、初ログインかどうかを調べる仕組みを考えました。

今回はチュートリアルはおいといて、初回ログインかそうでないかを判定する仕組みだけご紹介します。
scoreboadコマンドを使用するのですが、結構はまりました。

scoreboadコマンドのWikiはこちら

以前にログインしたことがあるかをメモするscoreboadを作成する

まず、以前にログインしたことがあるかをメモするscoreboadを作成します。名前は何でもいいのですがloginflagとします。コマンドはこんな感じ。

/scoreboard objectives add loginflag minecraft.custom:minecraft.leave_game

このコマンドは1回実行すればいいだけなので、コンソールで実行すればOK。

minecraft.custom:minecraft.leave_gameというのは「セーブしてタイトルにもどる」ボタンを押した回数です。つまり、ユーザーがサーバーから離れる時に加算されます。

scoreboadでは上記のように指定すれば、統計情報を参照することができます。統計情報の詳細はこちら

作成したscoreboadの初期化をする

scoreboadは初めてそのスコアにアクセスした時に、各ユーザーごとにスコアが作成されるようです。なので、初回ログイン直後にはユーザー初回ログインユーザーにloginflagは作成されていません。(ここにはまりました…)

そこで、おまじないだと思ってリピートコマンドブロックをひとつ用意します。こんな感じ。

loginflagに0を足しています。
これによって、今までにloginflagが作成されていない場合はloginflagに0が設定され、以前作られたことがある場合は以前の値に0が加算されます。

初回ログインの判定

初回ログインの判定は、リピートブロックとチェーンブロックを使います。並べ方はこんな感じ。三角の向きに気を付けてください。

まずはリピートブロックのコマンド設定

/execute as @a[scores={loginflag=0}] run tellraw @a ["",{"selector":"@s"},{"text":"さんはじめまして!"}] 

次にチェーンブロック

/scoreboard players add @a[scores={loginflag=0}] loginflag 1

loginflagを0のままにしておくと、「はじめまして!」 「はじめまして!」 「はじめまして!」 と何度も表示されてうるさいので、loginflagに1を加算して1にします。

2回目以降のログインの判定

2回目以降のログイン判定用にもリピートブロックとチェーンブロックを使います。並べ方は先ほどと同じ。

初回ログイン後の退出時に自動的にloginflagが1増えているはずなので、2回目のログイン時にはloginflagは2になっています。なので、リピートブロックに設定するコマンドはこんな感じ。

/execute as @a[scores={loginflag=2..}] run tellraw @a ["",{"selector":"@s"},{"text":"さんがまた来たよ"}]

先ほどと同様にこのままではうるさいのでloginflagを1にします。

/scoreboard players set @a[scores={loginflag=2..}] loginflag 1

これで終了。やってみます。一度ログアウトしてログインすると…

できました。
この判定方法を使って次回は初回ログイン時のみチュートリアルに誘導する仕組みを作ってみます!

コメント

タイトルとURLをコピーしました