UNPKG

yoni-mcscripts-lib

Version:

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

64 lines (55 loc) 1.64 kB
import { EventRegistry, eventManager, listenEvent } from "../index.js"; import { VanillaWorld, Minecraft } from "../../basis.js"; import { YoniScheduler, Schedule } from "../../schedule.js"; import { PlayerEvent } from "./PlayerEvent.js"; import type { YoniPlayer } from "../../types"; export class PlayerJoinedEvent extends PlayerEvent { constructor(player: YoniPlayer | Minecraft.Player){ super(player); } async kickPlayer(){ await this.player.kick("加入游戏被取消"); } } const eventRegistry = EventRegistry.register(PlayerJoinedEvent); const joiningPlayers = new Set<string>(); const schedule = new Schedule({ type: Schedule.cycleTickSchedule, async: false, delay: 0, period: 1 }, function testPlayer() { if (joiningPlayers.size === 0){ stopDetect(); return; } let joinedPlayers = []; for (const onlinePlayer of VanillaWorld.getPlayers()){ if (joiningPlayers.has(onlinePlayer.name)){ joiningPlayers.delete(onlinePlayer.name); joinedPlayers.push(onlinePlayer); } } for (const joinedPlayer of joinedPlayers){ const event = new PlayerJoinedEvent(joinedPlayer); eventManager.callEvent(eventRegistry, event); } }); listenEvent(Minecraft.PlayerJoinAfterEvent, function onJoin(event){ joiningPlayers.add(event.playerName); startDetect(); }); function startDetect(){ if (!schedule.isQueued()){ YoniScheduler.addSchedule(schedule); } } function stopDetect(){ if (schedule.isQueued()){ YoniScheduler.removeSchedule(schedule); } }