forked from GeyserMC/Geyser
Attempt to reduce memory usage and fix not being disconnected from Java
This commit is contained in:
parent
20dda985bc
commit
7571df9903
7 changed files with 29 additions and 9 deletions
|
@ -67,7 +67,7 @@ public interface Connector {
|
||||||
*
|
*
|
||||||
* @return a collection of the connected players
|
* @return a collection of the connected players
|
||||||
*/
|
*/
|
||||||
Collection<Player> getConnectedPlayers();
|
Collection<? extends Player> getConnectedPlayers();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shuts down the connector
|
* Shuts down the connector
|
||||||
|
|
|
@ -97,7 +97,7 @@ public class Geyser {
|
||||||
*
|
*
|
||||||
* @return a collection of the connected players
|
* @return a collection of the connected players
|
||||||
*/
|
*/
|
||||||
public static Collection<Player> getConnectedPlayers() {
|
public static Collection<? extends Player> getConnectedPlayers() {
|
||||||
return connector.getConnectedPlayers();
|
return connector.getConnectedPlayers();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,7 @@ import org.geysermc.connector.console.GeyserLogger;
|
||||||
import org.geysermc.connector.metrics.Metrics;
|
import org.geysermc.connector.metrics.Metrics;
|
||||||
import org.geysermc.connector.network.ConnectorServerEventHandler;
|
import org.geysermc.connector.network.ConnectorServerEventHandler;
|
||||||
import org.geysermc.connector.network.remote.RemoteJavaServer;
|
import org.geysermc.connector.network.remote.RemoteJavaServer;
|
||||||
|
import org.geysermc.connector.network.session.GeyserSession;
|
||||||
import org.geysermc.connector.network.translators.TranslatorsInit;
|
import org.geysermc.connector.network.translators.TranslatorsInit;
|
||||||
import org.geysermc.connector.plugin.GeyserPluginLoader;
|
import org.geysermc.connector.plugin.GeyserPluginLoader;
|
||||||
import org.geysermc.connector.plugin.GeyserPluginManager;
|
import org.geysermc.connector.plugin.GeyserPluginManager;
|
||||||
|
@ -71,7 +72,7 @@ public class GeyserConnector implements Connector {
|
||||||
public static final String NAME = "Geyser";
|
public static final String NAME = "Geyser";
|
||||||
public static final String VERSION = "1.0-SNAPSHOT";
|
public static final String VERSION = "1.0-SNAPSHOT";
|
||||||
|
|
||||||
private final Map<Object, Player> players = new HashMap<>();
|
private final Map<Object, GeyserSession> players = new HashMap<>();
|
||||||
|
|
||||||
private static GeyserConnector instance;
|
private static GeyserConnector instance;
|
||||||
|
|
||||||
|
@ -165,8 +166,9 @@ public class GeyserConnector implements Connector {
|
||||||
logger.info(String.format("Done (%ss)! Run /help for help!", new DecimalFormat("#.###").format(completeTime)));
|
logger.info(String.format("Done (%ss)! Run /help for help!", new DecimalFormat("#.###").format(completeTime)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<Player> getConnectedPlayers() {
|
@Override
|
||||||
return new ArrayList<>(players.values());
|
public Collection<? extends Player> getConnectedPlayers() {
|
||||||
|
return players.values();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void shutdown() {
|
public void shutdown() {
|
||||||
|
@ -182,13 +184,13 @@ public class GeyserConnector implements Connector {
|
||||||
System.exit(0);
|
System.exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addPlayer(Player player) {
|
public void addPlayer(GeyserSession player) {
|
||||||
players.put(player.getAuthenticationData().getName(), player);
|
players.put(player.getAuthenticationData().getName(), player);
|
||||||
players.put(player.getAuthenticationData().getUUID(), player);
|
players.put(player.getAuthenticationData().getUUID(), player);
|
||||||
players.put(player.getSocketAddress(), player);
|
players.put(player.getSocketAddress(), player);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removePlayer(Player player) {
|
public void removePlayer(GeyserSession player) {
|
||||||
players.remove(player.getAuthenticationData().getName());
|
players.remove(player.getAuthenticationData().getName());
|
||||||
players.remove(player.getAuthenticationData().getUUID());
|
players.remove(player.getAuthenticationData().getUUID());
|
||||||
players.remove(player.getSocketAddress());
|
players.remove(player.getSocketAddress());
|
||||||
|
|
|
@ -106,10 +106,15 @@ public class ConnectorServerEventHandler implements BedrockServerEventHandler {
|
||||||
bedrockServerSession.addDisconnectHandler(disconnectReason -> {
|
bedrockServerSession.addDisconnectHandler(disconnectReason -> {
|
||||||
GeyserLogger.DEFAULT.info("Bedrock user with ip: " + bedrockServerSession.getAddress().getAddress() + " has disconnected for reason " + disconnectReason);
|
GeyserLogger.DEFAULT.info("Bedrock user with ip: " + bedrockServerSession.getAddress().getAddress() + " has disconnected for reason " + disconnectReason);
|
||||||
|
|
||||||
Player player = connector.getPlayers().get(bedrockServerSession.getAddress());
|
GeyserSession player = connector.getPlayers().get(bedrockServerSession.getAddress());
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
player.disconnect(disconnectReason.name());
|
player.disconnect(disconnectReason.name());
|
||||||
connector.removePlayer(player);
|
connector.removePlayer(player);
|
||||||
|
|
||||||
|
player.getEntityCache().clear();
|
||||||
|
player.getInventoryCache().getInventories().clear();
|
||||||
|
player.getWindowCache().getWindows().clear();
|
||||||
|
player.getScoreboardCache().removeScoreboard();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
bedrockServerSession.setPacketCodec(GeyserConnector.BEDROCK_PACKET_CODEC);
|
bedrockServerSession.setPacketCodec(GeyserConnector.BEDROCK_PACKET_CODEC);
|
||||||
|
|
|
@ -133,7 +133,6 @@ public class GeyserSession implements Player {
|
||||||
|
|
||||||
public void authenticate(String username) {
|
public void authenticate(String username) {
|
||||||
authenticate(username, "");
|
authenticate(username, "");
|
||||||
connector.addPlayer(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void authenticate(String username, String password) {
|
public void authenticate(String username, String password) {
|
||||||
|
@ -182,6 +181,7 @@ public class GeyserSession implements Player {
|
||||||
});
|
});
|
||||||
|
|
||||||
downstream.getSession().connect();
|
downstream.getSession().connect();
|
||||||
|
connector.addPlayer(this);
|
||||||
} catch (RequestException ex) {
|
} catch (RequestException ex) {
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,10 +16,16 @@ public class UpstreamSession {
|
||||||
private boolean initialized = false;
|
private boolean initialized = false;
|
||||||
|
|
||||||
public void sendPacket(@NonNull BedrockPacket packet) {
|
public void sendPacket(@NonNull BedrockPacket packet) {
|
||||||
|
if (isClosed())
|
||||||
|
return;
|
||||||
|
|
||||||
session.sendPacket(packet);
|
session.sendPacket(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendPacketImmediately(@NonNull BedrockPacket packet) {
|
public void sendPacketImmediately(@NonNull BedrockPacket packet) {
|
||||||
|
if (isClosed())
|
||||||
|
return;
|
||||||
|
|
||||||
session.sendPacketImmediately(packet);
|
session.sendPacketImmediately(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -117,4 +117,11 @@ public class EntityCache {
|
||||||
public long removeBossBar(UUID uuid) {
|
public long removeBossBar(UUID uuid) {
|
||||||
return bossbars.remove(uuid);
|
return bossbars.remove(uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void clear() {
|
||||||
|
entities = null;
|
||||||
|
entityIdTranslations = null;
|
||||||
|
playerEntities = null;
|
||||||
|
bossbars = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue