【マインクラフト（統合版）】Websocketサーバーを使って「ホバーユニット（＋ライフルキャノン）」を作ってみました

# はじめに

今回のアイテムはＧシリーズでのとあるモビルスーツのバックパックを参考に３Ｄ風の２Ｄでアレンジしています。
マインクラフトのキャラクターは元々等身が低いので、「ファンネルユニット」実装時と同じようにＳＤ風に仕上がりました。

<img src="https://socket-manager.github.io/document/minecraft-contents/img/hover-unit/equipment.png" height="333px" width="500px" />

:::note info
このアイテムはオフハンド専用装備なので、他のアイテムと組み合わせて使います。今回の実装に合わせてライフルも追加実装しています。
:::

https://qiita.com/glasses_seven/items/129d40545884750e4e78/


# 動作環境

<dl>
    <dt>プラットフォーム</dt>
    <dd>Windows10</dd>
    <dt>マインクラフト（統合版）</dt>
    <dd>Bedrock Edition v1.21.71</dd>
    <dt>socket-manager</dt>
    <dd>v1.14.1</dd>
    <dt>言語</dt>
    <dd>PHP v8.2.4（v8.1.0以降）</dd>
</dl>


# オフハンド装備の効果

ホバーユニットはメインハンド装備の特定アイテム（ファンネルユニット、ライフルキャノン）にＮジャマーの影響を与えて性能を向上させます。
例えばライフルキャノンの場合は砲弾を発射しますが、ホバーユニットの有り無しで以下のように変化します。

▼ホバーユニット無しの時
<img src="https://socket-manager.github.io/document/minecraft-contents/img/hover-unit/hover-none.gif" height="333px" width="500px" />

▼ホバーユニット有りの時
<img src="https://socket-manager.github.io/document/minecraft-contents/img/hover-unit/hover-have.gif" height="333px" width="500px" />

動画データが間引きされているので少しわかりにくいですが、砲弾と爆発がひとまわり大きくなり威力も倍増しています。

:::note info
「風の杖」でご紹介した補充アイテム要らずの無限打ちの実装を行っているので弾切れの心配はありません。
:::

https://qiita.com/glasses_seven/items/3135aab823428dcc708e/

:::note info
対人戦を意識すると地形が悲惨な状況になる事が予想されますので、爆発によるブロックの破壊は起こらないように実装しています。
:::

ちなみにファンネルユニットを装備している場合は、同時に扱えるファンネルが６機から１２機に増えます。


# ホバーユニットによる飛行

しゃがんだ状態でファンネルユニット、あるいはライフルキャノンを使うとホバリングモードへ移行後飛行を開始します。
<img src="https://socket-manager.github.io/document/minecraft-contents/img/hover-unit/flight-start.gif" height="333px" width="500px" />

ファンネルユニットとライフルキャノンは飛行による直進と舵取りをコントロールします。
例えば以下のようにプレイヤーが向いている方向へ旋回する事ができ、ジャンプボタンで安全に着地する事ができます。
<img src="https://socket-manager.github.io/document/minecraft-contents/img/hover-unit/turning.gif" height="333px" width="500px" />

<br />
以下のアイテムには飛行中の役割分担があります。
<dl>
    <dt>・ファンネルユニット</dt>
    <dd>
        高度を調整する。<br />
        飛行中に使うとファンネルは射出できないが、プレイヤー目線で水平面から上を向いている時は上昇し、下を向いている時は下降する。
    </dd>
    <dt>・ライフルキャノン</dt>
    <dd>高度調整はできないが、上空からの砲撃が可能。</dd>
</dl>

### ホバリングモード

▼飛行中のライフルによる攻撃
<img src="https://socket-manager.github.io/document/minecraft-contents/img/hover-unit/landing.gif" height="333px" width="500px" />

通常は上の画面のようにライフルキャノンなどの専用アイテムを使わない限り飛行中の攻撃はできません。
ですが、ホバーユニットによる飛行中にメインハンドアイテムを外すか持ち替える事でその場で停滞するホバリングモードへ移行します。
この時は以下の画面のように他の武器を使う事が可能となります。

<br />

▼「光の剣」の場合
<img src="https://socket-manager.github.io/document/minecraft-contents/img/hover-unit/light-sword.gif" height="333px" width="500px" />
上空からバルカン砲を放っている気分になれます。

https://qiita.com/glasses_seven/items/e3cf4ae07ce1c67383e1/


# アイテムの取得

socket-manager環境のビヘイビアパック／リソースパックなどのアドオンパックを適用しておけば、以下の方法で「ライフルキャノン」「ホバーユニット」が手に入ります。

## 「ライフルキャノン」の取得

### クラフトする場合

