UNPKG

yoni-mcscripts-lib

Version:

为 Minecraft Script API 中的部分接口创建了 wrapper,并提供简单的事件管理器和任务管理器,另附有一些便于代码编写的一些小工具。

52 lines (51 loc) 1.7 kB
import { LegacyEventSignal as EventSignal, LegacyEventTriggerBuilder as EventTriggerBuilder } from "../../legacy_event.js"; import { YoniScheduler, Schedule } from "../../schedule.js"; import { PlayerEvent } from "./PlayerEvent.js"; import { world as World } from "../../remix/world.js"; export class PlayerTeleportDimensionEvent extends PlayerEvent { fromDimension; toDimension; constructor(player, fromDimension, toDimension) { super(player); this.fromDimension = fromDimension; this.toDimension = toDimension; } } export class PlayerTeleportDimensionEventSignal extends EventSignal { } const PlayerDimRecords = new WeakMap(); const schedule = new Schedule({ async: false, period: 1, delay: 0, type: Schedule.tickCycleSchedule }, () => { World.getAllPlayers().forEach((player) => { let oldDim = PlayerDimRecords.get(player); let newDim = null; if (oldDim === undefined) { PlayerDimRecords.set(player, player.dimension); } else if (oldDim !== player.dimension) { newDim = player.dimension; } if (newDim !== null) { PlayerDimRecords.set(player, newDim); trigger.triggerEvent(player, oldDim, newDim); } }); }); function start() { YoniScheduler.addSchedule(schedule); } function stop() { YoniScheduler.removeSchedule(schedule); } const trigger = new EventTriggerBuilder() .id("yoni:playerTeleportDimension") .eventSignalClass(PlayerTeleportDimensionEventSignal) .eventClass(PlayerTeleportDimensionEvent) .whenFirstSubscribe(start) .whenLastUnsubscribe(stop) .build() .registerEvent();