BeforeChatEventはプレイヤーがチャットメッセージを入力したときに発火するイベントです。このクラスにはチャットメッセージの内容やメッセージを送ったプレイヤー、メッセージを受け取るプレイヤーの情報が含まれます。
プロパティ
cancel
cancel: boolean;
beforeChatイベントハンドラ内でこのプロパティにtrueをセットすると、メッセージのブロードキャスト(一斉送信)をキャンセルできる。
タイプ: boolean
message
message: string;
ブロードキャストされるメッセージ。beforeChatイベントハンドラでプレイヤーにメッセージが表示される前にmessageプロパティを編集することでメッセージの内容を変更できる。
タイプ: string
sender
sender: Player;
チャットメッセージを送ったプレイヤー。
Type: Player(公式サイト)
sendToTargets
sendToTargets: boolean;
このプロパティにtrueをセットするとメッセージを特定のプレイヤーに向けて送ることができる(全プレイヤーに一斉送信されない)。
タイプ: boolean
targets
targets: Player[];
メッセージを受け取るプレイヤー。Playerクラスの配列を指定する。
タイプ: Player[](公式サイト)
コードサンプル
禁則文字が含まれている場合にはチャットメッセージをキャンセルする
cancelプロパティにtrueをセットするとチャットメッセージの送信をキャンセルすることができます。
import { world } from "@minecraft/server";
world.events.beforeChat.subscribe(beforeChatEvent => {
if (beforeChatEvent.message.includes("禁則文字") === true) {
beforeChatEvent.cancel = true;
}
});
特定のチャットメッセージの時だけメッセージをキャンセルして、キャンセルしたメッセージの内容によって処理をするようなカスタムコマンドを作ったりできると思います。
禁則文字が含まれている場合にメッセージを書き換える
禁則文字を含んだチャットメッセージが送られてきた場合にメッセージを書き換えるには次のようにします。ここでは「あいうえお」を禁則文字として、「禁則文字が含まれています」と書き換えます。
import { world } from "@minecraft/server";
world.events.beforeChat.subscribe(beforeChatEvent => {
if (beforeChatEvent.message.includes("あいうえお") === true) {
beforeChatEvent.message = "禁則文字が含まれています";
}
});
チャットメッセージの送信者と同じディメンションのプレイヤーにだけメッセージを送る
同一ディメンション内のプレイヤーにのみチャットメッセージを送るには、すべてのプレイヤーを取得して、そのそれぞれのプレイヤーのディメンションIDがメッセージを送ったプレイヤーのディメンションIDと等しいことを調べればOK。
import { world } from "@minecraft/server";
world.events.beforeChat.subscribe(beforeChatEvent => {
// メッセージを受け取るプレイヤーを指定するかどうかを設定
beforeChatEvent.sendToTargets = true;
// ワールドにいる全てのプレイヤーを取得する
const allPlayers = world.getPlayers();
// 全てのプレイヤーのうち、メッセージを送った人と
// 同じディメンションにいる人をターゲットに設定する
const targets = [];
for(const player of allPlayers){
if(player.dimension.id === beforeChatEvent.sender.dimension.id){
targets.push(player);
}
}
beforeChatEvent.targets = targets;
});