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

# はじめに

今回のアイテムはメインハンド装備ですが、Ｇシリーズでのとあるモビルスーツのバインダーを参考に３Ｄ風の２Ｄでアレンジしています。
マインクラフトのキャラクターは元々等身が低いのでＳＤ風に仕上がりました。
<img src="https://socket-manager.github.io/document/minecraft-contents/img/funnel-unit/standing.png" height="333px" width="500px" />

ファンネルユニットを装備した状態で右クリックすると以下のように１機ずつ召喚し、合計６機まで射出する事が可能です。
<img src="https://socket-manager.github.io/document/minecraft-contents/img/funnel-unit/summon.gif" height="333px" width="500px" />


# 動作環境

<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/funnel-unit/summon-max.png" height="333px" width="500px" />

「スウィープロッド」の実装時に使っていた「ダッシュ＋スニーク」を実行すると、場に出ているファンネルを全て回収後以下のようにウィスパーを通して天の声が流れます。
<img src="https://socket-manager.github.io/document/minecraft-contents/img/funnel-unit/callback.png" height="333px" width="500px" />

https://qiita.com/glasses_seven/items/3c86bf82b5e7b09cfc79/

<br />

ファンネルが場に存在しない状態で「ダッシュ＋スニーク」を実行すると以下のように表示されます。
<img src="https://socket-manager.github.io/document/minecraft-contents/img/funnel-unit/callback-error.png" height="333px" width="500px" />


# ユースケース

今回は「光の剣」のライトシールドからライトバレットをオートで発射していたエンティティをベースにしてファンネルを実装しています。

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

本来のファンネルは宇宙空間でしか使えませんが、エンティティのＡＩ機能に飛行機能を拡張する事によって以下のようなオールレンジ攻撃を可能にしました。

<br />

▼空中戦
<img src="https://socket-manager.github.io/document/minecraft-contents/img/funnel-unit/air-combat.gif" height="333px" width="500px" />
ヴェックスのような飛行タイプの相手であれば空中戦で威力を発揮します。

▼水中戦
<img src="https://socket-manager.github.io/document/minecraft-contents/img/funnel-unit/underwater.gif" height="333px" width="500px" />
モビルアーマーのように水中を突進してくるドラウンドに対しても迎撃してくれます。

▼対ウォーデン
<img src="https://socket-manager.github.io/document/minecraft-contents/img/funnel-unit/warden.gif" height="333px" width="500px" />

ファンネルが放つライトバレットの威力は矢と同等ですが相手の注意を引きながら複数機によるオールレンジ攻撃を行い、上の画面のようにサンドバック状態にできるので効果は抜群です。

ウォーデンの認識範囲である３０ブロック分のスペースが確保できるのであれば、ファンネルを放った後すぐに離れて認識範囲外へ退避しましょう。
範囲外へ出れば暗視状態も解除されるので、後の事はファンネルに任せて高みの見物ができます。

ウォーデンは体力が少なくなると、どんな状況でもプレイヤーに急接近して近接攻撃をしかけてきます。
この時、攻撃のスキも与えないくらいに連続攻撃をしかけてくるので認識範囲外に逃れておくのが懸命でしょう。


# 「ファンネルユニット」の取得

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

### ・クラフトする場合
<br />

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

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

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

:::note info
「サイコフレーム」は武器鍛冶師との取引で手に入ります。
:::

<br />

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

<br />

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

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

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

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

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

<br />

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

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


# おわりに

ファンネルを場に出しておくと、プレイヤーの目が届かない所でも目を光らせてくれると同時に空中戦でも能力を発揮できるので心強い相棒になります。

今回は「発射アイテム」としてのファンネルユニットを実装後、「ダミーエンティティ」を作成して「発射体エンティティ」として発射する事によりサーバーサイドでイベント検知を行っています。

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

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

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

また、マインクラフトユーザー名をタグとして付与すると同時に、ファンネルの召喚／回収の制御も併せてサーバーサイドがメインで行う事によって他のプレイヤーのものと競合が起こらないように配慮しています。

場に出せるファンネル数を含めた各種設定項目については以下の「設定ファイル」で変更可能です。

https://socket-manager.github.io/document/minecraft-contents/setting