BeforeExplosionEventイベントは爆発が発生する直前に発火するイベントです。このクラスには爆発が発生したディメンションや影響を受けるブロック、爆発の発生源となったエンティティなどに関する情報が含まれます。
プロパティ
cancel
cancel: boolean;
trueにセットすると爆発イベントをキャンセルできます。
Type: boolean
dimension
read-only dimension: Dimension;
爆発が発生したディメンション。
Type: Dimension(公式サイト)
impactedBlocks
impactedBlocks: BlockLocation[];
この爆発イベントによって影響を受けるブロックの座標の配列。
Type: BlockLocation[] (公式サイト)
source
read-only source: Entity;
爆発の発生源。
Type: Entity(公式サイト)
サンプルコード
すべての爆発イベントをキャンセルする
import { world } from "@minecraft/server";
world.events.beforeExplosion.subscribe(event => {
event.cancel = true;
});
cancelプロパティにtrueをセットすると、例えばクリーパーが爆発しようとしても実際には爆発が起きなくなります。(なおクリーパーは消えますw)
爆発で壊れるブロックをすべてダイヤモンド鉱石にすり替える
以下のコードでは爆発影響を受けるブロックをダイヤモンド鉱石に置き換えています。
import { MinecraftBlockTypes, world } from "@minecraft/server";
world.events.beforeExplosion.subscribe(event => {
for (let i = 0; i < event.impactedBlocks.length; i++) {
// 爆発の影響を受けるブロックの座標を取得
const impactedBlockLocation = event.impactedBlocks[i];
// その座標のブロックを取得
const block = event.dimension.getBlock(impactedBlockLocation);
// ブロックのタイプをダイヤモンドに書き換える
block.setType(MinecraftBlockTypes.diamondOre);
}
});
このコードを実行するとダイヤモンドに置き換わったブロックが爆発によって破壊されるため、大量のダイヤモンドが生まれます。TNTやクリーパー、エンドクリスタルなどが爆発するたびにダイヤモンドが生まれるのでなかなか面白いです。
何がどの場所で爆発したのかをチャットに表示する
import { MinecraftBlockTypes, world } from "@minecraft/server";
world.events.beforeExplosion.subscribe(event => {
const { source } = event;
const { x, y, z } = source.location;
source.dimension.runCommandAsync(`say ${source.id}が(${x}, ${y}, ${z})で爆発しました!`);
});