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