UNPKG

yoni-mcscripts-lib

Version:

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

47 lines (40 loc) 1.23 kB
import { runTask, MinecraftSystem } from "../../basis.js"; import { LegacyEventSignal as EventSignal, LegacyEvent as Event, LegacyEventTriggerBuilder as EventTriggerBuilder } from "../../legacy_event.js"; export class TickEventSignal extends EventSignal {} export class TickEvent extends Event { currentTick; deltaTime; constructor(currentTick, deltaTime){ super(); Object.assign(this, {deltaTime, currentTick}); Object.freeze(this); } } const getTimeNs = (function (){ if (typeof __date_clock === "function") return __date_clock; return () => Date.now() * 1000; })(); const trigger = new EventTriggerBuilder("yoni:tick") .eventSignalClass(TickEventSignal) .eventClass(TickEvent) .whenFirstSubscribe(() => { stop = false; lastTickTimeNs = getTimeNs(); runTask(start); }) .whenLastUnsubscribe(() => { stop = true; }) .build() .registerEvent(); let lastTickTimeNs = 0; let stop = false; function start(){ if (stop) return; runTask(start); let ct = getTimeNs(); let pt = (ct - lastTickTimeNs) / 1000000; lastTickTimeNs = ct; trigger.triggerEvent(MinecraftSystem.currentTick, pt); }