はじめに
以下のように階段ブロックの淵をスニーク移動すると階段に座れます。
座れるブロックは設定ファイルで変更できるようにしています。
現在の設定で座れるブロックは以下の通り。
※特に基準はありませんが、こちら側の任意で現在5ブロックだけ選抜登録しています。
例えば座れるブロックを追加すると以下のようにガラスブロックでも座れます。
動作環境
- プラットフォーム
- Windows10
- マインクラフト(統合版)
- Windows Edition v1.21.21
- socket-manager
- v1.14.0
- 言語
- PHP v8.2.4(v8.1.0以降)
socket-manager環境の導入手順は以下のページをご覧ください。
サーバー側の実装
今回はスニークイベントが発生した時に送信される"PlayerTravelled"というサブスクライブイベントを使用しています。
受信したイベントデータのtravelMethodというパラメータ値(=7:スニーク)をみて判断しています。
サブスクライブイベントの処理内容については以下のページでご紹介しています。
今回はスニーク移動を検知した際にプレイヤーの真下にあるブロックが座れるブロックなのかどうかを判断するため、以下のフレームワーク上のマインクラフト設定ファイルをご用意しています。
return [
・
・
・
/**
* @var array 座れる階段ブロック(複数指定可能)
*/
'stairs_ids' =>
[
'stone_stairs', // 丸石
'oak_stairs', // オーク
'cherry_stairs', // サクラ
'brick_stairs', // レンガ
'quartz_stairs' // クォーツ
]
];
スニーク検知後の処理の流れは以下の通りです。
- 1)プレイヤー真下のブロックが対象のブロックかを検査
- サーバーから
testforblock
コマンドを発行して検査 - 2)プレイヤーが搭乗可能なダミーエンティティを召喚
- サーバーから
summon
コマンドを発行 - 3)プレイヤーをダミーエンティティに搭乗させる
- サーバーから
ride
コマンドを発行
{
"body":
{
"matches":true(一致) or false(不一致),
"position":{"x":<X座標>,"y":<Y座標>,"z":<Z座標>},
"statusCode":<数字>,
"statusMessage":<文字列>
},
"header":
{
"messagePurpose":<文字列>,
"requestId":<UUID>,
"version":<数字>
}
}
上記のmatches
の項目を参照して一致しているかどうかを判断しています。
ダミーエンティティの作り方は以下のページでご紹介しています。
実装内容の詳細は他のコンテンツも含めて以下のページでご紹介していますのでご興味のある方はご覧ください。
おわりに
testforblock
発行時のレスポンスの内容は以下ページの機能を使って確認しています。
今回の実装ではダミーエンティティを追加しているためリソースパックを使用しています。
リソースパックの適用方法については以下のページをご覧ください。
今回の実装内容は以下の実装で応用しています。