UNPKG

yoni-mcscripts-lib

Version:

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

157 lines (156 loc) 5.09 kB
// @ts-nocheck import { Types, getIdentifierInfo } from "./Types.js"; import { Event } from "./Event.js"; import { EventTrigger } from "./Trigger.js"; import { EventSignal } from "./Signal.js"; /** * @deprecated 废弃,不再使用,请使用新的 {@link import("./v2/EventRegistry").EventRegistry}。另外,如果你使用了此LegacyEvent中的自定义事件,webpack打包或者类似的操作将无法完成。 */ class TriggerBuilder { #idInfo = null; constructor(identifier) { if (identifier !== undefined) { this.#idInfo = getIdentifierInfo(identifier); } } id(identifier) { if (this.#idInfo !== null) { throw new Error("Already setup identifier"); } this.#idInfo = getIdentifierInfo(identifier); return this; } identifier() { if (this.#idInfo !== null) { throw new Error("Already setup identifier"); } this.#idInfo = getIdentifierInfo(identifier); return this; } namespace() { if (this.#idInfo === null) { throw new Error("Set a identifier first"); } if (Types.hasNamespace(n)) { this.#idInfo.namespace = n; } else { throw new Error("Namespace not found"); } return this; } #eventSignalClass = null; eventSignalClass(n) { if (this.#eventSignalClass !== null) { throw new Error("Already setup eventClass"); } this.#eventSignalClass = n; return this; } #eventClass = null; eventClass(n) { if (this.#eventClass !== null) { throw new Error("Already setup eventClass"); } this.#eventClass = n; return this; } #filterResolver = null; filterResolver(n) { if (this.#filterResolver !== null) { throw new Error("Already setup filterResolver"); } this.#filterResolver = n; return this; } #firebug = null; firebug(n) { if (this.#firebug !== null) { throw new Error("Already setup firebug"); } this.#firebug = n; return this; } #firebugAsync = null; firebugAsync(n) { if (this.#firebugAsync !== null) { throw new Error("Already setup firebugAsync"); } this.#firebugAsync = n; return this; } #onSubscribeCallbacks = []; onSubscribe(n) { this.#onSubscribeCallbacks.push(n); return this; } #onUnsubscribeCallbacks = []; onUnsubscribe(n) { this.#onUnsubscribeCallbacks.push(n); return this; } #whenFirstSubscribeCallbacks = []; whenFirstSubscribe(n) { this.#whenFirstSubscribeCallbacks.push(n); return this; } get onFirstSubscribe() { this.whenFirstSubscribe; } #whenLastUnsubscribeCallbacks = []; whenLastUnsubscribe(n) { this.#whenLastUnsubscribeCallbacks.push(n); return this; } get onLastUnsubscribe() { this.whenLastUnsubscribe; } build() { let idInfo = this.#idInfo; if (idInfo === null) { throw new Error("Build failed, require identifier to set"); } let eventSignalClass = (null === this.#eventSignalClass) ? EventSignal : this.#eventSignalClass; let eventClass = (null === this.#eventClass) ? Event : this.#eventClass; let trigger = new EventTrigger(idInfo.id, eventSignalClass); trigger.eventClass = eventClass; trigger.signal = new eventSignalClass(idInfo.id, trigger); if (this.#filterResolver !== null) trigger.filterResolver = this.#filterResolver; if (this.#firebug !== null) trigger.firebug = this.#firebug; if (this.#firebugAsync !== null) trigger.firebugAsync = this.#firebug; if (this.#onSubscribeCallbacks.length !== 0) { const callbacks = this.#onSubscribeCallbacks; trigger.onSubscribe = function (...args) { callbacks.forEach(f => f(...args)); }; } if (this.#onUnsubscribeCallbacks.length !== 0) { const callbacks = this.#onUnsubscribeCallbacks; trigger.onUnsubscribe = function (...args) { callbacks.forEach(f => f(...args)); }; } if (this.#whenFirstSubscribeCallbacks.length !== 0) { const callbacks = this.#whenFirstSubscribeCallbacks; trigger.whenFirstSubscribe = function (...args) { callbacks.forEach(f => f(...args)); }; } if (this.#whenLastUnsubscribeCallbacks.length !== 0) { const callbacks = this.#whenLastUnsubscribeCallbacks; trigger.whenLastUnsubscribe = function (...args) { callbacks.forEach(f => f(...args)); }; } return trigger; } } export { TriggerBuilder }; export { TriggerBuilder as EventTriggerBuilder };