とある小さなサーバーを設置しているのですが、初回ログインした時のみサーバーの説明をするチュートリアルを行いたいと思い、初ログインかどうかを調べる仕組みを考えました。
今回はチュートリアルはおいといて、初回ログインかそうでないかを判定する仕組みだけご紹介します。
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
これで終了。やってみます。一度ログアウトしてログインすると…

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