【イベントデータの詳細(Websocketサーバー用)】

はじめに

ここではWebsocketサーバーのイベントデータについて、本環境で使用している内容を中心にご紹介します。

本環境で扱っているのは以下の3種類です。
PlayerMessage
ItemUsed
PlayerTravelled

PlayerMessage

チャットやウィスパーに関するイベントデータを受信する時のフォーマットです。
受信するイベントデータの形式
{
    "body":{
        "message":<文字列>,
        "receiver":<文字列>,
        "sender":<文字列>,
        "type":<文字列>
    },
    "header":{
        "eventName":"PlayerMessage",
        "messagePurpose":"event",
        "version":<数値>
    }
}
                    


・body

message
チャットメッセージ
receiver
メッセージの受信ユーザー名
sender
メッセージの送信ユーザー名。Websocketサーバーからの送信時は固定で外部になる。
type
以下の種類が存在する。
chat
コマンドラインで/(スラッシュ)なしの入力、あるいはsayコマンドによる入力時
tell
telltellrawmsgwコマンド(いわゆるウィスパー)による入力時

ItemUsed

アイテム使用時のイベントデータを受信する時のフォーマットです。
受信するイベントデータの形式
{
    "body":{
        "count":<数値(今のところ1固定)>,
        "item":{
            "aux":<数値>,
            "id":<文字列>,
            "namespace":<文字列>
        },
        "player":{
            "color":<文字列>,
            "dimension":<数値>,
            "id":<数値>,
            "name":<文字列>,
            "position":{
                "x":<浮動小数点数>,
                "y":<浮動小数点数>,
                "z":<浮動小数点数>
            },
            "type":"minecraft:player",
            "variant":<数値>,
            "yRot":<浮動小数点数>
        },
        "useMethod":<数値>
    },
    "header":{
        "eventName":"ItemUsed",
        "messagePurpose":"event",
        "version":<数値>
    }
}
                    


・body

item
aux
アイテムのAUX(データ)値。
使い方については▶基本の書き方(set_data関数)で説明しています。
id
アイテムID。例えばウインドチャージの場合wind_chargeになる。
namespace
アイテムのネームスペース名。ネイティブなアイテムの場合はminecraftになる。
player
color
カラーコード文字列。
統合版ではチーム機能はないが、Java版ではチーム色を指定する項目があるので、恐らくそのリザーブ項目ではないかと思われる。
ちなみにプレイヤーエンティティの項目を変更して試してみたが、現状ではこの項目へは反映されない模様。
dimension
プレイヤーが存在するワールドの種類。
0:オーバーワールド
1:ネザー
2:エンド
id
プレイヤーのID
name
マインクラフトユーザー名
position
x
プレイヤーのX座標位置
y
プレイヤーのY座標位置
z
プレイヤーのZ座標位置
variant
プレイヤーエンティティのバリアント値
yRot
プレイヤーが向いている角度(ヨー角)
useMethod
値は次の通り。
1:食料アイテム
3:飲料アイテム
4:投擲アイテム
5:発射アイテム
6:ベッド設置
10:その他アイテムの使用(火打石と打ち金/ヤギの角笛/望遠鏡など)

PlayerTravelled

プレイヤーの移動種類のイベントデータを受信する時のフォーマットです。
受信するイベントデータの形式
{
    "body":{
        "isUnderwater":<ブール値>,
        "metersTravelled":<浮動小数点数>,
        "newBiome":<数値>,
        "player":{
            "color":<文字列>,
            "dimension":<数値>,
            "id":<数値>,
            "name":<文字列>,
            "position":{
                "x":<浮動小数点数>,
                "y":<浮動小数点数>,
                "z":<浮動小数点数>
            },
            "type":"minecraft:player",
            "variant":<数値>,
            "yRot":<浮動小数点数>
        },
        "travelMethod":<数値>
    },
    "header":{
        "eventName":"PlayerTravelled",
        "messagePurpose":"event",
        "version":<数値>
    }
}
                    


・body

isUnderwater
値は次の通り。
true:プレイヤーが水中に潜っている時
false:プレイヤーが陸に上がっている時
※プレイヤーが下半身だけ浸かっている時はfalseになる。
metersTravelled
前回検知した位置からの移動距離(m)
newBiome
使途不明
player
color
カラーコード文字列。
統合版ではチーム機能はないが、Java版ではチーム色を指定する項目があるので、恐らくそのリザーブ項目ではないかと思われる。
ちなみにプレイヤーエンティティの項目を変更して試してみたが、現状ではこの項目へは反映されない模様。
dimension
プレイヤーが存在するワールドの種類。
0:オーバーワールド
1:ネザー
2:エンド
id
プレイヤーのID
name
マインクラフトユーザー名
position
x
プレイヤーのX座標位置
y
プレイヤーのY座標位置
z
プレイヤーのZ座標位置
variant
プレイヤーエンティティのバリアント値
yRot
プレイヤーが向いている角度(ヨー角)
travelMethod
値は次の通り。
0:地上での移動(歩行)
1:水中での移動(歩行/上昇/下降/水泳)
2:落下運動の要因になる移動(ジャンプ/エリトラで滑空など)
3:はしごでの移動
4:溶岩中での移動
5:クリエイティブで飛行中の移動(上昇/下降/通常移動/加速移動/テレポート)
6:エンティティでの馬乗りによる移動
7:スニーク移動
8:加速移動(ダッシュ/エリトラで加速)
9:弾むブロック上での歩行移動(ベッド/スライムブロックなど)
11:テレポート(クリエイティブで飛行中以外)
travelMethodの0番の項目については1.21.60のバージョンで一時的に2番へ統合されていましたが1.21.61のバージョンで元通りに修正して下さったようです。

おわりに

ItemUsedPlayerTravelledのイベントデータ内にはプレイヤーエンティティのバリアント値が含まれていますが、本環境ではItemUsedイベントのバリアント値をプレイヤーの状態コードとして以下のコンテンツで利用しています。

▶繰風弾の杖
▶光の剣
▶ホバーユニット(+ライフルキャノン)

エンティティのバリアント値は、本来猫やシュルカーボックスなどのスキン違いのエンティティを区別する値として利用されていますが、プレイヤーエンティティを含めカスタムエンティティでは自由に使えるようです。