diff --git a/connector/pom.xml b/connector/pom.xml index 757a4777b..ab9fc56b3 100644 --- a/connector/pom.xml +++ b/connector/pom.xml @@ -19,9 +19,14 @@ 1.0-SNAPSHOT - org.yaml - snakeyaml - 1.19 + com.fasterxml.jackson.dataformat + jackson-dataformat-yaml + 2.9.8 + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + 2.9.8 io.sentry @@ -34,6 +39,45 @@ 1.0.0 jar + + org.slf4j + slf4j-api + 1.7.5 + + + org.slf4j + slf4j-simple + 1.6.4 + + + com.google.guava + guava + 27.0.1-jre + + + org.projectlombok + lombok + 1.18.4 + compile + + + com.nukkitx.protocol + bedrock-v354 + 2.0.3 + compile + + + com.nukkitx.protocol + bedrock-v340 + 2.0.3 + compile + + + com.nukkitx.protocol + bedrock-v332 + 2.0.3 + compile + ${outputName}-noshade diff --git a/connector/src/main/java/org/geysermc/connector/GeyserConnector.java b/connector/src/main/java/org/geysermc/connector/GeyserConnector.java index 1afb35314..e425456fe 100644 --- a/connector/src/main/java/org/geysermc/connector/GeyserConnector.java +++ b/connector/src/main/java/org/geysermc/connector/GeyserConnector.java @@ -14,24 +14,38 @@ package org.geysermc.connector; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; +import com.nukkitx.protocol.bedrock.BedrockPacketCodec; +import com.nukkitx.protocol.bedrock.v354.Bedrock_v354; import org.geysermc.api.ChatColor; import org.geysermc.connector.command.GeyserCommandMap; +import org.geysermc.connector.configuration.GeyserConfiguration; import org.geysermc.connector.console.ConsoleCommandReader; import org.geysermc.connector.console.GeyserLogger; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; public class GeyserConnector { + public static final BedrockPacketCodec BEDROCK_PACKET_CODEC = Bedrock_v354.V354_CODEC; + private static final String NAME = "Geyser"; private static final String VERSION = "1.0-SNAPSHOT"; private static GeyserConnector instance; private boolean shuttingDown = false; + private GeyserLogger logger; private GeyserCommandMap commandMap; + private GeyserConfiguration config; + private final ScheduledExecutorService generalThreadPool; public static void main(String[] args) { @@ -53,6 +67,24 @@ public class GeyserConnector { logger.info(""); logger.info("******************************************"); + try { + File configFile = new File("config.yml"); + if (!configFile.exists()) { + FileOutputStream fos = new FileOutputStream(configFile); + InputStream is = GeyserConnector.class.getResourceAsStream("/config.yml"); + int data; + while ((data = is.read()) != -1) + fos.write(data); + is.close(); + fos.close(); + } + + ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory()); + config = objectMapper.readValue(configFile, GeyserConfiguration.class); + } catch (IOException ex) { + logger.severe("Failed to create config.yml! Make sure it's up to date and writable!"); + shutdown(); + } commandMap = new GeyserCommandMap(this); } diff --git a/connector/src/main/java/org/geysermc/connector/configuration/BedrockConfiguration.java b/connector/src/main/java/org/geysermc/connector/configuration/BedrockConfiguration.java new file mode 100644 index 000000000..61519e347 --- /dev/null +++ b/connector/src/main/java/org/geysermc/connector/configuration/BedrockConfiguration.java @@ -0,0 +1,43 @@ +/* + * GNU LESSER GENERAL PUBLIC LICENSE + * Version 3, 29 June 2007 + * + * Copyright (C) 2007 Free Software Foundation, Inc. + * Everyone is permitted to copy and distribute verbatim copies + * of this license document, but changing it is not allowed. + * + * You can view the LICENCE file for details. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.connector.configuration; + +import lombok.Getter; + +@Getter +public class BedrockConfiguration { + + private String address; + private int port; + + private String motd1; + private String motd2; + + public String getAddress() { + return address; + } + + public int getPort() { + return port; + } + + public String getMotd1() { + return motd1; + } + + public String getMotd2() { + return motd2; + } +} \ No newline at end of file diff --git a/connector/src/main/java/org/geysermc/connector/configuration/GeyserConfiguration.java b/connector/src/main/java/org/geysermc/connector/configuration/GeyserConfiguration.java new file mode 100644 index 000000000..0bdd7bc8a --- /dev/null +++ b/connector/src/main/java/org/geysermc/connector/configuration/GeyserConfiguration.java @@ -0,0 +1,30 @@ +/* + * GNU LESSER GENERAL PUBLIC LICENSE + * Version 3, 29 June 2007 + * + * Copyright (C) 2007 Free Software Foundation, Inc. + * Everyone is permitted to copy and distribute verbatim copies + * of this license document, but changing it is not allowed. + * + * You can view the LICENCE file for details. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.connector.configuration; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; + +@Getter +public class GeyserConfiguration { + + private BedrockConfiguration bedrock; + private RemoteConfiguration remote; + + @JsonProperty("ping-passthrough") + private boolean pingPassthrough; + + +} \ No newline at end of file diff --git a/connector/src/main/java/org/geysermc/connector/configuration/RemoteConfiguration.java b/connector/src/main/java/org/geysermc/connector/configuration/RemoteConfiguration.java new file mode 100644 index 000000000..6ef5b2021 --- /dev/null +++ b/connector/src/main/java/org/geysermc/connector/configuration/RemoteConfiguration.java @@ -0,0 +1,31 @@ +/* + * GNU LESSER GENERAL PUBLIC LICENSE + * Version 3, 29 June 2007 + * + * Copyright (C) 2007 Free Software Foundation, Inc. + * Everyone is permitted to copy and distribute verbatim copies + * of this license document, but changing it is not allowed. + * + * You can view the LICENCE file for details. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.connector.configuration; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; + +@Getter +public class RemoteConfiguration { + + private String address; + private int port; + + private String motd1; + private String motd2; + + @JsonProperty("online-mode") + private boolean onlineMode; +} \ No newline at end of file diff --git a/connector/src/main/resources/config.yml b/connector/src/main/resources/config.yml new file mode 100644 index 000000000..8bd2fc5da --- /dev/null +++ b/connector/src/main/resources/config.yml @@ -0,0 +1,30 @@ +# -------------------------------- +# Geyser Configuration File +# +# A bridge between Minecraft: Bedrock Edition and Minecraft: Java Edition. +# +# https://github.com/GeyserMC/Geyser +# -------------------------------- + +bedrock: + # The IP address that will listen for connections + address: 0.0.0.0 + # The port that will listen for connections + port: 19132 + # The MOTD that will be broadcasted to Minecraft: Bedrock Edition clients + motd1: "GeyserMC" + motd2: "Another GeyserMC forced host." +remote: + # The IP address of the remote (Java Edition) server + address: 127.0.0.1 + # The port of the remote (Java Edition) server + port: 25565 + online-mode: true + +# Relay the MOTD, player count and max players from the remote server +ping-passthrough: false + + + + + diff --git a/pom.xml b/pom.xml index 6e363ee8d..df40ec902 100644 --- a/pom.xml +++ b/pom.xml @@ -43,6 +43,10 @@ true + + nukkitx-repo + https://repo.nukkitx.com/maven-releases/ + clean install