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