forked from GeyserMC/Geyser
Convert map of players to list (may address #833)
This commit is contained in:
parent
699402e635
commit
24f9651cc6
9 changed files with 23 additions and 26 deletions
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue