見出し画像

自宅パソコンをマインクラフト・サーバーにする(2) Power Automateでサーバーを自動操作する

夏休みが近づいてきました。おもに親戚内で遊んでいるマインクラフト・サーバーも夏休みになれば、誰かはオンラインに居るのでしょう。

それを見越して夏休みの間はマインクラフトを1時間に制限したいという依頼がきました。サーバーにつながらなくなっても、シングルやマルチで遊ぶからそんなに目の敵にしなくてもと思いましたが、忖度したいと思います。

今回これを実現するために使ったのが、MicrosoftのPower Automate Desktopの無償版です。Power Automate Desktopはパソコンの操作をフローに編集することで自動でパソコンを動かすことができます。無償版は「Windows 10 以降のOS」で「Microsoft アカウント利用時」であれば使うことができます。

ただしPower Automate Desktopの無償版は以下の制約があります。

  • 指定した日時での実行や、一定のトリガーから実行することはできない

  • リモート操作でフローをコントロールできないため、外出中に実行できない

フローの起動は手動ですが、それ以降は以下のように自動化したいと思います。

  1. マインクラフト・サーバーを立ち上げる

  2. プレイヤーがログインするまで待機する

  3. ログインしたら、あいさつとログインした時間をゲーム内チャットで伝える

  4. 制限時間になったらメッセージをゲーム内チャットで伝えてマインクラフト・サーバーを終了する

2022/7/23追記:noteでPower Automateの起動をタスク スケジュールに登録する方法について説明されている記事を拝見しましたので参考にさせていただきました。

◇ Microsoft Power Automate Desktopの設定

1. フローの作成

まずは自動で動かすフローを用意します。Power Automateを立ち上げ、左上の「新しいフロー」をクリックし、フロー名に今回用意するフローの名前を決めます。今回は「夏休み用マインクラフト」にしました。

新しいフローの作成

2. アクションの設定画面

フロー内にパソコンに自動的にやってもらいたいことを順番に設定していきます。左側にあるアクションがパソコンを自動で動かす命令一覧で、これを右画面にドラッグ&ドロップしていきます。

以降は自動化する上でどのアクションを使えば良いか解説していきます。

夏休み用マインクラフトのフローの詳細

3. マインクラフト・サーバーを立ち上げる

パソコンのアプリケーションを起動するときは「システム」 -> 「アプリケーションの実行」を使います。

アクション「アプリケーションの実行」

こちらを右画面にドロップすると詳細が表示されますので以下の設定が正しく設定されていることを確認します。設定が終わりましたら「保存」をクリックして終了します。

  • アプリケーションパス:bedrock_server.exeを置いているパス

  • アプリケーション起動後:すぐに実行

アプリケーションの実行設定

起動に5秒程度かかるため「フローコントロール」 -> 「Wait」を追加して5秒待機します。

アクション「Wait」

以上の処理を組み合わせると、このようなフローとなります。

マインクラフト・サーバーを立ち上げるフロー

4. プレイヤーがログインするまで待機する

マインクラフト・サーバーが立ち上がった時間から1時間で落ちてしまいますと遊べる時間が短くなってしまいます。そこで最初のプレイヤーがマイクラサーバーにアクセスしてから1時間後に落ちるようにしたいと思います。

事前に誰かがログインしたことを示すフラグスイッチ「Login」を宣言して、初期値の0を代入します。もし誰かがログインしたら、このLoginという変数を1に変更したいと思います。変数の定義は「変数」-> 「変数の設定」で行います。

アクション「変数の設定」

こちらを右画面にドロップすると詳細設定が表示されますので以下の設定が正しく設定されていることを確認します。設定が終わりましたら「保存」をクリックして終了します。

変数の設定

この後に誰かがログインするまで待つのですが、何をもってログインしたかを判断しないといけません。マイクラサーバーでは誰かがログインすると「Player connected:」というテキストが表示されます。

マイクラサーバーにプレイヤーがログイン

今回はこれを参照したいと思います。対象Windowの文字をすべて変数に代入する「UIオートメーション」->「データ抽出」-> 「ウィンドウからデータを抽出する」を使います。

アクション「ウィンドウからデータを抽出する」

こちらを右画面にドロップすると詳細設定が表示されますので、「抽出したデータの保存場所」を「変数」にします。

ウィンドウからデータを抽出する(1)

ウィンドウの設定をする前にマイクラサーバー(bedrock_server.exe)をダブルクリックで起動します。起動した後に「ウィンドウ:」の矢印部分をクリックしますと「UI要素の追加」が出ますので、これをクリックします。

ウィンドウからデータを抽出する(2)

UI要素ピッカーが表示されますので、ウィンドウの記述の通り、マイクラサーバー(bedrock_server.exe)のウィンドウにマウスカーソルを合わせてCtrlキーを押しながら左クリックします。

UI要素ピッカー

これでマイクラサーバー(bedrock_server.exe)のウィンドウに表示された文字が変数DataFromWindowに代入されます。設定が終わりましたら「保存」をクリックして終了します。

対象ウィンドウの設定後

あまり頻度を高くするとパソコンに負荷がかかるので、10秒おきにマイクラサーバーのウィンドウからテキストをコピーして、その中に「Player connected:」が出るまで処理を繰り返したいと思います。

分岐処理は「条件」-> 「If」を使います。

アクション「If」

マイクラサーバー(bedrock_server.exe)のウィンドウに「Player connected:」が表示されているかを以下のように判定します。設定が終わりましたら「保存」をクリックして終了します。

If

この条件にあてはまる場合にはログインしたことを示すフラグスイッチ「Login」を1に更新します。設定が終わりましたら「保存」をクリックして終了します。

変数の設定(Loginの更新)

繰り返し処理は「ループ」-> 「ループ条件」を使います。

アクション「ループ条件」

繰り返し処理は「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をログアウト、シャットダウンするのも良いかもしれません。


この記事が参加している募集

#つくってみた

19,330件

この記事が気に入ったらサポートをしてみませんか?