Convert map of players to list (may address #833)

This commit is contained in:
RednedEpic 2020-07-06 20:11:34 -05:00
parent 699402e635
commit 24f9651cc6
9 changed files with 23 additions and 26 deletions

View file

@ -47,7 +47,7 @@ public class GeyserSpigotBlockPlaceListener implements Listener {
@EventHandler @EventHandler
public void place(final BlockPlaceEvent event) { public void place(final BlockPlaceEvent event) {
for (GeyserSession session : connector.getPlayers().values()) { for (GeyserSession session : connector.getPlayers()) {
if (event.getPlayer() == Bukkit.getPlayer(session.getPlayerEntity().getUsername())) { if (event.getPlayer() == Bukkit.getPlayer(session.getPlayerEntity().getUsername())) {
LevelSoundEventPacket placeBlockSoundPacket = new LevelSoundEventPacket(); LevelSoundEventPacket placeBlockSoundPacket = new LevelSoundEventPacket();
placeBlockSoundPacket.setSound(SoundEvent.PLACE); placeBlockSoundPacket.setSound(SoundEvent.PLACE);

View file

@ -42,7 +42,6 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.PrintStream; import java.io.PrintStream;
import java.net.InetSocketAddress;
import java.net.URL; import java.net.URL;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -292,10 +291,10 @@ public class GeyserStandaloneGUI {
// Update player table // Update player table
playerTableModel.getDataVector().removeAllElements(); playerTableModel.getDataVector().removeAllElements();
for (Map.Entry<InetSocketAddress, GeyserSession> player : GeyserConnector.getInstance().getPlayers().entrySet()) { for (GeyserSession player : GeyserConnector.getInstance().getPlayers()) {
Vector row = new Vector(); Vector row = new Vector();
row.add(player.getKey().getHostName()); row.add(player.getSocketAddress().getHostName());
row.add(player.getValue().getPlayerEntity().getUsername()); row.add(player.getPlayerEntity().getUsername());
playerTableModel.addRow(row); playerTableModel.addRow(row);
} }

View file

@ -59,8 +59,8 @@ import org.geysermc.connector.utils.LocaleUtils;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.HashMap; import java.util.ArrayList;
import java.util.Map; import java.util.List;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
@ -76,7 +76,7 @@ public class GeyserConnector {
public static final String NAME = "Geyser"; public static final String NAME = "Geyser";
public static final String VERSION = "DEV"; // A fallback for running in IDEs public static final String VERSION = "DEV"; // A fallback for running in IDEs
private final Map<InetSocketAddress, GeyserSession> players = new HashMap<>(); private final List<GeyserSession> players = new ArrayList<>();
private static GeyserConnector instance; private static GeyserConnector instance;
@ -185,7 +185,7 @@ public class GeyserConnector {
if (players.size() >= 1) { if (players.size() >= 1) {
bootstrap.getGeyserLogger().info(LanguageUtils.getLocaleStringLog("geyser.core.shutdown.kick.log", players.size())); bootstrap.getGeyserLogger().info(LanguageUtils.getLocaleStringLog("geyser.core.shutdown.kick.log", players.size()));
for (GeyserSession playerSession : players.values()) { for (GeyserSession playerSession : players) {
playerSession.disconnect(LanguageUtils.getPlayerLocaleString("geyser.core.shutdown.kick.message", playerSession.getClientData().getLanguageCode())); playerSession.disconnect(LanguageUtils.getPlayerLocaleString("geyser.core.shutdown.kick.message", playerSession.getClientData().getLanguageCode()));
} }
@ -227,11 +227,11 @@ public class GeyserConnector {
} }
public void addPlayer(GeyserSession player) { public void addPlayer(GeyserSession player) {
players.put(player.getSocketAddress(), player); players.add(player);
} }
public void removePlayer(GeyserSession player) { public void removePlayer(GeyserSession player) {
players.remove(player.getSocketAddress()); players.remove(player);
} }
public static GeyserConnector start(PlatformType platformType, GeyserBootstrap bootstrap) { public static GeyserConnector start(PlatformType platformType, GeyserBootstrap bootstrap) {

View file

@ -47,9 +47,9 @@ public class ListCommand extends GeyserCommand {
public void execute(CommandSender sender, String[] args) { public void execute(CommandSender sender, String[] args) {
String message = ""; String message = "";
if (sender instanceof GeyserSession) { if (sender instanceof GeyserSession) {
message = LanguageUtils.getPlayerLocaleString("geyser.commands.list.message", ((GeyserSession) sender).getClientData().getLanguageCode(), connector.getPlayers().size(), connector.getPlayers().values().stream().map(GeyserSession::getName).collect(Collectors.joining(" "))); message = LanguageUtils.getPlayerLocaleString("geyser.commands.list.message", ((GeyserSession) sender).getClientData().getLanguageCode(), connector.getPlayers().size(), connector.getPlayers().stream().map(GeyserSession::getName).collect(Collectors.joining(" ")));
} else { } else {
message = LanguageUtils.getLocaleStringLog("geyser.commands.list.message", connector.getPlayers().size(), connector.getPlayers().values().stream().map(GeyserSession::getName).collect(Collectors.joining(" "))); message = LanguageUtils.getLocaleStringLog("geyser.commands.list.message", connector.getPlayers().size(), connector.getPlayers().stream().map(GeyserSession::getName).collect(Collectors.joining(" ")));
} }
sender.sendMessage(message); sender.sendMessage(message);

View file

@ -59,7 +59,7 @@ public class OffhandCommand extends GeyserCommand {
return; return;
} }
// Needed for Bukkit - sender is not an instance of GeyserSession // Needed for Bukkit - sender is not an instance of GeyserSession
for (GeyserSession session : connector.getPlayers().values()) { for (GeyserSession session : connector.getPlayers()) {
if (sender.getName().equals(session.getPlayerEntity().getUsername())) { if (sender.getName().equals(session.getPlayerEntity().getUsername())) {
ClientPlayerActionPacket releaseItemPacket = new ClientPlayerActionPacket(PlayerAction.SWAP_HANDS, new Position(0,0,0), ClientPlayerActionPacket releaseItemPacket = new ClientPlayerActionPacket(PlayerAction.SWAP_HANDS, new Position(0,0,0),
BlockFace.DOWN); BlockFace.DOWN);

View file

@ -56,7 +56,7 @@ public class ReloadCommand extends GeyserCommand {
sender.sendMessage(message); sender.sendMessage(message);
for (GeyserSession session : connector.getPlayers().values()) { for (GeyserSession session : connector.getPlayers()) {
session.disconnect(LanguageUtils.getPlayerLocaleString("geyser.commands.reload.kick", session.getClientData().getLanguageCode())); session.disconnect(LanguageUtils.getPlayerLocaleString("geyser.commands.reload.kick", session.getClientData().getLanguageCode()));
} }
connector.reload(); connector.reload();

View file

@ -37,7 +37,7 @@ public class FishingHookEntity extends Entity {
public FishingHookEntity(long entityId, long geyserId, EntityType entityType, Vector3f position, Vector3f motion, Vector3f rotation, ProjectileData data) { public FishingHookEntity(long entityId, long geyserId, EntityType entityType, Vector3f position, Vector3f motion, Vector3f rotation, ProjectileData data) {
super(entityId, geyserId, entityType, position, motion, rotation); super(entityId, geyserId, entityType, position, motion, rotation);
for (GeyserSession session : GeyserConnector.getInstance().getPlayers().values()) { for (GeyserSession session : GeyserConnector.getInstance().getPlayers()) {
Entity entity = session.getEntityCache().getEntityByJavaId(data.getOwnerId()); Entity entity = session.getEntityCache().getEntityByJavaId(data.getOwnerId());
if (entity == null && session.getPlayerEntity().getEntityId() == data.getOwnerId()) { if (entity == null && session.getPlayerEntity().getEntityId() == data.getOwnerId()) {
entity = session.getPlayerEntity(); entity = session.getPlayerEntity();

View file

@ -108,15 +108,6 @@ public class ConnectorServerEventHandler implements BedrockServerEventHandler {
public void onSessionCreation(BedrockServerSession bedrockServerSession) { public void onSessionCreation(BedrockServerSession bedrockServerSession) {
bedrockServerSession.setLogging(true); bedrockServerSession.setLogging(true);
bedrockServerSession.setPacketHandler(new UpstreamPacketHandler(connector, new GeyserSession(connector, bedrockServerSession))); bedrockServerSession.setPacketHandler(new UpstreamPacketHandler(connector, new GeyserSession(connector, bedrockServerSession)));
bedrockServerSession.addDisconnectHandler(disconnectReason -> {
connector.getLogger().info(LanguageUtils.getLocaleStringLog("geyser.network.disconnect", bedrockServerSession.getAddress().getAddress(), disconnectReason));
GeyserSession player = connector.getPlayers().get(bedrockServerSession.getAddress());
if (player != null) {
player.disconnect(disconnectReason.name());
connector.removePlayer(player);
}
});
bedrockServerSession.setPacketCodec(GeyserConnector.BEDROCK_PACKET_CODEC); bedrockServerSession.setPacketCodec(GeyserConnector.BEDROCK_PACKET_CODEC);
} }

View file

@ -210,6 +210,13 @@ public class GeyserSession implements CommandSender {
this.loggedIn = false; this.loggedIn = false;
this.inventoryCache.getInventories().put(0, inventory); this.inventoryCache.getInventories().put(0, inventory);
bedrockServerSession.addDisconnectHandler(disconnectReason -> {
connector.getLogger().info(LanguageUtils.getLocaleStringLog("geyser.network.disconnect", bedrockServerSession.getAddress().getAddress(), disconnectReason));
disconnect(disconnectReason.name());
connector.removePlayer(this);
});
} }
public void connect(RemoteServer remoteServer) { public void connect(RemoteServer remoteServer) {
@ -428,7 +435,7 @@ public class GeyserSession implements CommandSender {
downstream.getSession().disconnect(reason); downstream.getSession().disconnect(reason);
} }
if (upstream != null && !upstream.isClosed()) { if (upstream != null && !upstream.isClosed()) {
connector.getPlayers().remove(this.upstream.getAddress()); connector.getPlayers().remove(this);
upstream.disconnect(reason); upstream.disconnect(reason);
} }
} }