mirror of
https://github.com/GeyserMC/GeyserConnect.git
synced 2025-06-26 14:15:22 +02:00
Update to latest Geyser changes; clean up
This commit is contained in:
parent
e76c822442
commit
1f9f2e1eb5
3 changed files with 12 additions and 30 deletions
|
@ -25,13 +25,11 @@
|
||||||
|
|
||||||
package org.geysermc.connect;
|
package org.geysermc.connect;
|
||||||
|
|
||||||
import com.google.common.cache.Cache;
|
|
||||||
import com.google.common.cache.CacheBuilder;
|
|
||||||
import com.nukkitx.protocol.bedrock.*;
|
import com.nukkitx.protocol.bedrock.*;
|
||||||
import io.netty.channel.DefaultEventLoopGroup;
|
import io.netty.channel.DefaultEventLoopGroup;
|
||||||
import io.netty.util.concurrent.DefaultThreadFactory;
|
import io.netty.util.concurrent.DefaultThreadFactory;
|
||||||
|
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
|
||||||
import org.geysermc.connect.storage.DisabledStorageManager;
|
import org.geysermc.connect.storage.DisabledStorageManager;
|
||||||
import org.geysermc.connect.utils.Server;
|
import org.geysermc.connect.utils.Server;
|
||||||
import org.geysermc.connect.utils.ServerCategory;
|
import org.geysermc.connect.utils.ServerCategory;
|
||||||
|
@ -49,7 +47,6 @@ import java.net.InetSocketAddress;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class MasterServer {
|
public class MasterServer {
|
||||||
|
@ -69,15 +66,7 @@ public class MasterServer {
|
||||||
private final ScheduledExecutorService generalThreadPool;
|
private final ScheduledExecutorService generalThreadPool;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private final Map<String, Player> players = new HashMap<>();
|
private final List<Player> players = new ObjectArrayList<>();
|
||||||
|
|
||||||
/**
|
|
||||||
* Players that are transferring and are expected to rejoin on the Geyser side.
|
|
||||||
*/
|
|
||||||
@Getter
|
|
||||||
private final Cache<String, Player> transferringPlayers = CacheBuilder.newBuilder()
|
|
||||||
.expireAfterWrite(1, TimeUnit.MINUTES)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private GeyserProxyBootstrap geyserProxy;
|
private GeyserProxyBootstrap geyserProxy;
|
||||||
|
@ -88,10 +77,6 @@ public class MasterServer {
|
||||||
@Getter
|
@Getter
|
||||||
private AbstractStorageManager storageManager;
|
private AbstractStorageManager storageManager;
|
||||||
|
|
||||||
@Setter
|
|
||||||
@Getter
|
|
||||||
private long lastDisconnectTime = 0L;
|
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private final DefaultEventLoopGroup eventLoopGroup = new DefaultEventLoopGroup(new DefaultThreadFactory("Geyser player thread"));
|
private final DefaultEventLoopGroup eventLoopGroup = new DefaultEventLoopGroup(new DefaultThreadFactory("Geyser player thread"));
|
||||||
|
|
||||||
|
@ -110,7 +95,8 @@ public class MasterServer {
|
||||||
|
|
||||||
logger.setDebug(geyserConnectConfig.isDebugMode());
|
logger.setDebug(geyserConnectConfig.isDebugMode());
|
||||||
|
|
||||||
this.generalThreadPool = Executors.newScheduledThreadPool(32);
|
// As this is only used for fixing the form image bug, we don't need to handle many threads
|
||||||
|
this.generalThreadPool = Executors.newSingleThreadScheduledExecutor();
|
||||||
|
|
||||||
// Start a timer to keep the thread running
|
// Start a timer to keep the thread running
|
||||||
Timer timer = new Timer();
|
Timer timer = new Timer();
|
||||||
|
@ -156,10 +142,7 @@ public class MasterServer {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BedrockPong onQuery(InetSocketAddress address) {
|
public BedrockPong onQuery(InetSocketAddress address) {
|
||||||
int playerCount = players.size();
|
int playerCount = players.size() + GeyserConnector.getInstance().getSessionManager().size();
|
||||||
if (GeyserConnector.getInstance() != null) {
|
|
||||||
playerCount += GeyserConnector.getInstance().getPlayers().size();
|
|
||||||
}
|
|
||||||
|
|
||||||
String subMotd = geyserConnectConfig.getSubmotd();
|
String subMotd = geyserConnectConfig.getSubmotd();
|
||||||
if (subMotd == null || subMotd.isEmpty()) {
|
if (subMotd == null || subMotd.isEmpty()) {
|
||||||
|
|
|
@ -60,7 +60,7 @@ import org.geysermc.cumulus.response.SimpleFormResponse;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.security.interfaces.ECPublicKey;
|
import java.security.interfaces.ECPublicKey;
|
||||||
import java.util.ArrayList;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
@ -86,10 +86,7 @@ public class PacketHandler implements BedrockPacketHandler {
|
||||||
masterServer.getLogger().info(player.getAuthData().getName() + " has disconnected from the master server (" + reason + ")");
|
masterServer.getLogger().info(player.getAuthData().getName() + " has disconnected from the master server (" + reason + ")");
|
||||||
masterServer.getStorageManager().saveServers(player);
|
masterServer.getStorageManager().saveServers(player);
|
||||||
|
|
||||||
if (player.getCurrentServer() != null && !player.getCurrentServer().isBedrock()) {
|
masterServer.getPlayers().remove(player);
|
||||||
masterServer.getTransferringPlayers().put(player.getAuthData().getXboxUUID(), player);
|
|
||||||
}
|
|
||||||
masterServer.getPlayers().remove(player.getAuthData().getXboxUUID(), player);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -181,7 +178,7 @@ public class PacketHandler implements BedrockPacketHandler {
|
||||||
|
|
||||||
// Create a new player and add it to the players list
|
// Create a new player and add it to the players list
|
||||||
player = new Player(authData, session);
|
player = new Player(authData, session);
|
||||||
masterServer.getPlayers().put(player.getAuthData().getXboxUUID(), player);
|
masterServer.getPlayers().add(player);
|
||||||
|
|
||||||
// Store the full client data
|
// Store the full client data
|
||||||
player.setClientData(OBJECT_MAPPER.convertValue(OBJECT_MAPPER.readTree(skinData.getPayload().toBytes()), BedrockClientData.class));
|
player.setClientData(OBJECT_MAPPER.convertValue(OBJECT_MAPPER.readTree(skinData.getPayload().toBytes()), BedrockClientData.class));
|
||||||
|
@ -358,8 +355,7 @@ public class PacketHandler implements BedrockPacketHandler {
|
||||||
// This is to fix a bug in the client where it doesn't load form images
|
// This is to fix a bug in the client where it doesn't load form images
|
||||||
UpdateAttributesPacket updateAttributesPacket = new UpdateAttributesPacket();
|
UpdateAttributesPacket updateAttributesPacket = new UpdateAttributesPacket();
|
||||||
updateAttributesPacket.setRuntimeEntityId(1);
|
updateAttributesPacket.setRuntimeEntityId(1);
|
||||||
List<AttributeData> attributes = new ArrayList<>();
|
List<AttributeData> attributes = Collections.singletonList(GeyserAttributeType.EXPERIENCE_LEVEL.getAttribute(0f));
|
||||||
attributes.add(GeyserAttributeType.EXPERIENCE_LEVEL.getAttribute(0f));
|
|
||||||
updateAttributesPacket.setAttributes(attributes);
|
updateAttributesPacket.setAttributes(attributes);
|
||||||
|
|
||||||
// Doesn't work 100% of the time but fixes it most of the time
|
// Doesn't work 100% of the time but fixes it most of the time
|
||||||
|
|
|
@ -230,6 +230,9 @@ public class Player {
|
||||||
} else {
|
} else {
|
||||||
GeyserProxySession geyserSession = new GeyserProxySession(GeyserConnector.getInstance(), session, MasterServer.getInstance().getEventLoopGroup().next());
|
GeyserProxySession geyserSession = new GeyserProxySession(GeyserConnector.getInstance(), session, MasterServer.getInstance().getEventLoopGroup().next());
|
||||||
session.setPacketHandler(new UpstreamPacketHandler(GeyserConnector.getInstance(), geyserSession));
|
session.setPacketHandler(new UpstreamPacketHandler(GeyserConnector.getInstance(), geyserSession));
|
||||||
|
// The player will be tracked from Geyser from here
|
||||||
|
MasterServer.getInstance().getPlayers().remove(this);
|
||||||
|
GeyserConnector.getInstance().getSessionManager().addPendingSession(geyserSession);
|
||||||
|
|
||||||
geyserSession.getUpstream().getSession().setPacketCodec(session.getPacketCodec());
|
geyserSession.getUpstream().getSession().setPacketCodec(session.getPacketCodec());
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue