From 1a7f30da5a9132bcb38c8e8bfcc833a0fc336010 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Mon, 30 Apr 2018 14:40:45 +0300 Subject: [PATCH] correct update player list --- core/src/main/java/mc/core/PlayerManager.java | 2 ++ .../core/embedded/InMemoryPlayerManager.java | 6 ++++++ .../proto_125/netty/PacketHandler.java | 19 ++++++++++++------- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/mc/core/PlayerManager.java b/core/src/main/java/mc/core/PlayerManager.java index 2ff210f..0edfd42 100644 --- a/core/src/main/java/mc/core/PlayerManager.java +++ b/core/src/main/java/mc/core/PlayerManager.java @@ -6,6 +6,7 @@ package mc.core; import mc.core.network.NetChannel; +import java.util.List; import java.util.Optional; public interface PlayerManager { @@ -13,5 +14,6 @@ public interface PlayerManager { void joinServer(Player player); void leftServer(Player player); Optional getPlayer(String name); + List getPlayers(); NetChannel getBroadcastChannel(); } diff --git a/core/src/main/java/mc/core/embedded/InMemoryPlayerManager.java b/core/src/main/java/mc/core/embedded/InMemoryPlayerManager.java index e3070e0..5e37129 100644 --- a/core/src/main/java/mc/core/embedded/InMemoryPlayerManager.java +++ b/core/src/main/java/mc/core/embedded/InMemoryPlayerManager.java @@ -14,6 +14,7 @@ import mc.core.network.NetChannel; import org.springframework.beans.factory.annotation.Autowired; import java.util.*; +import java.util.stream.Collectors; @Slf4j public class InMemoryPlayerManager implements PlayerManager, Runnable { @@ -60,6 +61,11 @@ public class InMemoryPlayerManager implements PlayerManager, Runnable { .findFirst(); } + @Override + public List getPlayers() { + return players.stream().filter(Player::isOnline).collect(Collectors.toList()); + } + @Override public NetChannel getBroadcastChannel() { return new BroadcastNetChannel(players.stream().filter(Player::isOnline)); diff --git a/proto125_netty/src/main/java/mc/core/network/proto_125/netty/PacketHandler.java b/proto125_netty/src/main/java/mc/core/network/proto_125/netty/PacketHandler.java index 711e0c9..97fbcbd 100644 --- a/proto125_netty/src/main/java/mc/core/network/proto_125/netty/PacketHandler.java +++ b/proto125_netty/src/main/java/mc/core/network/proto_125/netty/PacketHandler.java @@ -13,6 +13,7 @@ import io.netty.util.AttributeKey; import lombok.extern.slf4j.Slf4j; import mc.core.*; import mc.core.network.CSPacket; +import mc.core.network.NetChannel; import mc.core.network.proto_125.netty.wrappers.WrapperNetChannel; import mc.core.network.proto_125.packets.*; import org.slf4j.Marker; @@ -21,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired; import java.lang.reflect.Method; import java.util.Arrays; +import java.util.List; import java.util.Optional; @Slf4j @@ -109,13 +111,6 @@ public class PacketHandler extends SimpleChannelInboundHandler { abilitiesPkt.setInstantDestroyBlocks(true); channel.write(abilitiesPkt); - // send Player info - PlayerInfoPacket infoPkt = new PlayerInfoPacket(); - infoPkt.setPlayerName(player.getName()); - infoPkt.setOnline(true); - infoPkt.setPing(4); - channel.write(infoPkt); - // send Chunk allocation ChunkAllocationPacket chInitPkt = new ChunkAllocationPacket(); chInitPkt.setX(0); @@ -152,6 +147,16 @@ public class PacketHandler extends SimpleChannelInboundHandler { channel.attr(ATTR_PLAYER).set(player); player.setChannel(new WrapperNetChannel(channel)); playerManager.joinServer(player); + + // send Player info + List players = playerManager.getPlayers(); + players.forEach(pl -> { + PlayerInfoPacket infoPkt = new PlayerInfoPacket(); + infoPkt.setPlayerName(pl.getName()); + infoPkt.setOnline(true); + infoPkt.setPing(4); + playerManager.getBroadcastChannel().writeAndFlush(infoPkt); + }); } public void onKickPacket(Channel channel, KickPacket packet) {