diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 7b0f5225c..c04ad6fe2 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -13,8 +13,7 @@ dependencies { api(projects.common) api(projects.api) - // Jackson JSON and YAML serialization - api(libs.bundles.jackson) + api(libs.yaml) // Used for extensions annotationProcessor(libs.configurate.`interface`.ap) api(libs.configurate.`interface`) implementation(libs.configurate.yaml) diff --git a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java index 1790901c6..6002b1549 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java @@ -73,6 +73,7 @@ import org.geysermc.geyser.api.util.MinecraftVersion; import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.configuration.GeyserConfig; import org.geysermc.geyser.command.CommandRegistry; +import org.geysermc.geyser.configuration.GeyserPluginConfig; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.erosion.UnixSocketClientListener; import org.geysermc.geyser.event.GeyserEventBus; @@ -322,12 +323,12 @@ public class GeyserImpl implements GeyserApi, EventRegistrar { config.java().address(InetAddress.getLoopbackAddress().getHostAddress()); } } - if (javaPort != -1 && config.asPluginConfig().isEmpty()) { + if (javaPort != -1) { config.java().port(javaPort); } boolean forceMatchServerPort = "server".equals(pluginUdpPort); - if ((config.asPluginConfig().map(pluginConfig -> pluginConfig.bedrock().cloneRemotePort()).orElse(false) || forceMatchServerPort) && javaPort != -1) { + if ((config.bedrock().cloneRemotePort() || forceMatchServerPort) && javaPort != -1) { config.bedrock().port(javaPort); if (forceMatchServerPort) { if (geyserUdpPort.isEmpty()) { @@ -388,7 +389,7 @@ public class GeyserImpl implements GeyserApi, EventRegistrar { } } - if (config.asPluginConfig().isEmpty()) { + if (!(config instanceof GeyserPluginConfig)) { String remoteAddress = config.java().address(); // Filters whether it is not an IP address or localhost, because otherwise it is not possible to find out an SRV entry. if (!remoteAddress.matches(IP_REGEX) && !remoteAddress.equalsIgnoreCase("localhost")) { diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java index 0a720694a..b416b04e6 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java @@ -115,7 +115,7 @@ public class ConnectionTestCommand extends GeyserCommand { source.sendMessage("The port you are testing with (" + port + ") is not the same as you set in your Geyser configuration (" + config.bedrock().port() + ")"); source.sendMessage("Re-run the command with the port in the config, or change the `bedrock` `port` in the config."); - if (config.asPluginConfig().map(plugin -> plugin.bedrock().cloneRemotePort()).orElse(false)) { + if (config.bedrock().cloneRemotePort()) { source.sendMessage("You have `clone-remote-port` enabled. This option ignores the `bedrock` `port` in the config, and uses the Java server port instead."); } } else { diff --git a/core/src/main/java/org/geysermc/geyser/command/standalone/PermissionConfiguration.java b/core/src/main/java/org/geysermc/geyser/command/standalone/PermissionConfiguration.java index 8c93a2f53..a8e1ee9dd 100644 --- a/core/src/main/java/org/geysermc/geyser/command/standalone/PermissionConfiguration.java +++ b/core/src/main/java/org/geysermc/geyser/command/standalone/PermissionConfiguration.java @@ -25,7 +25,6 @@ package org.geysermc.geyser.command.standalone; -import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; import org.spongepowered.configurate.objectmapping.ConfigSerializable; @@ -34,8 +33,8 @@ import java.util.Set; @Getter @ConfigSerializable +@SuppressWarnings("FieldMayBeFinal") public class PermissionConfiguration { - @JsonProperty("default-permissions") private Set defaultPermissions = Collections.emptySet(); } diff --git a/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfig.java b/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfig.java index de254b240..cbc2f6c10 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfig.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfig.java @@ -43,7 +43,6 @@ import org.spongepowered.configurate.objectmapping.meta.Comment; import java.util.Collections; import java.util.List; -import java.util.Optional; @ConfigSerializable public interface GeyserConfig { @@ -84,6 +83,8 @@ public interface GeyserConfig { @DefaultBoolean(true) boolean passthroughPlayerCounts(); + boolean integratedPingPassthrough(); + @Comment("How often to ping the Java server to refresh MOTD and player count, in seconds.") @DefaultNumeric(3) int pingPassthroughInterval(); @@ -209,6 +210,12 @@ public interface GeyserConfig { @NumericRange(from = 0, to = 65535) int broadcastPort(); + @Comment(""" + Some hosting services change your Java port everytime you start the server and require the same port to be used for Bedrock. + This option makes the Bedrock port the same as the Java port every time you start the server.""") + @DefaultBoolean + boolean cloneRemotePort(); + void address(String address); void port(int port); @@ -312,12 +319,4 @@ public interface GeyserConfig { default int configVersion() { return Constants.CONFIG_VERSION; } - - @Exclude - default Optional asPluginConfig() { - if (this instanceof GeyserPluginConfig config) { - return Optional.of(config); - } - return Optional.empty(); - } } diff --git a/core/src/main/java/org/geysermc/geyser/configuration/GeyserPluginConfig.java b/core/src/main/java/org/geysermc/geyser/configuration/GeyserPluginConfig.java index b5076752a..19bcd5012 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/GeyserPluginConfig.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/GeyserPluginConfig.java @@ -33,21 +33,9 @@ import org.spongepowered.configurate.objectmapping.meta.Comment; @ConfigSerializable public interface GeyserPluginConfig extends GeyserConfig { - @Override - IntegratedBedrockConfig bedrock(); - @Override IntegratedJavaConfig java(); - @ConfigSerializable - interface IntegratedBedrockConfig extends BedrockConfig { - @Comment(""" - Some hosting services change your Java port everytime you start the server and require the same port to be used for Bedrock. - This option makes the Bedrock port the same as the Java port every time you start the server.""") - @DefaultBoolean - boolean cloneRemotePort(); - } - @ConfigSerializable interface IntegratedJavaConfig extends JavaConfig { @Override @@ -75,6 +63,7 @@ public interface GeyserPluginConfig extends GeyserConfig { Use server API methods to determine the Java server's MOTD and ping passthrough. There is no need to disable this unless your MOTD or player count does not appear properly.""") @DefaultBoolean(true) + @Override boolean integratedPingPassthrough(); @Comment(""" diff --git a/core/src/main/java/org/geysermc/geyser/configuration/GeyserRemoteConfig.java b/core/src/main/java/org/geysermc/geyser/configuration/GeyserRemoteConfig.java index 5c48c6b2f..3baa5a5cb 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/GeyserRemoteConfig.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/GeyserRemoteConfig.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.configuration; +import org.spongepowered.configurate.interfaces.meta.Exclude; import org.spongepowered.configurate.interfaces.meta.defaults.DefaultNumeric; import org.spongepowered.configurate.interfaces.meta.defaults.DefaultString; import org.spongepowered.configurate.interfaces.meta.range.NumericRange; @@ -36,9 +37,21 @@ import org.spongepowered.configurate.objectmapping.meta.Comment; */ @ConfigSerializable public interface GeyserRemoteConfig extends GeyserConfig { + @Override + RemoteBedrock bedrock(); + @Override RemoteConfig java(); + @ConfigSerializable + interface RemoteBedrock extends BedrockConfig { + @Override + @Exclude // We can bring this back if there's a use-case but it's not really justified here. + default boolean cloneRemotePort() { + return false; + } + } + @ConfigSerializable interface RemoteConfig extends JavaConfig { @Override @@ -58,4 +71,11 @@ public interface GeyserRemoteConfig extends GeyserConfig { This is designed to be used for forced hosts on proxies""") boolean forwardHostname(); } + + @Exclude + @Override + default boolean integratedPingPassthrough() { + // Does nothing here. + return false; + } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b7c56f4d6..41c13da61 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,7 +5,7 @@ cumulus = "1.1.2" configurate = "4.2.0-GeyserMC-SNAPSHOT" erosion = "1.1-20240521.000109-3" events = "1.1-SNAPSHOT" -jackson = "2.17.0" +yaml = "2.2" fastutil = "8.5.2" netty = "4.1.107.Final" netty-io-uring = "0.0.25.Final-SNAPSHOT" @@ -59,9 +59,7 @@ erosion-bukkit-common = { group = "org.geysermc.erosion", name = "bukkit-common" erosion-bukkit-nms = { group = "org.geysermc.erosion", name = "bukkit-nms", version.ref = "erosion" } erosion-common = { group = "org.geysermc.erosion", name = "common", version.ref = "erosion" } -jackson-annotations = { group = "com.fasterxml.jackson.core", name = "jackson-annotations", version.ref = "jackson" } -jackson-core = { group = "com.fasterxml.jackson.core", name = "jackson-databind", version.ref = "jackson" } -jackson-dataformat-yaml = { group = "com.fasterxml.jackson.dataformat", name = "jackson-dataformat-yaml", version.ref = "jackson" } +yaml = { module = "org.yaml:snakeyaml", version.ref = "yaml" } configurate-interface-ap = { module = "org.spongepowered:configurate-extra-interface-ap", version.ref = "configurate" } configurate-interface = { module = "org.spongepowered:configurate-extra-interface", version.ref = "configurate" } @@ -155,7 +153,6 @@ indra = { id = "net.kyori.indra", version.ref = "indra" } blossom = { id = "net.kyori.blossom", version.ref = "blossom" } [bundles] -jackson = [ "jackson-annotations", "jackson-core", "jackson-dataformat-yaml" ] fastutil = [ "fastutil-int-int-maps", "fastutil-int-long-maps", "fastutil-int-byte-maps", "fastutil-int-boolean-maps", "fastutil-object-int-maps", "fastutil-object-object-maps" ] adventure = [ "adventure-text-serializer-gson", "adventure-text-serializer-legacy", "adventure-text-serializer-plain" ] log4j = [ "log4j-api", "log4j-core", "log4j-slf4j2-impl" ]