yoni-mcscripts-lib
Version:
为 Minecraft Script API 中的部分接口创建了 wrapper,并提供简单的事件管理器和任务管理器,另附有一些便于代码编写的一些小工具。
52 lines (51 loc) • 1.7 kB
JavaScript
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();