UNPKG

yoni-mcscripts-lib

Version:

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

58 lines (50 loc) 2.07 kB
// @ts-nocheck import { LegacyEventTypes as EventTypes, LegacyEvent as Event, LegacyEventSignal as EventSignal } from "../../legacy_event.js"; import { EntityUtils as EntityBase } from "../../index.js"; import { getKeys } from "../../lib/ObjectUtils.js"; import { Minecraft } from "../../basis.js"; class EntityHurtEvent extends Event { /*damage; cause; hurtEntiry; damagingEntity; damagingProjectile; damagingSource; */ constructor(event: Minecraft.EntityHurtEvent){ let { damage, hurtEntity, damageSource } = event; let { cause, damagingEntity, damagingProjectile } = damageSource; hurtEntity = EntityBase.from(hurtEntity) ?? undefined; damagingEntity = EntityBase.from(damagingEntity) ?? undefined; damagingProjectile = EntityBase.from(damagingProjectile) ?? undefined; super({ damage, cause, hurtEntity, damagingEntity, damagingProjectile, damageSource: { cause, damagingEntity, damagingProjectile } }); } } class EntityHurtEventSignal { #callbacks = new WeakMap(); subscribe(callback: (arg: EntityHurtEvent) => void, options: Minecraft.EntityEventOptions): (arg: EntityHurtEvent) => void { let func = (event: any) => { if (!this.#callbacks.has(callback)) return; event = new EntityHurtEvent(event); callback(event); } let vanillaSignal = EventTypes.get("minecraft:afterEvents.entityHurt"); if (options) vanillaSignal.subscribe(func, options); else vanillaSignal.subscribe(func); this.#callbacks.set(callback, func); return callback; } unsubscribe(callback: (arg: EntityHurtEvent) => void){ let cab = this.#callbacks.get(callback); if (cab){ EventTypes.get("minecraft:afterEvents.entityHurt").unsubscribe(cab); this.#callbacks.delete(callback); } } } EventTypes.register("mcyoni:entityHurt", new EntityHurtEventSignal());