Change name to GeyserConnect

This commit is contained in:
rtm516 2020-06-16 23:30:37 +01:00
parent 3f1ec104c3
commit 8a8ea5cd7f
21 changed files with 76 additions and 77 deletions

View file

@ -1,16 +1,16 @@
# GeyserMulti
# GeyserConnect
[![forthebadge made-with-java](https://ForTheBadge.com/images/badges/made-with-java.svg)](https://java.com/)
<!--[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
[![Build Status](https://ci.nukkitx.com/job/GeyserMulti/job/master/badge/icon)](https://ci.nukkitx.com/job/Geyser/job/master/)
[![Build Status](https://ci.nukkitx.com/job/GeyserConnect/job/master/badge/icon)](https://ci.nukkitx.com/job/GeyserConnect/job/master/)
[![Discord](https://img.shields.io/discord/613163671870242838.svg?color=%237289da&label=discord)](http://discord.geysermc.org/)
[![HitCount](http://hits.dwyl.io/Geyser/GeyserMC.svg)](http://hits.dwyl.io/GeyserMC/GeyserMulti)-->
[![HitCount](http://hits.dwyl.io/GeyserMC/GeyserConnect.svg)](http://hits.dwyl.io/GeyserMC/GeyserConnect)-->
GeyserMulti is an easy way for Bedrock Edition clients to connect to any Java Edition servers without having to run anything.
GeyserConnect is an easy way for Bedrock Edition clients to connect to any Java Edition servers without having to run anything.
## What is GeyserMulti?
GeyserMulti is a server that Minecraft: Bedrock Edition clients can connect to that allows for a list of Minecraft: Java Edition servers to be displayed and accessed through 1 public Geyser instance. It is effectively a combination of [BedrockConnect](https://github.com/Pugmatt/BedrockConnect) and [Geyser](https://github.com/GeyserMC/Geyser).
## What is GeyserConnect?
GeyserConnect is a server that Minecraft: Bedrock Edition clients can connect to that allows for a list of Minecraft: Java Edition servers to be displayed and accessed through 1 public Geyser instance. It is effectively a combination of [BedrockConnect](https://github.com/Pugmatt/BedrockConnect) and [Geyser](https://github.com/GeyserMC/Geyser).
**Please note, this project is still a work in progress and should not be used on production. Expect bugs!**
@ -24,4 +24,3 @@ GeyserMulti is a server that Minecraft: Bedrock Edition clients can connect to t
- [ ] Stop Geyser server after its idle for a while
- [x] Config file
- [ ] Fix server images not loading straight away on Win10
- [ ] Better logging?

View file

@ -69,7 +69,7 @@
<configuration>
<archive>
<manifest>
<mainClass>org.geysermc.multi.GeyserMulti</mainClass>
<mainClass>org.geysermc.connect.GeyserConnect</mainClass>
</manifest>
</archive>
</configuration>

View file

@ -1,6 +1,6 @@
package org.geysermc.multi;
package org.geysermc.connect;
public class GeyserMulti {
public class GeyserConnect {
public static void main(String[] args) {
new MasterServer();

View file

@ -1,18 +1,18 @@
package org.geysermc.multi;
package org.geysermc.connect;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import org.geysermc.connector.utils.WebUtils;
import org.geysermc.multi.storage.AbstractStorageManager;
import org.geysermc.multi.utils.Server;
import org.geysermc.connect.storage.AbstractStorageManager;
import org.geysermc.connect.utils.Server;
import java.util.List;
@Getter
@JsonIgnoreProperties(ignoreUnknown = true)
public class GeyserMultiConfig {
public class GeyserConnectConfig {
private String address;

View file

@ -1,13 +1,13 @@
package org.geysermc.multi;
package org.geysermc.connect;
import com.nukkitx.protocol.bedrock.*;
import com.nukkitx.protocol.bedrock.v390.Bedrock_v390;
import lombok.Getter;
import org.geysermc.connector.utils.FileUtils;
import org.geysermc.multi.proxy.GeyserProxyBootstrap;
import org.geysermc.multi.storage.AbstractStorageManager;
import org.geysermc.multi.utils.Logger;
import org.geysermc.multi.utils.Player;
import org.geysermc.connect.proxy.GeyserProxyBootstrap;
import org.geysermc.connect.storage.AbstractStorageManager;
import org.geysermc.connect.utils.Logger;
import org.geysermc.connect.utils.Player;
import java.io.File;
import java.io.IOException;
@ -46,7 +46,7 @@ public class MasterServer {
private GeyserProxyBootstrap geyserProxy;
@Getter
private GeyserMultiConfig geyserMultiConfig;
private GeyserConnectConfig geyserConnectConfig;
@Getter
private AbstractStorageManager storageManager;
@ -58,15 +58,15 @@ public class MasterServer {
try {
File configFile = FileUtils.fileOrCopiedFromResource(new File("config.yml"), "config.yml", (x) -> x);
this.geyserMultiConfig = FileUtils.loadConfig(configFile, GeyserMultiConfig.class);
this.geyserConnectConfig = FileUtils.loadConfig(configFile, GeyserConnectConfig.class);
} catch (IOException ex) {
logger.severe("Failed to read/create config.yml! Make sure it's up to date and/or readable+writable!", ex);
ex.printStackTrace();
}
logger.setDebug(geyserMultiConfig.isDebugMode());
logger.setDebug(geyserConnectConfig.isDebugMode());
geyserMultiConfig.checkRemoteIP();
geyserConnectConfig.checkRemoteIP();
this.generalThreadPool = Executors.newScheduledThreadPool(32);
@ -76,7 +76,7 @@ public class MasterServer {
timer.scheduleAtFixedRate(task, 0L, 1000L);
try {
storageManager = geyserMultiConfig.getCustomServers().getStorageType().getStorageManager().newInstance();
storageManager = geyserConnectConfig.getCustomServers().getStorageType().getStorageManager().newInstance();
} catch (Exception e) {
logger.severe("Invalid storage manager class!", e);
return;
@ -84,7 +84,7 @@ public class MasterServer {
storageManager.setupStorage();
start(geyserMultiConfig.getPort());
start(geyserConnectConfig.getPort());
logger.start();
}
@ -92,14 +92,14 @@ public class MasterServer {
private void start(int port) {
logger.info("Starting...");
InetSocketAddress bindAddress = new InetSocketAddress(geyserMultiConfig.getAddress(), port);
InetSocketAddress bindAddress = new InetSocketAddress(geyserConnectConfig.getAddress(), port);
bdServer = new BedrockServer(bindAddress);
bdPong = new BedrockPong();
bdPong.setEdition("MCPE");
bdPong.setMotd(geyserMultiConfig.getMotd());
bdPong.setMotd(geyserConnectConfig.getMotd());
bdPong.setPlayerCount(0);
bdPong.setMaximumPlayerCount(geyserMultiConfig.getMaxPlayers());
bdPong.setMaximumPlayerCount(geyserConnectConfig.getMaxPlayers());
bdPong.setGameType("Survival");
bdPong.setIpv4Port(port);
bdPong.setProtocolVersion(MasterServer.CODEC.getProtocolVersion());
@ -124,7 +124,7 @@ public class MasterServer {
// Start server up
bdServer.bind().join();
logger.info("Server started on " + geyserMultiConfig.getAddress() + ":" + port);
logger.info("Server started on " + geyserConnectConfig.getAddress() + ":" + port);
}
public void shutdown() {

View file

@ -1,4 +1,4 @@
package org.geysermc.multi;
package org.geysermc.connect;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
@ -14,9 +14,9 @@ import com.nukkitx.protocol.bedrock.util.EncryptionUtils;
import org.geysermc.common.window.FormWindow;
import org.geysermc.common.window.response.CustomFormResponse;
import org.geysermc.common.window.response.SimpleFormResponse;
import org.geysermc.multi.ui.FormID;
import org.geysermc.multi.ui.UIHandler;
import org.geysermc.multi.utils.Player;
import org.geysermc.connect.ui.FormID;
import org.geysermc.connect.ui.UIHandler;
import org.geysermc.connect.utils.Player;
import java.io.IOException;
import java.security.interfaces.ECPublicKey;

View file

@ -1,4 +1,4 @@
package org.geysermc.multi.proxy;
package org.geysermc.connect.proxy;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
@ -9,8 +9,8 @@ import org.geysermc.connector.command.CommandManager;
import org.geysermc.connector.configuration.GeyserConfiguration;
import org.geysermc.connector.ping.GeyserLegacyPingPassthrough;
import org.geysermc.connector.ping.IGeyserPingPassthrough;
import org.geysermc.multi.GeyserMultiConfig;
import org.geysermc.multi.MasterServer;
import org.geysermc.connect.GeyserConnectConfig;
import org.geysermc.connect.MasterServer;
import java.io.BufferedReader;
import java.io.IOException;
@ -39,7 +39,7 @@ public class GeyserProxyBootstrap implements GeyserBootstrap {
// Grab the config as text and replace static strings to the main config variables
String text = new BufferedReader(new InputStreamReader(configFile, StandardCharsets.UTF_8)).lines().collect(Collectors.joining("\n"));
GeyserMultiConfig multiConfig = MasterServer.getInstance().getGeyserMultiConfig();
GeyserConnectConfig multiConfig = MasterServer.getInstance().getGeyserConnectConfig();
text = text.replace("PORT", String.valueOf(multiConfig.getGeyser().getPort()));
text = text.replaceAll("MOTD", multiConfig.getMotd());
text = text.replace("PLAYERS", String.valueOf(multiConfig.getMaxPlayers()));

View file

@ -23,7 +23,7 @@
* @link https://github.com/GeyserMC/Geyser
*/
package org.geysermc.multi.proxy;
package org.geysermc.connect.proxy;
import org.geysermc.connector.GeyserConnector;
import org.geysermc.connector.command.CommandManager;

View file

@ -1,4 +1,4 @@
package org.geysermc.multi.proxy;
package org.geysermc.connect.proxy;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;

View file

@ -1,8 +1,8 @@
package org.geysermc.multi.proxy;
package org.geysermc.connect.proxy;
import lombok.extern.log4j.Log4j2;
import org.geysermc.multi.MasterServer;
import org.geysermc.multi.utils.Logger;
import org.geysermc.connect.MasterServer;
import org.geysermc.connect.utils.Logger;
@Log4j2
public class GeyserProxyLogger extends Logger {
@ -10,7 +10,7 @@ public class GeyserProxyLogger extends Logger {
* Disable debug messages depending on config
*/
public void debug(String message) {
if (MasterServer.getInstance().getGeyserMultiConfig().getGeyser().isDebugMode())
if (MasterServer.getInstance().getGeyserConnectConfig().getGeyser().isDebugMode())
super.debug(message);
}
}

View file

@ -1,10 +1,10 @@
package org.geysermc.multi.proxy;
package org.geysermc.connect.proxy;
import com.nukkitx.protocol.bedrock.BedrockServerSession;
import org.geysermc.connector.GeyserConnector;
import org.geysermc.connector.network.session.GeyserSession;
import org.geysermc.multi.MasterServer;
import org.geysermc.multi.utils.Player;
import org.geysermc.connect.MasterServer;
import org.geysermc.connect.utils.Player;
public class GeyserProxySession extends GeyserSession {

View file

@ -1,11 +1,11 @@
package org.geysermc.multi.proxy;
package org.geysermc.connect.proxy;
import com.nukkitx.protocol.bedrock.BedrockServerSession;
import org.geysermc.connector.GeyserConnector;
import org.geysermc.connector.network.ConnectorServerEventHandler;
import org.geysermc.connector.network.UpstreamPacketHandler;
import org.geysermc.multi.MasterServer;
import org.geysermc.multi.utils.Player;
import org.geysermc.connect.MasterServer;
import org.geysermc.connect.utils.Player;
public class ProxyConnectorServerEventHandler extends ConnectorServerEventHandler {
private final GeyserConnector connector;

View file

@ -1,9 +1,9 @@
package org.geysermc.multi.storage;
package org.geysermc.connect.storage;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;
import org.geysermc.multi.utils.Player;
import org.geysermc.multi.utils.Server;
import org.geysermc.connect.utils.Player;
import org.geysermc.connect.utils.Server;
import java.util.ArrayList;
import java.util.List;

View file

@ -1,9 +1,9 @@
package org.geysermc.multi.storage;
package org.geysermc.connect.storage;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.geysermc.multi.utils.Player;
import org.geysermc.multi.utils.Server;
import org.geysermc.connect.utils.Player;
import org.geysermc.connect.utils.Server;
import java.io.File;
import java.io.IOException;

View file

@ -1,4 +1,4 @@
package org.geysermc.multi.ui;
package org.geysermc.connect.ui;
import lombok.Getter;

View file

@ -1,4 +1,4 @@
package org.geysermc.multi.ui;
package org.geysermc.connect.ui;
import org.geysermc.common.window.CustomFormBuilder;
import org.geysermc.common.window.CustomFormWindow;
@ -9,9 +9,9 @@ import org.geysermc.common.window.button.FormImage;
import org.geysermc.common.window.component.InputComponent;
import org.geysermc.common.window.response.CustomFormResponse;
import org.geysermc.common.window.response.SimpleFormResponse;
import org.geysermc.multi.MasterServer;
import org.geysermc.multi.utils.Player;
import org.geysermc.multi.utils.Server;
import org.geysermc.connect.MasterServer;
import org.geysermc.connect.utils.Player;
import org.geysermc.connect.utils.Server;
import java.util.ArrayList;
import java.util.List;
@ -27,12 +27,12 @@ public class UIHandler {
SimpleFormWindow window = new SimpleFormWindow("Servers", "");
// Add a button for each global server
for (Server server : MasterServer.getInstance().getGeyserMultiConfig().getServers()) {
for (Server server : MasterServer.getInstance().getGeyserConnectConfig().getServers()) {
window.getButtons().add(new FormButton(server.toString(), new FormImage(FormImage.FormImageType.URL, "https://eu.mc-api.net/v3/server/favicon/" + server.getAddress() + ":" + server.getPort() + ".png")));
}
// Add a button for each personal server
if (MasterServer.getInstance().getGeyserMultiConfig().getCustomServers().isEnabled()) {
if (MasterServer.getInstance().getGeyserConnectConfig().getCustomServers().isEnabled()) {
for (Server server : servers) {
window.getButtons().add(new FormButton(server.toString(), new FormImage(FormImage.FormImageType.URL, "https://eu.mc-api.net/v3/server/favicon/" + server.getAddress() + ":" + server.getPort() + ".png")));
}
@ -94,12 +94,12 @@ public class UIHandler {
* @param data The form response data
*/
public static void handleServerListResponse(Player player, SimpleFormResponse data) {
List<Server> servers = new ArrayList<>(MasterServer.getInstance().getGeyserMultiConfig().getServers());
List<Server> servers = new ArrayList<>(MasterServer.getInstance().getGeyserConnectConfig().getServers());
servers.addAll(player.getServers());
// Cant be done in a switch as we need to calculate the last 2 buttons
if ((!MasterServer.getInstance().getGeyserMultiConfig().getCustomServers().isEnabled() && data.getClickedButtonId() == servers.size()) || data.getClickedButtonId() == servers.size() + 2) {
if ((!MasterServer.getInstance().getGeyserConnectConfig().getCustomServers().isEnabled() && data.getClickedButtonId() == servers.size()) || data.getClickedButtonId() == servers.size() + 2) {
player.getSession().disconnect("Bye!"); // Seems to be super slow if we specify an empty string
} else if (data.getClickedButtonId() == servers.size()) {
player.sendWindow(FormID.EDIT_SERVERS, getEditServerList(player.getServers()));

View file

@ -1,11 +1,11 @@
package org.geysermc.multi.utils;
package org.geysermc.connect.utils;
import lombok.extern.log4j.Log4j2;
import net.minecrell.terminalconsole.SimpleTerminalConsole;
import org.apache.logging.log4j.core.config.Configurator;
import org.geysermc.common.ChatColor;
import org.geysermc.connector.GeyserLogger;
import org.geysermc.multi.MasterServer;
import org.geysermc.connect.MasterServer;
@Log4j2
public class Logger extends SimpleTerminalConsole implements GeyserLogger {

View file

@ -1,4 +1,4 @@
package org.geysermc.multi.utils;
package org.geysermc.connect.utils;
import com.nukkitx.nbt.CompoundTagBuilder;
import com.nukkitx.nbt.NbtUtils;

View file

@ -1,4 +1,4 @@
package org.geysermc.multi.utils;
package org.geysermc.connect.utils;
import com.fasterxml.jackson.databind.JsonNode;
import com.nukkitx.math.vector.Vector2f;
@ -12,9 +12,9 @@ import com.nukkitx.protocol.bedrock.packet.*;
import lombok.Getter;
import lombok.Setter;
import org.geysermc.common.window.FormWindow;
import org.geysermc.multi.MasterServer;
import org.geysermc.multi.ui.FormID;
import org.geysermc.multi.ui.UIHandler;
import org.geysermc.connect.MasterServer;
import org.geysermc.connect.ui.FormID;
import org.geysermc.connect.ui.UIHandler;
import java.util.ArrayList;
import java.util.List;
@ -45,7 +45,7 @@ public class Player {
this.session = session;
// Should fetch the servers from some form of db
if (MasterServer.getInstance().getGeyserMultiConfig().getCustomServers().isEnabled()) {
if (MasterServer.getInstance().getGeyserConnectConfig().getCustomServers().isEnabled()) {
servers.addAll(MasterServer.getInstance().getStorageManager().loadServers(this));
}
}
@ -155,8 +155,8 @@ public class Player {
*/
public void connectToProxy() {
TransferPacket transferPacket = new TransferPacket();
transferPacket.setAddress(MasterServer.getInstance().getGeyserMultiConfig().getRemoteAddress());
transferPacket.setPort(MasterServer.getInstance().getGeyserMultiConfig().getGeyser().getPort());
transferPacket.setAddress(MasterServer.getInstance().getGeyserConnectConfig().getRemoteAddress());
transferPacket.setPort(MasterServer.getInstance().getGeyserConnectConfig().getGeyser().getPort());
session.sendPacket(transferPacket);
}

View file

@ -1,4 +1,4 @@
package org.geysermc.multi.utils;
package org.geysermc.connect.utils;
import lombok.AllArgsConstructor;
import lombok.Getter;

View file

@ -1,5 +1,5 @@
# --------------------------------
# GeyserMulti Configuration File
# GeyserConnect Configuration File
# --------------------------------
# The IP address that will listen for connections
@ -20,7 +20,7 @@ max-players: 100
# MOTD to display
motd: "GeyserMulti Proxy"
# Config for the geyser listener
# Config for the Geyser listener
geyser:
# The port that will listen for connections
port: 19133