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);
|
SendPlayerToPlayerEvent event = CoreUtils.GSON.fromJson(info.getContent(), SendPlayerToPlayerEvent.class);
|
||||||
Player toPlayer = Bukkit.getPlayer(event.getToPlayerUUID());
|
Player toPlayer = Bukkit.getPlayer(event.getToPlayerUUID());
|
||||||
if (toPlayer == null) {
|
if (toPlayer == null) {
|
||||||
return;
|
break;
|
||||||
}
|
}
|
||||||
Location location = toPlayer.getLocation();
|
Location location = toPlayer.getLocation();
|
||||||
for (UUID uuid : event.getSendPlayerUUID()) {
|
for (UUID uuid : event.getSendPlayerUUID()) {
|
||||||
|
@@ -100,6 +100,23 @@ public final class BallBungeeCordListener implements Listener, BallListener {
|
|||||||
}
|
}
|
||||||
break;
|
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()
|
channel.pipeline()
|
||||||
.addLast(new IdleStateHandler(10, 0, 0, TimeUnit.SECONDS))
|
.addLast(new IdleStateHandler(60, 0, 0, TimeUnit.SECONDS))
|
||||||
.addLast(new BallServerKeepAliveHandler())
|
.addLast(new BallServerKeepAliveHandler())
|
||||||
.addLast(new LengthFieldPrepender(8))
|
.addLast(new LengthFieldPrepender(8))
|
||||||
.addLast(new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE, 0, 8, 0, 8))
|
.addLast(new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE, 0, 8, 0, 8))
|
||||||
|
@@ -13,10 +13,10 @@ public class BallServerKeepAliveHandler extends SimpleUserEventChannelHandler<Id
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void eventReceived(ChannelHandlerContext context, IdleStateEvent event) {
|
protected void eventReceived(ChannelHandlerContext context, IdleStateEvent event) {
|
||||||
context.close();
|
|
||||||
synchronized (BallServerChannelInitializer.CHANNELS) {
|
synchronized (BallServerChannelInitializer.CHANNELS) {
|
||||||
BallServerChannelInitializer.CHANNELS.remove(context.channel());
|
BallServerChannelInitializer.CHANNELS.remove(context.channel());
|
||||||
}
|
}
|
||||||
|
context.close();
|
||||||
LOGGER.warn("由于无法验证连接存活,与服务器 {} 的连接已断开.", context.channel().remoteAddress());
|
LOGGER.warn("由于无法验证连接存活,与服务器 {} 的连接已断开.", context.channel().remoteAddress());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user