▼必要な素材
![必要な素材](https://socket-manager.github.io/document/minecraft-contents/img/hover-unit/recipe-material-rifle-cannon.png "必要な素材")

:::note info
「ＰＳ装甲」は釣りでのジャンク品として登録しています。
ジャンク品の登録方法については以下のページをご覧ください。
:::

https://qiita.com/glasses_seven/items/5af11b4a4766af93ea37/#junk.jsonの定義

:::note info
「Ｅパック」は武器鍛冶師との取引で手に入ります。
:::

▼レシピパターン
<img src="https://socket-manager.github.io/document/minecraft-contents/img/hover-unit/recipe-rifle-cannon-left.png" />　<img src="https://socket-manager.github.io/document/minecraft-contents/img/hover-unit/recipe-rifle-cannon-right.png" />

### ショップで購入する場合

以下のショップで購入できます。

https://qiita.com/glasses_seven/items/e77bfb43baf55e35680b/

「召雷の魔石」実装時と同じようにWebsocketサーバーを介したネットショップとの接続中は発射できないようにしています。

https://qiita.com/glasses_seven/items/e58ec2ceaf2850461965/

### コマンドで取得する場合

以下はワールドオーナーやシステム組み込み用としてコマンドで取得する方法です。
<img src="https://socket-manager.github.io/document/minecraft-contents/img/hover-unit/command-rifle-cannon.png" height="333px" width="500px" />
<img src="https://socket-manager.github.io/document/minecraft-contents/img/hover-unit/get-rifle-cannon.png" height="333px" width="500px" />

## 「ホバーユニット」の取得

### クラフトする場合

▼必要な素材
![必要な素材](https://socket-manager.github.io/document/minecraft-contents/img/hover-unit/recipe-material-hover-unit.png "必要な素材")

:::note info
「ＰＳ装甲」は釣りでのジャンク品として登録しています。
ジャンク品の登録方法については以下のページをご覧ください。
:::

https://qiita.com/glasses_seven/items/5af11b4a4766af93ea37/#junk.jsonの定義

:::note info
「Ｅパック」は武器鍛冶師との取引で手に入ります。
:::

:::note info
「Ｎジャマー」は行商人との取引で手に入ります。
:::

▼レシピパターン
<img src="https://socket-manager.github.io/document/minecraft-contents/img/hover-unit/recipe-hover-unit.png" />

### ショップで購入する場合

以下のショップで購入できます。

https://qiita.com/glasses_seven/items/e77bfb43baf55e35680b/

### コマンドで取得する場合

以下はワールドオーナーやシステム組み込み用としてコマンドで取得する方法です。
<img src="https://socket-manager.github.io/document/minecraft-contents/img/hover-unit/command-hover-unit.png" height="333px" width="500px" />
<img src="https://socket-manager.github.io/document/minecraft-contents/img/hover-unit/get-hover-unit.png" height="333px" width="500px" />

---

あとはsocket-managerでWebsocketサーバーを起動後、マインクラフトからの接続が完了すれば「ライフルキャノン」「ホバーユニット」を含めた各種コンテンツが使えるようになります。

:::note info
socket-managerの導入方法やアドオンパックの所在については以下のページでご紹介していますのでご興味のある方はご覧ください。
:::

https://qiita.com/glasses_seven/items/433ac9d9fcbdb72c6d18/

:::note info
アドオンパックの適用方法については以下のページでご紹介しています。
:::

https://qiita.com/glasses_seven/items/7a174722c9030e669eac


# サーバーサイドの処理

ホバーユニットを使った飛行前後のコントロール（ＨＵＤ表示や落下ダメージ制御など）はサーバーサイドが担っています。

プレイヤーのイベント検知は、以下のページでご紹介させて頂いた`PlayerTravelled`や`ItemUsed`のイベントを利用していますが、状態検知（ホバーユニットの装備状態やしゃがんだ状態）については`ItemUsed`イベントのバリアント値を介してやり取りを行っています。

https://qiita.com/glasses_seven/items/f56d0388dab0de30bf3a/

飛行中のファンネルユニットによる高度調整を行う時には、`ItemUsed`イベントを検知後プレイヤーの仰角を指定した`querytarget`（Websocketサーバー専用）コマンドを発行する事で制御しています。


# おわりに

飛行中の実装は、「ファンネルユニット」実装時のAI機能を飛行機能に絞って再構築後、「座れるエンティティ」と組み合わせて作成しています。

https://qiita.com/glasses_seven/items/0670face6b1f3b93969a/

また、エンティティの召喚時にマインクラフトユーザー名をタグとして付与しているので、他のプレイヤーと競合しないように配慮しています。

今回ホバーユニット自体には特殊な実装はありませんが、ライフルキャノンの方は「発射アイテム」として実装後、光の剣のライトバレットをベースにして「発射体エンティティ」を作成しています。

https://qiita.com/glasses_seven/items/ed7e18730c9c5de3295c/

https://qiita.com/glasses_seven/items/6bcd386abd74db01e450/