【マインクラフト（統合版）】Websocketサーバーを使って「いなずまの剣（改）」を作ってみました

# 動作環境

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


# 「いなずまの剣」の使い方

剣をメインハンドに持った状態で右クリックすると以下のように稲妻を放てます。
![いなずまの剣 右クリック](https://socket-manager.github.io/document/minecraft-contents/img/thunder-sword/thunder-sword.gif "いなずまの剣 右クリック")

弓のアニメーションを代用しているので一人称で見るとこんな感じになります。
![いなずまの剣 一人称](https://socket-manager.github.io/document/minecraft-contents/img/thunder-sword/thunder-sword-first.gif "いなずまの剣 一人称")


# 「いなずまの剣改」の使い方

「いなずまの剣」と同じように稲妻を放つ事もできますが、これに加えてメインハンドに持った状態で「ダッシュ＋スニーク」を実行すると以下のように範囲攻撃が発動します。
![いなずまの剣改 範囲攻撃](https://socket-manager.github.io/document/minecraft-contents/img/thunder-sword/thunder-sword-revised-sweep.gif "いなずまの剣改 範囲攻撃")

射程距離は１０ブロックで相手に必中で稲妻を落とせます。

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

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

発動中は無敵状態なのでダメージは受けませんが、その場に居続けると火の影響は受けますので使用後は速やかに退避しましょう。

攻撃力は「いなずまの剣」（ネザライト並み）の２倍近くあるので以下のように羊や牛などは一撃で倒せます。
![いなずまの剣改 一人称](https://socket-manager.github.io/document/minecraft-contents/img/thunder-sword/thunder-sword-revised-first.gif "いなずまの剣改 一人称")


# 「いなずまの剣」の取得

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

### クラフトする場合

以下は無形レシピのため、アイテムの配置は自由です。
無形レシピの詳細については<a href="https://qiita.com/glasses_seven/items/6865c9c3ae5d756a2989/#無形レシピについて">&gt;&gt; レシピの作り方</a>（無形レシピについて）のページをご覧ください。
<br />
<dl>
    <dt>・「召雷の魔石」を消費する場合</dt>
    <dd>
        <br />
        ▼必要な素材<br />
        <img src="https://socket-manager.github.io/document/minecraft-contents/img/thunder-sword/material-list-thunder-sword-by-stone.png" /><br /><br />
        ▼レシピパターン<br />
        <img src="https://socket-manager.github.io/document/minecraft-contents/img/thunder-sword/recipe-thunder-sword-by-stone.png" /><br />
    </dd>
</dl>
<br />
<dl>
    <dt>・「いなずまの矢」を消費する場合</dt>
    <dd>
        <br />
        ▼必要な素材<br />
        <img src="https://socket-manager.github.io/document/minecraft-contents/img/thunder-sword/material-list-thunder-sword-by-arrow.png" /><br /><br />
        ▼レシピパターン<br />
        <img src="https://socket-manager.github.io/document/minecraft-contents/img/thunder-sword/recipe-thunder-sword-by-arrow.png" /><br />
    </dd>
</dl>

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

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

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

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

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


# 「いなずまの剣改」の取得

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

### クラフトする場合

以下は無形レシピのため、アイテムの配置は自由です。
無形レシピの詳細については<a href="https://qiita.com/glasses_seven/items/6865c9c3ae5d756a2989/#無形レシピについて">&gt;&gt; レシピの作り方</a>（無形レシピについて）のページをご覧ください。
<br />
<dl>
    <dt>・「召雷の魔石」を消費する場合</dt>
    <dd>
        <br />
        ▼必要な素材<br />
        <img src="https://socket-manager.github.io/document/minecraft-contents/img/thunder-sword/material-list-thunder-sword-revised-by-stone.png" /><br /><br />
        ▼レシピパターン<br />
        <img src="https://socket-manager.github.io/document/minecraft-contents/img/thunder-sword/recipe-thunder-sword-revised-by-stone.png" /><br />
    </dd>
</dl>
<br />
<dl>
    <dt>・「いなずまの矢」を消費する場合</dt>
    <dd>
        <br />
        ▼必要な素材<br />
        <img src="https://socket-manager.github.io/document/minecraft-contents/img/thunder-sword/material-list-thunder-sword-revised-by-arrow.png" /><br /><br />
        ▼レシピパターン<br />
        <img src="https://socket-manager.github.io/document/minecraft-contents/img/thunder-sword/recipe-thunder-sword-revised-by-arrow.png" /><br />
    </dd>
</dl>

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

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

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

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

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


# サーバー側の実装

### 右クリック時の稲妻の召喚

今まで実装したアイテムと同様に今回の実装でも"ItemUsed"というサブスクライブイベントを使用しています。
稲妻を落とす先の座標を計算するロジックは「いなずまの弓」を実装した時のものをそのまま利用しています。

### 範囲攻撃時の稲妻の召喚

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

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

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

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

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


# おわりに

鉄の剣やダイヤモンドの剣などのネイティブな武器は、以下の「ルートテーブルの書き方」のページでご紹介したようなデータ値は使えませんので今回はリソースパックでアイテムを追加しています。

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

デザインセンスはひとまず置いておくとして折角リソースパックを触るので、他のアイテムと区別が出来るように見た目も変えています。

:::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/