feat: 修复跨服传送时的错误
This commit is contained in:
@@ -107,7 +107,7 @@ public class BallBukkitListener implements Listener, BallListener {
|
||||
SendPlayerToPlayerEvent event = CoreUtils.GSON.fromJson(info.getContent(), SendPlayerToPlayerEvent.class);
|
||||
Player toPlayer = Bukkit.getPlayer(event.getToPlayerUUID());
|
||||
if (toPlayer == null) {
|
||||
return;
|
||||
break;
|
||||
}
|
||||
Location location = toPlayer.getLocation();
|
||||
for (UUID uuid : event.getSendPlayerUUID()) {
|
||||
|
@@ -100,6 +100,23 @@ public final class BallBungeeCordListener implements Listener, BallListener {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SendPlayerToPlayerEvent.ACTION: {
|
||||
SendPlayerToPlayerEvent event = CoreUtils.GSON.fromJson(info.getContent(), SendPlayerToPlayerEvent.class);
|
||||
UUID toPlayerUUID = event.getToPlayerUUID();
|
||||
ProxiedPlayer toPlayer = ProxyServer.getInstance().getPlayer(toPlayerUUID);
|
||||
if (toPlayer == null) {
|
||||
HamsterBallPlugin.getInstance().getLogger().warning("试图传送玩家时失败: 目标玩家 " + toPlayerUUID + " 不在线!");
|
||||
break;
|
||||
}
|
||||
ServerInfo toServer = toPlayer.getServer().getInfo();
|
||||
for (UUID uuid : event.getSendPlayerUUID()) {
|
||||
ProxiedPlayer sendPlayer = ProxyServer.getInstance().getPlayer(uuid);
|
||||
if (sendPlayer.getServer().getInfo().getName().equals(toServer.getName())) {
|
||||
continue;
|
||||
}
|
||||
sendPlayer.connect(toServer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -58,7 +58,7 @@ public class BallServerChannelInitializer extends ChannelInitializer<SocketChann
|
||||
}
|
||||
|
||||
channel.pipeline()
|
||||
.addLast(new IdleStateHandler(10, 0, 0, TimeUnit.SECONDS))
|
||||
.addLast(new IdleStateHandler(60, 0, 0, TimeUnit.SECONDS))
|
||||
.addLast(new BallServerKeepAliveHandler())
|
||||
.addLast(new LengthFieldPrepender(8))
|
||||
.addLast(new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE, 0, 8, 0, 8))
|
||||
|
@@ -13,10 +13,10 @@ public class BallServerKeepAliveHandler extends SimpleUserEventChannelHandler<Id
|
||||
|
||||
@Override
|
||||
protected void eventReceived(ChannelHandlerContext context, IdleStateEvent event) {
|
||||
context.close();
|
||||
synchronized (BallServerChannelInitializer.CHANNELS) {
|
||||
BallServerChannelInitializer.CHANNELS.remove(context.channel());
|
||||
}
|
||||
context.close();
|
||||
LOGGER.warn("由于无法验证连接存活,与服务器 {} 的连接已断开.", context.channel().remoteAddress());
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user