マイクラ統合版のコマンドで
ログイン処理=プレイヤーがログインした時に毎回必ず行いたい処理
を作ります。
使い道は主に、ログインしたプレイヤーの「ログイン場所指定」「設定やモードの強制変更」など。なお、マルチプレイ時にもログインした瞬間のプレイヤーだけをターゲットにコマンド群を実行することが出来ます。
ログインした瞬間のプレイヤーをターゲットに指定する
まずはログインした瞬間のプレイヤーだけをターゲットに指定するための準備をします。
ログインした瞬間のプレイヤーを識別する
ログインしたプレイヤーを識別するためのコマンドブロックを設定していきます。
なお、最初のリピートコマブロを「動力が必要」に設定しているのは、レバーのONOFFで簡単にログイン処理の有無を切り替えるためです。
【リピート/動力が必要】
/scoreboard players add @a login 0
↓
(ここに各種処理を追加)
↓
【チェーン/常時実行】
/scoreboard objectives remove login
↓
【チェーン/常時実行】
/scoreboard objectives add login dummy
↓
【チェーン/常時実行】
/scoreboard players set @a login 1
解説
理解しやすいように後半3つのコマブロから説明します。
後半3つでは
・スコアボード「login」オブジェクトを削除
・スコアボード「login」オブジェクトを作成
・全てのプレイヤーの「login」スコアに「1」をセット
を繰り返しています。
これにより、ログイン後の全てのプレイヤーは常に「login=1」の状態にキープされます。
また「login」オブジェクトを毎回削除することによってログアウトしたプレイヤーのloginスコアも削除することが出来ます。
【注意】
スコアオブジェクトを維持しているとログアウトしたプレイヤーのスコアも記録された状態で残ってしまい、再ログインした時に値を持った状態で復帰してしまいます。
そのうえで、最初のリピートのコマブロでは常に
・全てのプレイヤーの「login」スコアに「+0」
を繰り返します。
これにより、ログインした瞬間のプレイヤーは値を持っていない状態に0を足すため「login=0」。すでにログインしていたプレイヤーは「login=1」に0を足すため「login=1」でキープ。
結果、(ここに各種処理を追加)の位置ではセレクター「score={login=0}」を使用することでログインしたプレイヤーだけをターゲットにコマンドを実行することが出来るようになります。
ログイン処理の例
ログイン時に必要な処理はワールドの内容によって変わります。ここでは例として、筆者が公開している無料配布ワールドで使用したことのあるコマンドをいくつか紹介します。
使用時はコマブロを(ここに各種処理を追加)の位置に配置してください。
ログインTP(スポーンポイント指定)
ログイン時は必ずここにスポーンする、というポイントへTPさせます。
【チェーン/常時実行】
/execute as @a[scores={login=0}] at @s run tp @s 33 0 -25 180 0
(X、Y、Z)のあとは(水平角,垂直角)でプレイヤーの向きも指定できます。
※例文中の座標は仮の値です。
※/tp @a[scores={login=0}] (座標)も同じ効果です。
ログイン時アドベンチャーモード
ログインしたプレイヤーを必ずアドベンチャーモードにします。
【チェーン/常時実行】
/execute as @a[scores={login=0}] run gamemode a @s
※/gamemode a @a[scores={login=0}] も同じ効果です。
ログイン時持ち物削除
ログインしたプレイヤーのインベントリを空にします。
【チェーン/常時実行】
/execute as @a[scores={login=0}] run clear @s
※/clear @a[scores={login=0}] も同じ効果です。
その他設定維持
ゲーム設定はワールドデータと共に保存されていますが、不意に変わってしまうことがあります。(マルチの誰かが変更したまま戻し忘れた/Realmsにアップロードしたタイミングで設定が変わってしまった等)
必ず維持したいゲーム設定をログイン処理に書き込むことで、不意のゲームルール変更に備えることが出来ます。
【チェーン/常時実行】
/execute if entity @a[scores={login=0}] run gamerule sendcommandfeedback false
上記はコマンドブロックのログの表示をキャンセルする設定です。
「/execute if entity @a[scores={login=0}] run」までの部分が「ログインスコア=0のプレイヤーがいるとき」という意味なので、その後に続く部分を他の設定操作コマンドに挿し替えることでいろいろと応用が出来ます。
・gamerule sendcommandfeedback false = コマンドの実行ログ表示無効
・domobloot false = モブのアイテムドロップ無効
・gamerule dotiledrops false = ブロックのエンティティドロップ無効
など、ワールドの内容に合わせて設定してください。
これらのコマンドブロックを全て先頭のリピートコマンドからチェーンで繋ぐことで一連のログイン処理として機能します。