UNPKG

yoni-mcscripts-lib

Version:

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

49 lines (48 loc) 1.75 kB
// @ts-nocheck import { LegacyEventTypes as EventTypes, LegacyEvent as Event } from "../../legacy_event.js"; import { EntityUtils as EntityBase } from "../../index.js"; class EntityHurtEvent extends Event { /*damage; cause; hurtEntiry; damagingEntity; damagingProjectile; damagingSource; */ constructor(event) { 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, options) { let func = (event) => { 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) { 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());