From 4a673b68794412d3bbff52dbaeecf0fcc7eae15c Mon Sep 17 00:00:00 2001 From: Tim203 Date: Fri, 13 Oct 2023 16:47:55 +0200 Subject: [PATCH] Re-added a way to send Floodgate data over the wire (for e.g. standalone) --- .../main/java/org/geysermc/geyser/GeyserImpl.java | 7 ++++++- .../geyser/floodgate/ProxyFloodgateProvider.java | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java index 151cd9770..20bc7edb3 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java @@ -67,6 +67,7 @@ import org.geysermc.geyser.extension.GeyserExtensionManager; import org.geysermc.geyser.floodgate.FloodgateProvider; import org.geysermc.geyser.floodgate.IntegratedFloodgateProvider; import org.geysermc.geyser.floodgate.NoFloodgateProvider; +import org.geysermc.geyser.floodgate.ProxyFloodgateProvider; import org.geysermc.geyser.level.WorldManager; import org.geysermc.geyser.network.netty.GeyserServer; import org.geysermc.geyser.registry.BlockRegistries; @@ -168,7 +169,11 @@ public class GeyserImpl implements GeyserApi { this.floodgateProvider = new IntegratedFloodgateProvider(floodgatePlatform); // this.floodgateProvider = new ProxyFloodgateProvider(floodgatePlatform); } else { - this.floodgateProvider = new NoFloodgateProvider(); + if (bootstrap.getGeyserConfig().getRemote().authType() == AuthType.FLOODGATE) { + this.floodgateProvider = new ProxyFloodgateProvider(bootstrap.getConfigFolder()); + } else { + this.floodgateProvider = new NoFloodgateProvider(); + } Geyser.set(this); } diff --git a/core/src/main/java/org/geysermc/geyser/floodgate/ProxyFloodgateProvider.java b/core/src/main/java/org/geysermc/geyser/floodgate/ProxyFloodgateProvider.java index d348d1839..51e33c56a 100644 --- a/core/src/main/java/org/geysermc/geyser/floodgate/ProxyFloodgateProvider.java +++ b/core/src/main/java/org/geysermc/geyser/floodgate/ProxyFloodgateProvider.java @@ -26,8 +26,14 @@ package org.geysermc.geyser.floodgate; import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import lombok.SneakyThrows; import org.geysermc.floodgate.core.FloodgatePlatform; +import org.geysermc.floodgate.core.connection.standalone.codec.FloodgateConnectionCodec; +import org.geysermc.floodgate.core.crypto.DataCodecType; import org.geysermc.floodgate.core.crypto.FloodgateDataCodec; +import org.geysermc.floodgate.core.crypto.FloodgateFormatCodec; +import org.geysermc.floodgate.core.crypto.topping.Base64Topping; import org.geysermc.geyser.session.GeyserSession; //todo Floodgate should be responsible for forwarding its messages @@ -38,6 +44,15 @@ public final class ProxyFloodgateProvider implements FloodgateProvider { dataCodec = platform.getBean(FloodgateDataCodec.class); } + @SneakyThrows + public ProxyFloodgateProvider(Path dataDirectory) { + //todo use what the platform provides without enabling Floodgate + dataCodec = new FloodgateDataCodec( + new FloodgateFormatCodec(DataCodecType.AES, new Base64Topping(), dataDirectory), + new FloodgateConnectionCodec() + ); + } + @Override public void onSkinUpload(GeyserSession session, String value, String signature) { byte[] bytes = (value + '\0' + signature)