From 8c386a7200c1de949d897585d94fe3af3a1b8359 Mon Sep 17 00:00:00 2001 From: rtm516 Date: Mon, 30 Aug 2021 21:02:22 +0100 Subject: [PATCH] Update Geyser and fix builds --- pom.xml | 2 +- .../org/geysermc/connect/GeyserConnectConfig.java | 2 -- .../java/org/geysermc/connect/MasterServer.java | 5 +++++ .../java/org/geysermc/connect/PacketHandler.java | 15 +++++++++++++++ .../connect/proxy/GeyserProxySession.java | 5 +++-- .../java/org/geysermc/connect/utils/Player.java | 5 +++-- 6 files changed, 27 insertions(+), 7 deletions(-) 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());