perf: 重写部分代码
This commit is contained in:
@@ -39,6 +39,13 @@ public class HamsterBallPlugin extends JavaPlugin {
|
|||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
Logger logger = getLogger();
|
Logger logger = getLogger();
|
||||||
|
if (!BallAPI.getInstance().isConnected()) {
|
||||||
|
sync(() -> {
|
||||||
|
logger.info("由于 HamsterBall 未能成功连接, 服务器将立即关闭.");
|
||||||
|
Bukkit.shutdown();
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
||||||
PlaceholderHook.INSTANCE.register();
|
PlaceholderHook.INSTANCE.register();
|
||||||
logger.info("已挂载 PlaceholderAPI 变量!");
|
logger.info("已挂载 PlaceholderAPI 变量!");
|
||||||
|
@@ -36,6 +36,10 @@ public class HamsterBallPlugin extends Plugin {
|
|||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
Logger logger = getLogger();
|
Logger logger = getLogger();
|
||||||
|
if (!BallAPI.getInstance().isConnected()) {
|
||||||
|
ProxyServer.getInstance().stop("由于 HamsterBall 未能成功连接, 服务器将立即关闭.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
ProxyServer.getInstance().getPluginManager().registerListener(this, BallBungeeCordListener.INSTANCE);
|
ProxyServer.getInstance().getPluginManager().registerListener(this, BallBungeeCordListener.INSTANCE);
|
||||||
logger.info("已注册 BallBungeeCordListener.");
|
logger.info("已注册 BallBungeeCordListener.");
|
||||||
BallAPI.getInstance().sendBallMessage(
|
BallAPI.getInstance().sendBallMessage(
|
||||||
@@ -44,7 +48,8 @@ public class HamsterBallPlugin extends Plugin {
|
|||||||
new ServerOnlineEvent(BallAPI.getInstance().getLocalServerInfo())
|
new ServerOnlineEvent(BallAPI.getInstance().getLocalServerInfo())
|
||||||
);
|
);
|
||||||
logger.info("HamsterBall 已启动.");
|
logger.info("HamsterBall 已启动.");
|
||||||
BallAPI.getInstance().getAllPlayerInfo().values().stream()
|
BallAPI.getInstance().getAllPlayerInfo().values()
|
||||||
|
.stream()
|
||||||
.filter(BallPlayerInfo::isOnline)
|
.filter(BallPlayerInfo::isOnline)
|
||||||
.filter(o -> BallAPI.getInstance().isLocalServer(o.getProxyServer()))
|
.filter(o -> BallAPI.getInstance().isLocalServer(o.getProxyServer()))
|
||||||
.forEach(playerInfo -> {
|
.forEach(playerInfo -> {
|
||||||
|
@@ -56,14 +56,17 @@ public abstract class BallAPI {
|
|||||||
private final Bootstrap bootstrap;
|
private final Bootstrap bootstrap;
|
||||||
@NotNull
|
@NotNull
|
||||||
private final EventLoopGroup executors;
|
private final EventLoopGroup executors;
|
||||||
protected boolean enabled;
|
|
||||||
protected Channel channel;
|
protected Channel channel;
|
||||||
|
private boolean enabled;
|
||||||
|
private boolean connected;
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private List<BallListener> listeners;
|
private List<BallListener> listeners;
|
||||||
|
|
||||||
protected BallAPI(@NotNull BallConfig config) {
|
protected BallAPI(@NotNull BallConfig config) {
|
||||||
this.config = config;
|
this.config = config;
|
||||||
this.enabled = false;
|
this.enabled = false;
|
||||||
|
this.connected = false;
|
||||||
|
|
||||||
serverInfo = new ConcurrentHashMap<>();
|
serverInfo = new ConcurrentHashMap<>();
|
||||||
playerInfo = new ConcurrentHashMap<>();
|
playerInfo = new ConcurrentHashMap<>();
|
||||||
@@ -154,6 +157,7 @@ public abstract class BallAPI {
|
|||||||
@Override
|
@Override
|
||||||
public void onConnectRefused() {
|
public void onConnectRefused() {
|
||||||
enabled = false;
|
enabled = false;
|
||||||
|
connected = false;
|
||||||
executors.shutdownGracefully();
|
executors.shutdownGracefully();
|
||||||
getLogger().info("连接至服务中心的请求被拒绝,已关闭仓鼠球。");
|
getLogger().info("连接至服务中心的请求被拒绝,已关闭仓鼠球。");
|
||||||
}
|
}
|
||||||
@@ -252,6 +256,7 @@ public abstract class BallAPI {
|
|||||||
ChannelFuture future = bootstrap.connect(config.getHost(), config.getPort()).await();
|
ChannelFuture future = bootstrap.connect(config.getHost(), config.getPort()).await();
|
||||||
if (future.isSuccess()) {
|
if (future.isSuccess()) {
|
||||||
channel = future.channel();
|
channel = future.channel();
|
||||||
|
connected = true;
|
||||||
for (BallListener listener : listeners) {
|
for (BallListener listener : listeners) {
|
||||||
listener.onConnectActive();
|
listener.onConnectActive();
|
||||||
}
|
}
|
||||||
@@ -269,6 +274,7 @@ public abstract class BallAPI {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
channel = null;
|
channel = null;
|
||||||
|
connected = false;
|
||||||
if (tryCount <= 0) {
|
if (tryCount <= 0) {
|
||||||
for (BallListener listener : getListeners()) {
|
for (BallListener listener : getListeners()) {
|
||||||
try {
|
try {
|
||||||
@@ -281,7 +287,7 @@ public abstract class BallAPI {
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
connect();
|
connect();
|
||||||
} catch (InterruptedException e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
if (channel != null) {
|
if (channel != null) {
|
||||||
@@ -320,6 +326,7 @@ public abstract class BallAPI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
channel = null;
|
channel = null;
|
||||||
|
connected = false;
|
||||||
executors.shutdownGracefully().await();
|
executors.shutdownGracefully().await();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -813,6 +820,11 @@ public abstract class BallAPI {
|
|||||||
return info.getName();
|
return info.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
|
||||||
|
public boolean isConnected() {
|
||||||
|
return connected;
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public Map<String, BallServerInfo> getAllServerInfo() {
|
public Map<String, BallServerInfo> getAllServerInfo() {
|
||||||
return serverInfo;
|
return serverInfo;
|
||||||
|
Reference in New Issue
Block a user