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