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