diff --git a/pom.xml b/pom.xml
index 2bcd39f..16c4e83 100644
--- a/pom.xml
+++ b/pom.xml
@@ -68,7 +68,7 @@
org.geysermc
connector
- 1.4.1-SNAPSHOT
+ 1.4.2-SNAPSHOT
com.nukkitx.network
diff --git a/src/main/java/org/geysermc/connect/GeyserConnectConfig.java b/src/main/java/org/geysermc/connect/GeyserConnectConfig.java
index 753a7b0..29efa87 100644
--- a/src/main/java/org/geysermc/connect/GeyserConnectConfig.java
+++ b/src/main/java/org/geysermc/connect/GeyserConnectConfig.java
@@ -25,11 +25,9 @@
package org.geysermc.connect;
-
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
-import org.geysermc.connect.utils.WebUtils;
import org.geysermc.connect.storage.AbstractStorageManager;
import org.geysermc.connect.utils.Server;
diff --git a/src/main/java/org/geysermc/connect/MasterServer.java b/src/main/java/org/geysermc/connect/MasterServer.java
index 55130ca..052c658 100644
--- a/src/main/java/org/geysermc/connect/MasterServer.java
+++ b/src/main/java/org/geysermc/connect/MasterServer.java
@@ -28,6 +28,8 @@ package org.geysermc.connect;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.nukkitx.protocol.bedrock.*;
+import io.netty.channel.DefaultEventLoopGroup;
+import io.netty.util.concurrent.DefaultThreadFactory;
import lombok.Getter;
import lombok.Setter;
import org.geysermc.connect.storage.DisabledStorageManager;
@@ -90,6 +92,9 @@ public class MasterServer {
@Getter
private long lastDisconnectTime = 0L;
+ @Getter
+ private final DefaultEventLoopGroup eventLoopGroup = new DefaultEventLoopGroup(new DefaultThreadFactory("Geyser player thread"));
+
public MasterServer() {
instance = this;
diff --git a/src/main/java/org/geysermc/connect/PacketHandler.java b/src/main/java/org/geysermc/connect/PacketHandler.java
index 3e2f810..4a092bf 100644
--- a/src/main/java/org/geysermc/connect/PacketHandler.java
+++ b/src/main/java/org/geysermc/connect/PacketHandler.java
@@ -25,12 +25,15 @@
package org.geysermc.connect;
+import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectReader;
import com.fasterxml.jackson.databind.node.JsonNodeType;
import com.nimbusds.jose.JWSObject;
import com.nimbusds.jose.crypto.factories.DefaultJWSVerifierFactory;
+import com.nimbusds.jose.shaded.json.JSONArray;
import com.nukkitx.network.util.DisconnectReason;
import com.nukkitx.protocol.bedrock.BedrockPacketCodec;
import com.nukkitx.protocol.bedrock.BedrockServerSession;
@@ -131,6 +134,18 @@ public class PacketHandler implements BedrockPacketHandler {
}
try {
+ // Convert the chainData to a JSONArray
+ ObjectReader reader = OBJECT_MAPPER.readerFor(new TypeReference>() { });
+ JSONArray array = new JSONArray();
+ array.addAll(reader.readValue(chainData));
+
+ // Verify the chain data
+ if (!EncryptionUtils.verifyChain(array)) {
+ // Disconnect the client
+ session.disconnect("disconnectionScreen.internalError.cantConnect");
+ throw new AssertionError("Failed to login, due to invalid chain data!");
+ }
+
// Parse the signed jws object
JWSObject jwsObject;
jwsObject = JWSObject.parse(chainData.get(chainData.size() - 1).asText());
diff --git a/src/main/java/org/geysermc/connect/proxy/GeyserProxySession.java b/src/main/java/org/geysermc/connect/proxy/GeyserProxySession.java
index ce29ae3..580f48f 100644
--- a/src/main/java/org/geysermc/connect/proxy/GeyserProxySession.java
+++ b/src/main/java/org/geysermc/connect/proxy/GeyserProxySession.java
@@ -26,12 +26,13 @@
package org.geysermc.connect.proxy;
import com.nukkitx.protocol.bedrock.BedrockServerSession;
+import io.netty.channel.EventLoop;
import org.geysermc.connector.GeyserConnector;
import org.geysermc.connector.network.session.GeyserSession;
public class GeyserProxySession extends GeyserSession {
- public GeyserProxySession(GeyserConnector connector, BedrockServerSession bedrockServerSession) {
- super(connector, bedrockServerSession);
+ public GeyserProxySession(GeyserConnector connector, BedrockServerSession bedrockServerSession, EventLoop eventLoop) {
+ super(connector, bedrockServerSession, eventLoop);
}
@Override
diff --git a/src/main/java/org/geysermc/connect/utils/Player.java b/src/main/java/org/geysermc/connect/utils/Player.java
index 5180b21..f703b2b 100644
--- a/src/main/java/org/geysermc/connect/utils/Player.java
+++ b/src/main/java/org/geysermc/connect/utils/Player.java
@@ -35,6 +35,7 @@ import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
import lombok.Getter;
import lombok.Setter;
+import org.geysermc.connect.GeyserConnect;
import org.geysermc.connect.MasterServer;
import org.geysermc.connect.proxy.GeyserProxySession;
import org.geysermc.connect.ui.FormID;
@@ -166,7 +167,7 @@ public class Player {
// Send the biomes
BiomeDefinitionListPacket biomeDefinitionListPacket = new BiomeDefinitionListPacket();
- biomeDefinitionListPacket.setDefinitions(Registries.BIOMES.get());
+ biomeDefinitionListPacket.setDefinitions(Registries.BIOMES_NBT.get());
session.sendPacket(biomeDefinitionListPacket);
AvailableEntityIdentifiersPacket entityPacket = new AvailableEntityIdentifiersPacket();
@@ -227,7 +228,7 @@ public class Player {
transferPacket.setPort(currentServer.getPort());
session.sendPacket(transferPacket);
} else {
- GeyserProxySession geyserSession = new GeyserProxySession(GeyserConnector.getInstance(), session);
+ GeyserProxySession geyserSession = new GeyserProxySession(GeyserConnector.getInstance(), session, MasterServer.getInstance().getEventLoopGroup().next());
session.setPacketHandler(new UpstreamPacketHandler(GeyserConnector.getInstance(), geyserSession));
geyserSession.getUpstream().getSession().setPacketCodec(session.getPacketCodec());