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