【マインクラフト（統合版）】Websocketサーバーを使って「はやぶさの剣＋瞬間移動の杖」を作ってみました

# 動作環境

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


# 瞬間移動

剣をメインハンドに持った状態で右クリックすると前方へ瞬間移動します。
![瞬間移動](https://socket-manager.github.io/document/minecraft-contents/img/hayabusa-sword/hayabusa-teleport.gif "瞬間移動")

ウインドチャージの爆発力を利用しているので周囲の相手を蹴散らしつつ移動する事ができます。
そして移動中は無敵状態のため回避行動として利用する事もできます。
水中を歩く時もこれを使った方が断然早く移動できます。
![水中移動](https://socket-manager.github.io/document/minecraft-contents/img/hayabusa-sword/hayabusa-teleport-water.gif "水中移動")


# はやぶさ斬り

剣をメインハンドに持った状態にして「ダッシュ＋スニーク」で発動できます。
![はやぶさ斬り](https://socket-manager.github.io/document/minecraft-contents/img/hayabusa-sword/special-move.gif "はやぶさ斬り")

発動したら相手の背後に周りつつ大ダメージ（１５ポイント）を与えます。
攻撃力はダイアモンドの剣並みなので、装備を身に着けていないハスク相手であれば発動後の一振りで倒せます。
射程距離は少し長めの１５ブロックなので範囲攻撃が使える「いなずまの剣改」を持った対人戦であっても瞬間移動を交えつつカウンターが狙えます。

以下のように瞬間移動とのコンボ発動も可能です。
![はやぶさ斬り＋瞬間移動](https://socket-manager.github.io/document/minecraft-contents/img/hayabusa-sword/special-move-combo.gif "はやぶさ斬り＋瞬間移動")

タイミングを合わせるのが少し難しいですが、「はやぶさ斬り」で大ダメージを与えつつ二撃目の「瞬間移動」の爆発力で距離を取りながらダメージを与え、宙に浮かせた後の落下ダメージでトドメを刺す事ができます。

相手にとっては前方からきた相手が通過したように見えるので、通りすがりのはやぶさ斬り？といったところでしょうかｗ

「ダッシュ＋スニーク」で発動する範囲攻撃のイベント処理は以下ページの「スウィープロッド（範囲攻撃）」で実装したものをそのまま使っています。

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


# 「はやぶさの剣」の取得

socket-manager環境のビヘイビアパック／リソースパックなどのアドオンパックを適用しておけば、以下の方法で「はやぶさの剣」が手に入ります。

### クラフトする場合

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

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

カスタムレシピの作り方は以下のページでご紹介しています。

https://qiita.com/glasses_seven/items/6865c9c3ae5d756a2989

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

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

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

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

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

---

あとは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/e77bfb43baf55e35680b/

弓で矢を放つ時と同様に右クリックのチャージ時間の長さに比例して移動距離が長くなりますので移動手段としても使えます。

### 使い方

チャージが短い時
![チャージが短い時](https://socket-manager.github.io/document/minecraft-contents/img/hayabusa-sword/teleport-rod-short.gif "チャージが短い時")

チャージが長い時
![チャージが長い時](https://socket-manager.github.io/document/minecraft-contents/img/hayabusa-sword/teleport-rod-long.gif "チャージが長い時")

きのこの上に移動
![きのこの上に移動](https://socket-manager.github.io/document/minecraft-contents/img/hayabusa-sword/teleport-rod-kinoko.gif "きのこの上に移動")


# サーバー側の実装

### 右クリック時の瞬間移動

今まで実装したアイテムと同様に今回の実装でも"ItemUsed"というサブスクライブイベントを使用しています。

瞬間移動発動時の処理の流れは以下の通りです。

<dl>
    <dt>1)プレイヤーの背後にテレポート先となるダミーエンティティの召喚</dt>
    <dd>召喚と同時にマインクラフトアカウント名を基にしたnameタグを付与</dd>
    <dt>2)召喚したダミーエンティティの背後にウインドチャージを召喚</dt>
    <dd>ダミーエンティティに触れるように召喚する事で爆発を促す</dd>
    <dt>3)爆風で飛ばしたダミーエンティティの位置へテレポート</dt>
    <dd>ダミーエンティティのnameタグをセレクターとしてテレポート</dd>
    <dt>4)ダミーエンティティのデスポーン</dt>
    <dd>ダミーエンティティのnameタグをセレクターとしてkill</dd>
</dl>

:::note info
ダミーエンティティの作り方は以下のページでご紹介しています。
:::

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


### 範囲攻撃時のはやぶさ斬り

「スウィープロッド（範囲攻撃）」の実装で使っていた"PlayerTravelled"というサブスクライブイベントを使用しています。
`travelMethod`の値（7:スニーク、8:ダッシュ）をみてそのイベントがスニークなのかダッシュなのかを判断できるようになっています。

「いなずまの弓」実装時と同様「瞬間移動」のダミーエンティティの配置や、「はやぶさ斬り」発動時の相手の背後へ廻る時の処理は、ヨー角を基にした全方位型の座標計算ロジックを使っています。

---

サブスクライブイベントの処理内容については以下の記事をご覧ください。

https://socket-manager.github.io/document/extra-minecraft

実装内容の詳細は他のコンテンツも含めて以下のページでご紹介していますのでご興味のある方はご覧ください。

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


# おわりに
今回の実装は強すぎる「いなずまの剣改」の対抗手段として考えたものです。
そのため「はやぶさの剣」が有利になるように射程距離に差をもたせた上でコンボ発動ができるようにしています。

アクション系の要素も加えたかったという思いもありましたが、今回はゲームバランスを意識しながら作っていくのはなかなか難しい事だと、改めて考えさせられる実装でした。

:::note info
カスタムアイテムの作り方は以下のページでご紹介しています。
:::

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

https://qiita.com/glasses_seven/items/633a9c4a3ad9c4b13d21/

https://qiita.com/glasses_seven/items/93ffdf68edb5e1f806bc/

https://qiita.com/glasses_seven/items/8d87b5f6b8ccea706dce/