feat: 添加管理员指令
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user