自宅パソコンをマインクラフト・サーバーにする(2) Power Automateでサーバーを自動操作する
夏休みが近づいてきました。おもに親戚内で遊んでいるマインクラフト・サーバーも夏休みになれば、誰かはオンラインに居るのでしょう。
それを見越して夏休みの間はマインクラフトを1時間に制限したいという依頼がきました。サーバーにつながらなくなっても、シングルやマルチで遊ぶからそんなに目の敵にしなくてもと思いましたが、忖度したいと思います。
今回これを実現するために使ったのが、MicrosoftのPower Automate Desktopの無償版です。Power Automate Desktopはパソコンの操作をフローに編集することで自動でパソコンを動かすことができます。無償版は「Windows 10 以降のOS」で「Microsoft アカウント利用時」であれば使うことができます。
ただしPower Automate Desktopの無償版は以下の制約があります。
指定した日時での実行や、一定のトリガーから実行することはできない
リモート操作でフローをコントロールできないため、外出中に実行できない
フローの起動は手動ですが、それ以降は以下のように自動化したいと思います。
マインクラフト・サーバーを立ち上げる
プレイヤーがログインするまで待機する
ログインしたら、あいさつとログインした時間をゲーム内チャットで伝える
制限時間になったらメッセージをゲーム内チャットで伝えてマインクラフト・サーバーを終了する
2022/7/23追記:noteでPower Automateの起動をタスク スケジュールに登録する方法について説明されている記事を拝見しましたので参考にさせていただきました。
◇ Microsoft Power Automate Desktopの設定
1. フローの作成
まずは自動で動かすフローを用意します。Power Automateを立ち上げ、左上の「新しいフロー」をクリックし、フロー名に今回用意するフローの名前を決めます。今回は「夏休み用マインクラフト」にしました。
2. アクションの設定画面
フロー内にパソコンに自動的にやってもらいたいことを順番に設定していきます。左側にあるアクションがパソコンを自動で動かす命令一覧で、これを右画面にドラッグ&ドロップしていきます。
以降は自動化する上でどのアクションを使えば良いか解説していきます。
3. マインクラフト・サーバーを立ち上げる
パソコンのアプリケーションを起動するときは「システム」 -> 「アプリケーションの実行」を使います。
こちらを右画面にドロップすると詳細が表示されますので以下の設定が正しく設定されていることを確認します。設定が終わりましたら「保存」をクリックして終了します。
アプリケーションパス:bedrock_server.exeを置いているパス
アプリケーション起動後:すぐに実行
起動に5秒程度かかるため「フローコントロール」 -> 「Wait」を追加して5秒待機します。
以上の処理を組み合わせると、このようなフローとなります。
4. プレイヤーがログインするまで待機する
マインクラフト・サーバーが立ち上がった時間から1時間で落ちてしまいますと遊べる時間が短くなってしまいます。そこで最初のプレイヤーがマイクラサーバーにアクセスしてから1時間後に落ちるようにしたいと思います。
事前に誰かがログインしたことを示すフラグスイッチ「Login」を宣言して、初期値の0を代入します。もし誰かがログインしたら、このLoginという変数を1に変更したいと思います。変数の定義は「変数」-> 「変数の設定」で行います。
こちらを右画面にドロップすると詳細設定が表示されますので以下の設定が正しく設定されていることを確認します。設定が終わりましたら「保存」をクリックして終了します。
この後に誰かがログインするまで待つのですが、何をもってログインしたかを判断しないといけません。マイクラサーバーでは誰かがログインすると「Player connected:」というテキストが表示されます。
今回はこれを参照したいと思います。対象Windowの文字をすべて変数に代入する「UIオートメーション」->「データ抽出」-> 「ウィンドウからデータを抽出する」を使います。
こちらを右画面にドロップすると詳細設定が表示されますので、「抽出したデータの保存場所」を「変数」にします。
ウィンドウの設定をする前にマイクラサーバー(bedrock_server.exe)をダブルクリックで起動します。起動した後に「ウィンドウ:」の矢印部分をクリックしますと「UI要素の追加」が出ますので、これをクリックします。
UI要素ピッカーが表示されますので、ウィンドウの記述の通り、マイクラサーバー(bedrock_server.exe)のウィンドウにマウスカーソルを合わせてCtrlキーを押しながら左クリックします。
これでマイクラサーバー(bedrock_server.exe)のウィンドウに表示された文字が変数DataFromWindowに代入されます。設定が終わりましたら「保存」をクリックして終了します。
あまり頻度を高くするとパソコンに負荷がかかるので、10秒おきにマイクラサーバーのウィンドウからテキストをコピーして、その中に「Player connected:」が出るまで処理を繰り返したいと思います。
分岐処理は「条件」-> 「If」を使います。
マイクラサーバー(bedrock_server.exe)のウィンドウに「Player connected:」が表示されているかを以下のように判定します。設定が終わりましたら「保存」をクリックして終了します。
この条件にあてはまる場合にはログインしたことを示すフラグスイッチ「Login」を1に更新します。設定が終わりましたら「保存」をクリックして終了します。
繰り返し処理は「ループ」-> 「ループ条件」を使います。
繰り返し処理は「Player connected:」の文字列が見つかるまでとします。つまりログインしたことを示すフラグスイッチ「Login」が0の間は繰り返しを継続します。設定が終わりましたら「保存」をクリックして終了します。
以上の処理を組み合わせると、このようなフローとなります。
5. ログインしたらあいさつとログインした時間をゲーム内チャットで伝える
マイクラサーバーからメッセージをプレイヤーに一斉送信するときはマイクラサーバー(bedrock_server.exe)のウィンドウにsay <message>を入力します。指定のUI要素に文字を入力するときは「マウスとキーボード」-> 「キーの送信」を使います。
キーの送信先はUI要素とします。UI要素は「ウィンドウからデータを抽出する」でUI要素ピッカーを使ってマイクラサーバー(bedrock_server.exe)のウィンドウを登録しましたので、こちらを使います。送信するテキストに入力する文字を記載します。「マインクラフト・サーバーにようこそ!」と送信するため、文末にEnterキー{Return}を追加します。設定が終わりましたら「保存」をクリックして終了します。
実際にマインクラフトサーバーにアクセスしてメッセージを確認しますと、左上にマイクラサーバーからのメッセージが表示されました。
現在の時間は「日時」-> 「現在の日時を取得します」を使います。
このフローが実行されたときの日時を変数StartTimeに保存します。設定が終わりましたら「保存」をクリックして終了します。
いつマインクラフトを始めたか表示したいと思います。メッセージの表示は先ほどと同様にキー送信です。しかし今回は文字列だけでなく、前のフローで求めたStartTimeに持っている現在の日時を表示したいと思います。変数を表示する場合には変数名の前後に%を入れます。設定が終わりましたら「保存」をクリックして終了します。
以上の処理を組み合わせると、このようなフローとなります。
6. 制限時間になったらメッセージをゲーム内チャットで伝えてマインクラフト・サーバーを終了する
ここでは新しいアクションは使っていませんので流れを書きます。
50分後に「残り10分で今日のマインクラフトは終わりです。安全な場所に戻ってください!」とアナウンスをする
10分後に「あと60秒でサーバーが自動的に終了します。」とアナウンスをする
1分後に「それでは、また明日待っています!」とアナウンスをする
10秒後にマインクラフト・サーバーを終了する
なおマイクラサーバーを安全に落とすにはマイクラサーバー(bedrock_server.exe)のウィンドウにstopを入力します。
以上の処理を組み合わせると、このようなフローとなります。
完成しましたら実行ボタンを押して動作確認してみましょう。
これをベースにサーバーを終了するだけでなくWindowsをログアウト、シャットダウンするのも良いかもしれません。