64 lines
2.4 KiB
Java
64 lines
2.4 KiB
Java
package com.example.playertime;
|
|
|
|
import net.fabricmc.api.ModInitializer;
|
|
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
|
|
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
public class PlayerTimeMod implements ModInitializer {
|
|
public static final Logger LOGGER = LoggerFactory.getLogger("PlayerTimeTracker");
|
|
private static PlayerTimeTracker timeTracker;
|
|
private static WebServer webServer;
|
|
|
|
@Override
|
|
public void onInitialize() {
|
|
try {
|
|
LOGGER.info("[在线时间] 初始化玩家在线时长视奸MOD");
|
|
|
|
ServerLifecycleEvents.SERVER_STARTING.register(server -> {
|
|
LOGGER.info("[在线时间] 服务器启动 - 初始化跟踪器");
|
|
timeTracker = new PlayerTimeTracker(server);
|
|
|
|
try {
|
|
webServer = new WebServer(timeTracker, 60048);
|
|
webServer.start();
|
|
LOGGER.info("[在线时间] 在线时长Web服务器启动在端口60048");
|
|
} catch (Exception e) {
|
|
LOGGER.error("[在线时间] 无法启动 Web 服务器", e);
|
|
throw new RuntimeException("[在线时间] Web 服务器启动失败", e);
|
|
}
|
|
});
|
|
|
|
ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> {
|
|
if (timeTracker != null) {
|
|
timeTracker.onPlayerJoin(handler.player);
|
|
}
|
|
});
|
|
|
|
ServerPlayConnectionEvents.DISCONNECT.register((handler, server) -> {
|
|
if (timeTracker != null) {
|
|
timeTracker.onPlayerLeave(handler.player);
|
|
}
|
|
});
|
|
|
|
ServerLifecycleEvents.SERVER_STOPPING.register(server -> {
|
|
LOGGER.info("[在线时间] 服务器停止 - 保存数据");
|
|
if (webServer != null) {
|
|
webServer.stop();
|
|
}
|
|
if (timeTracker != null) {
|
|
timeTracker.saveAll();
|
|
}
|
|
});
|
|
|
|
} catch (Exception e) {
|
|
LOGGER.error("[在线时间] Mod 初始化失败!", e);
|
|
throw new RuntimeException("[在线时间] Mod 初始化失败", e);
|
|
}
|
|
}
|
|
|
|
public static PlayerTimeTracker getTimeTracker() {
|
|
return timeTracker;
|
|
}
|
|
} |