ワールドに関するイベント

ワールドに関するイベントです。

TickEvent

このイベントはティック毎(1秒間に20回)に発生します。

import * as mc from 'mojang-minecraft';

const overworld = mc.world.getDimension(mc.MinecraftDimensionTypes.overworld);

function tick(event: mc.TickEvent) {
  // このイベントが起きてからのティック数
  // と、公式ドキュメントにあるが、ワールドが作成されてからのティック数になっている(1.19.21)
  const tick: number = event.currentTick;
  // 前回のティックからの時間
  // ティックは1秒間に20回起こることになっているが、毎回厳密に0.05秒になるわけではない
  // 細かい補正するために用いられる
  const delta: number = event.deltaTime;

  // (200ティック = 10秒)に1回実行(毎ティック表示すると多すぎるので)
  if (tick % 200 === 0) {
    overworld.runCommand(`say TickEvent: ${tick} tick`);
  }
}

mc.world.events.tick.subscribe(tick);

WeatherChangeEvent

天候が変化したときに発生するイベント。

変化したときなので、コマンドで同じ天候を指定した場合にはこのイベントは発生しません。

import * as mc from 'mojang-minecraft';

const overworld = mc.world.getDimension(mc.MinecraftDimensionTypes.overworld);

function onWeatherChage(event: mc.WeatherChangeEvent) {
  // イベントが発生した次元名(ここは文字列であることに注意)
  const dimensionName: string = event.dimension;
  // 変更後の天候が雨かどうか
  const isRaining: boolean = event.raining;
  // 変更後の天候が雷かどうか
  const isLightning: boolean = event.lightning;

  // {(雨でない) かつ (雷でない)} ならば 晴れ
  if (!isRaining && !isLightning) {
    // /weather clear
    overworld.runCommand(`say ${dimensionName} の天候は「晴れ」です。`);
  }
  // 雨だが雷ではない
  else if (isRaining && !isLightning) {
    // /weather rain
    overworld.runCommand(`say ${dimensionName} の天候は「雨」です。`);
  }
  // 雨ではないが雷
  else if (!isRaining && isLightning) {
    // コマンドではこの状態は起こせない
    // 自然に発生する状況があるかは未確認
    overworld.runCommand(`say ${dimensionName} の天候は「雷」です。`);
  }
  // 雨かつ雷
  else if (isRaining && isLightning) {
    // /weather thunder
    overworld.runCommand(`say ${dimensionName} の天候は「雷雨」です。`);
  }
}

mc.world.events.weatherChange.subscribe(onWeatherChage);

WorldInitializeEvent

ワールドが初期化される時に実行される。

現在(BE:1.19.21)はダイナミックプロパティの登録機能しかありません。 詳しい使い方はダイナミックプロパティの項目で解説します。

function onWorldInitialize(event: mc.WorldInitializeEvent) {
  // ダイナミックプロパティの登録
  event.propertyRegistry;
}

mc.world.events.weatherChange.subscribe(onWorldInitialize);

参考

次のページへ
スラッシュコマンドを実行する