feat: 添加管理员指令

This commit is contained in:
2024-08-08 03:41:50 +08:00
parent e4425c0b1b
commit 5724e5e662
16 changed files with 720 additions and 29 deletions

View File

@@ -5,6 +5,7 @@ import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo;
import cn.hamster3.mc.plugin.ball.common.event.BallActions;
import cn.hamster3.mc.plugin.ball.common.event.server.ServerOnlineEvent;
import cn.hamster3.mc.plugin.ball.velocity.api.CoreVelocityAPI;
import cn.hamster3.mc.plugin.ball.velocity.command.VelocityBallCommand;
import cn.hamster3.mc.plugin.ball.velocity.listener.BallVelocityListener;
import cn.hamster3.mc.plugin.ball.velocity.listener.BallVelocityMainListener;
import cn.hamster3.mc.plugin.ball.velocity.listener.UpdatePlayerInfoListener;
@@ -12,6 +13,7 @@ import cn.hamster3.mc.plugin.ball.velocity.listener.VelocityServerListener;
import cn.hamster3.mc.plugin.ball.velocity.util.BallVelocityUtils;
import cn.hamster3.mc.plugin.core.common.config.YamlConfig;
import com.google.inject.Inject;
import com.velocitypowered.api.command.CommandMeta;
import com.velocitypowered.api.event.PostOrder;
import com.velocitypowered.api.event.Subscribe;
import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
@@ -29,7 +31,6 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.util.Objects;
import java.util.logging.Level;
@Plugin(
id = "hamster-ball",
@@ -60,12 +61,12 @@ public class HamsterBallPlugin {
this.slf4jLogger = slf4jLogger;
this.proxyServer = proxyServer;
dataFolder = dataPath.toFile();
logger.info("仓鼠球正在初始化");
slf4jLogger.info("仓鼠球正在初始化");
instance = this;
try {
File dataFolder = getDataFolder();
if (dataFolder.mkdir()) {
logger.info("已生成插件存档文件夹");
slf4jLogger.info("已生成插件存档文件夹");
}
File configFile = new File(dataFolder, "config.yml");
if (!configFile.exists()) {
@@ -77,37 +78,42 @@ public class HamsterBallPlugin {
}
config = YamlConfig.load(configFile);
CoreVelocityAPI.init(config);
logger.info("已初始化 BallAPI");
slf4jLogger.info("已初始化 BallAPI");
} catch (Exception e) {
slf4jLogger.error("BallAPI 初始化失败", e);
proxyServer.shutdown(Component.text("由于 HamsterBall 初始化失败, 服务器将立即关闭"));
}
long time = System.currentTimeMillis() - start;
logger.info("仓鼠球初始化完成,总计耗时 " + time + " ms");
slf4jLogger.info("仓鼠球初始化完成,总计耗时 " + time + " ms");
}
@Subscribe(order = PostOrder.EARLY)
public void onProxyInitialization(ProxyInitializeEvent event) {
long start = System.currentTimeMillis();
java.util.logging.Logger logger = getLogger();
logger.info("仓鼠球正在启动");
slf4jLogger.info("仓鼠球正在启动");
try {
CoreVelocityAPI.getInstance().enable();
} catch (Exception e) {
logger.log(Level.SEVERE, "仓鼠球启动失败", e);
logger.info("由于仓鼠球启动失败,服务器将立即关闭");
slf4jLogger.error("仓鼠球启动失败", e);
slf4jLogger.info("由于仓鼠球启动失败,服务器将立即关闭");
proxyServer.shutdown(Component.text("仓鼠球启动失败"));
return;
}
CommandMeta commandMeta = proxyServer.getCommandManager()
.metaBuilder("hamster-ball")
.aliases("ball")
.plugin(this)
.build();
proxyServer.getCommandManager().register(commandMeta, VelocityBallCommand.INSTANCE);
BallAPI.getInstance().getEventBus().register(BallVelocityListener.INSTANCE);
logger.info("已注册监听器 BallVelocityListener");
slf4jLogger.info("已注册监听器 BallVelocityListener");
proxyServer.getEventManager().register(this, BallVelocityMainListener.INSTANCE);
logger.info("已注册监听器 BallVelocityMainListener");
slf4jLogger.info("已注册监听器 BallVelocityMainListener");
proxyServer.getEventManager().register(this, UpdatePlayerInfoListener.INSTANCE);
logger.info("已注册监听器 UpdatePlayerInfoListener");
slf4jLogger.info("已注册监听器 UpdatePlayerInfoListener");
if (config.getBoolean("auto-register-game-server", false)) {
BallAPI.getInstance().getEventBus().register(VelocityServerListener.INSTANCE);
logger.info("已注册监听器 VelocityServerListener");
slf4jLogger.info("已注册监听器 VelocityServerListener");
VelocityServerListener.INSTANCE.onEnable();
}
@@ -130,20 +136,19 @@ public class HamsterBallPlugin {
BallVelocityUtils.uploadPlayerInfo(playerInfo);
});
long time = System.currentTimeMillis() - start;
logger.info("仓鼠球启动完成,总计耗时 " + time + " ms");
slf4jLogger.info("仓鼠球启动完成,总计耗时 {} ms", time);
}
@Subscribe(order = PostOrder.LATE)
public void onProxyShutdown(ProxyShutdownEvent event) {
long start = System.currentTimeMillis();
java.util.logging.Logger logger = getLogger();
logger.info("仓鼠球正在关闭");
slf4jLogger.info("仓鼠球正在关闭");
try {
CoreVelocityAPI.getInstance().disable();
} catch (Exception e) {
logger.log(Level.SEVERE, "关闭仓鼠球时遇到了一个异常", e);
slf4jLogger.error("关闭仓鼠球时遇到了一个异常", e);
}
long time = System.currentTimeMillis() - start;
logger.info("仓鼠球已关闭,总计耗时 " + time + " ms");
slf4jLogger.info("仓鼠球已关闭,总计耗时 {} ms", time);
}
}

View File

@@ -0,0 +1,46 @@
package cn.hamster3.mc.plugin.ball.velocity.command;
import cn.hamster3.mc.plugin.ball.common.command.BallCommand;
import cn.hamster3.mc.plugin.ball.common.command.adapt.AdaptCommandSender;
import com.velocitypowered.api.command.CommandSource;
import com.velocitypowered.api.command.SimpleCommand;
import net.kyori.adventure.text.Component;
import org.jetbrains.annotations.NotNull;
import java.util.List;
public class VelocityBallCommand implements SimpleCommand {
public static final VelocityBallCommand INSTANCE = new VelocityBallCommand();
private VelocityBallCommand() {
}
@Override
public void execute(Invocation invocation) {
BallCommand.INSTANCE.onCommand(adaptCommandSender(invocation.source()), invocation.arguments());
}
@Override
public boolean hasPermission(Invocation invocation) {
return invocation.source().hasPermission("hamster.ball.admin");
}
@Override
public List<String> suggest(Invocation invocation) {
return BallCommand.INSTANCE.onTabComplete(adaptCommandSender(invocation.source()), invocation.arguments());
}
private AdaptCommandSender adaptCommandSender(@NotNull CommandSource source) {
return new AdaptCommandSender() {
@Override
public boolean hasPermission(@NotNull String permission) {
return source.hasPermission(permission);
}
@Override
public void sendMessage(@NotNull Component message) {
source.sendMessage(message);
}
};
}
}