【無料代替】マイクラで学ぶPDCAサイクル:Minecraft Education / MakeCode風エージェントを Paperプラグイン「twbridge」で実現(ブロック設置対応)

このブログでは以前から、「マイクラで学ぶPDCAサイクル」というテーマで環境づくりを進めています。マイクラPDCAの全体像については、こちらをご覧ください:マイクラで学ぶPDCAサイクル ー 遊びながら考える力を育てる

また、Minecraft Education / MakeCode の“無料代替”として、

  • Java版 Minecraft(Paperサーバ)
  • Scratch互換の TurboWarp
  • 両者をつなぐ Paperプラグイン「twbridge」

という構成をどう使うかについては、別記事で整理済みです。TurboWarp や MakeCode代替構成の説明はこちら:マインクラフトサーバの構築方法:子どもと学ぶためのPaperサーバ構築ガイド

今回はその続きとして、twbridgeプラグインでエージェントを操作し、ブロック設置に対応した話と、そこに至るまでの試行錯誤をまとめます。

目次

今回のバージョンv1.1.0で増えたこと:移動+ブロック設置

前回の記事で実現していたのは、おおまかにいうと次のような機能でした。

  • TurboWarp から WebSocket 経由で Paperサーバに接続 / 切断
  • /say などのサーバコマンドを送信するブロック
  • プレイヤーの足元にエージェントをスポーンするブロック
  • エージェントを消す(デスポーン)ブロック

つまり、「とりあえずエージェントを呼び出して、存在させる」ところまでだけでした。
「twbridge」v1.1.0でようやく次の機能が追加できました。

  • エージェントを移動
  • エージェントの方向転換
  • エージェントにアイテムスロットの追加
  • エージェントに手持ちのブロックを置かせる

これで、最低限エージェントにワールドで建築させることができるようになりました。

エージェントにブロックを置かせるまでの試行錯誤

最初は、ブロック設置について次のように考えていました。

  1. TurboWarp から twbridge に WebSocket 接続
  2. Paper側で「設置可能なブロック一覧」を生成
  3. その一覧を JSON で TurboWarp に送る
  4. TurboWarp の拡張が、それをもとにブロックメニューを動的に構築

こうすれば、

  • サーババージョンが変わっても自動で追従
  • プラグインで追加されるブロックも拾える

と、とても良さそうに見えました。

しかし実際にやってみると、

  • ブロック数が多すぎてメニューが重い
  • TurboWarpの拡張として、読み込み後に大規模なメニュー差し替えを行うのは相性が良くない
  • ブロック一覧の影響でコードブロックの表示が崩れたり、そもそも表示されなかったりする

など、なかなか実用的なところまでたどり着きませんでした。

Scratch / TurboWarp 側の思想としては、

「拡張は読み込み時に定義され、その後はあまり書き換えない」

が自然で、サーバの状態に合わせてあとからブロック定義を大きく書き換えるのは、やはり無理があった、という結論になりました。

最終的に取ったアプローチ:Paper側で生成してJSに静的埋め込み

そこで v1.1.0 では、発想を切り替えました。

  • WebSocketでブロックリストを送るのをやめる
  • twbridge(Paperプラグイン)が有効化されたタイミングで、設置可能なブロック一覧をサーバ側で一度だけ生成
  • その結果を、TurboWarp用カスタムJSの「ブロックメニュー定義部分」に静的埋め込みする

という方式です。

流れとしてはこんな感じになります。

  1. Paperサーバ起動 → twbridge の onEnable() が呼ばれる
  2. Bukkit の Material 列挙から、isBlock() かつ設置対象として妥当なものを抽出
  3. それを [“minecraft:stone","minecraft:dirt", …] の配列リテラルに変換
  4. twbridge.js テンプレート内の __PLACEABLE_BLOCKS__ プレースホルダを、その配列で置換
  5. 生成された twbridge.js を、twbridge が提供する簡易HTTPサーバから配信
  6. TurboWarp側では、この twbridge.js を拡張として読み込むだけ

TurboWarpから見ると、

「最初からブロックメニューが決まっている拡張」

にしか見えないため、UIも安定して動きます。
ブロック設置の実行そのものは、従来どおり

  • TurboWarp → WebSocket で設置リクエスト送信
  • twbridge → Paper API でブロック設置

という流れです。

エージェントでブロックを設置

前記事からの差分としてまとめると、以下となります。

項目 前回記事時点 v1.1.0(今回)
エージェントスポーン 対応済み 仕様維持
エージェント移動 未対応(その場に立っているだけ) 前後左右・上下、テレポートなどに対応
(※上下移動はv1.1.1で追加しました)
ブロック設置 未対応 メニューからブロックを選んで設置可能
ブロックリストの扱い そもそも未実装 Paper側で生成 → TurboWarp JS に埋め込み

今後の課題とアップデートの方向性

今回のアップデートで、「エージェントを動かし、ブロックを置かせるところまで一通り回せる」 基本的な動きができるようになったと思っています。

ただ、その一方で新しい課題も見えてきました。

  • ブロックの種類が多く、メニューから選ぶだけではしんどい
  • ワールドやユーザごとに「置いてよいブロック」を変える仕組みがない

今後は、例えば次のような方向で手を入れていきたいと考えています。

  • ブロックの選択を、もっと簡単・直感的にできるようにする
  • 壁や床を作るといったプリセット動作をエージェントに持たせる
  • エージェントにアイテムを拾わせたり、捨てさせたりできるようにする

こうした改善案については、実際に子どもと一緒に使ってもらいながら試していき、また PDCA を回しつつ twbridge 自体も育てていくつもりです。

まとめ

本記事では、Paperプラグイン「twbridge」を v1.1.0 にアップデートし、

  • エージェントの移動
  • エージェントの方向転換
  • エージェントのアイテムスロット追加
  • 手持ちブロックの設置

に対応させるまでの流れと、ブロックリスト周りの試行錯誤について紹介しました。

前回の「スポーンだけできるエージェント」から一歩進んで、
「エージェントを動かしてブロックを置かせる」ところまで一通り回せる状態になったことで、

  • Minecraft Education / MakeCode のエージェント体験に近づいた
  • マイクラでPDCAサイクルを回す際の「Do(実行)」部分を、エージェントにも任せられるようになった

という意味で、今回のアップデートはそれなりに大きな節目になったと感じています。

まだ、

  • ブロック選択のしんどさ
  • 置いて良いブロックの制御

など課題は残っていますが、ここから先は実際のプレイと学習シーンの中で育てていく段階です。

引き続き、子どもとのマイクラPDCA実践の中で得られたフィードバックを twbridge に反映しつつ、
「Education / MakeCode を契約しなくても、似た学び方ができる環境」 を少しずつ形にしていければと思います。