yoni-mcscripts-lib
Version:
为 Minecraft Script API 中的部分接口创建了 wrapper,并提供简单的事件管理器和任务管理器,另附有一些便于代码编写的一些小工具。
49 lines (48 loc) • 1.67 kB
JavaScript
import { world as World } from "../../remix/world.js";
import { YoniScheduler } from "../../schedule.js";
import { PlayerEvent } from "./PlayerEvent.js";
import { LegacyEventTriggerBuilder as EventTriggerBuilder, LegacyEventTypes as EventTypes, LegacyEventSignal as EventSignal } from "../../legacy_event.js";
import "./PlayerJoinedEvent.js";
export class PlayerDeadEvent extends PlayerEvent {
constructor(player) {
super(player);
}
}
export class PlayerDeadEventSignal extends EventSignal {
}
let eventId0;
let eventId1;
const deadPlayers = new WeakSet();
const trigger = new EventTriggerBuilder()
.id("yoni:playerDead")
.eventSignalClass(PlayerDeadEventSignal)
.eventClass(PlayerDeadEvent)
.whenFirstSubscribe(() => {
eventId0 = YoniScheduler.runCycleTickTask(() => {
let alivePlayers = Array.from(World.selectEntities({ type: "minecraft:player" }));
let allPlayers = World.getAllPlayers();
for (let player of allPlayers) {
if (alivePlayers.includes(player)) {
deadPlayers.delete(player);
continue;
}
else if (deadPlayers.has(player)) {
continue;
}
deadPlayers.add(player);
trigger.triggerEvent(player);
}
}, 0, 1);
EventTypes.get("yoni:playerJoined").subscribe(onHurt);
})
.whenLastUnsubscribe(() => {
YoniScheduler.removeSchedule(eventId0);
EventTypes.get("yoni:playerJoined").unsubscribe(onHurt);
})
.build()
.registerEvent();
function onHurt(event) {
if (event.player.getCurrentHealth() <= 0) {
deadPlayers.add(event.player);
}
}