絵を新しい世界へ運ぶ
Day3 では、古い世界で見えていた絵を、新しい版でも見えるように移し替えました。これは、画像ファイルをコピーするだけでは終わりません。
Minecraft の世界では、画像はただの画像ではなく、地図や額、表示する場所、向き、大きさと結びついています。見た目を保つには、絵そのものと、絵が置かれていた文脈を一緒に運ぶ必要があります。
地図は、画像を運ぶためのキャンバスになる
Minecraft の地図は、ふつうは地形を見るためのアイテムです。でも仕組みとしては、小さな絵を表示できるキャンバスでもあります。地図に画像を割り当て、それを世界の中に置けば、壁に絵があるように見せられます。
大きな絵は、複数の地図に分けて表示します。人間からは一枚の絵に見えていても、中では小さな地図の集合になっていることがあります。
ImageFrame は、画像を世界に貼るための道具
ImageFrame は、画像を Minecraft の世界の中に表示するためのプラグインです。画像を地図として扱い、それを額に入れて壁や床に並べることで、写真やロゴのような見た目を作れます。
古い仕組みで表示されていた絵を新しい仕組みへ移すときは、画像だけでなく、どの地図に分けるか、どの額に入れるか、どこに並べるかを合わせる必要があります。
非同期処理は、重い仕事を分ける考え方
画像を読み込み、必要な形へ変換し、地図に分け、世界へ置く。これを一度にやると、サーバの中心の処理を長く止めてしまいます。
そこで、絵を作る仕事と、世界に置く仕事を分けます。時間のかかる準備は裏側で進め、Minecraft の世界を直接さわる部分だけを短く実行する。これが Day3 で重要だった非同期処理の考え方です。
Minecraft サーバの中心になる処理の流れです。世界の状態を変える処理は、ここで短く安全に行う必要があります。長く止めると、サーバ全体が不安定になります。
Minecraft の世界が少しずつ進む単位です。サーバは短い間隔で世界を更新します。重い処理で tick が遅れると、動きが止まったり遅れたりします。
額縁と Map Item
絵を世界の中に置くときは、見た目の画像だけでなく、それを支える Minecraft 側の実体も必要です。代表的なのが 額縁 と Map Item です。
Map Item は、地図として扱われるアイテムです。画像を割り当てた地図を額縁に入れることで、壁に絵が貼られているように見えます。
位置と向きも、絵の一部
絵を移すときに必要なのは、画像データだけではありません。どの場所にあったか、どちらを向いていたか、何枚分の大きさだったか。そうした情報がそろって、はじめて元の見え方に近づきます。
だから Day3 の作業は、「画像を復元する」だけではなく、「世界の中の配置を復元する」作業でもありました。
バッチ処理とタイムアウト
たくさんの絵を一気に処理すると、サーバに負荷がかかります。そこで、処理を小さな単位に分けて、少しずつ進めます。このように、まとまった作業を順番に処理する考え方を バッチ処理 と呼びます。
また、処理が長く止まっているように見えると、サーバは異常だと判断することがあります。これが タイムアウト です。重い仕事を分けるのは、タイムアウトを避けるためでもあります。
← 技術記事の一覧へ ・ ← Day3 に戻る