From 1ecc9dcc6af6a9aadf44593520fe3458e48489c4 Mon Sep 17 00:00:00 2001 From: rtm516 Date: Thu, 18 Jun 2020 01:31:26 +0100 Subject: [PATCH] Add support for bedrock server forwarding --- README.md | 2 +- .../java/org/geysermc/connect/PacketHandler.java | 4 ++++ .../java/org/geysermc/connect/ui/UIHandler.java | 8 ++++++-- .../java/org/geysermc/connect/utils/Player.java | 14 +++++++++++--- .../java/org/geysermc/connect/utils/Server.java | 7 ++++++- 5 files changed, 28 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index e8b90e2..93e4b26 100644 --- a/README.md +++ b/README.md @@ -26,4 +26,4 @@ GeyserConnect is a server that Minecraft: Bedrock Edition clients can connect to - [x] Config file - [x] Fix server images not loading straight away on Win10 - [ ] Per server online/offline mode (50%) -- [ ] Add option to add a bedrock server +- [x] Add option to add a bedrock server diff --git a/src/main/java/org/geysermc/connect/PacketHandler.java b/src/main/java/org/geysermc/connect/PacketHandler.java index f5b7a07..bf7882c 100644 --- a/src/main/java/org/geysermc/connect/PacketHandler.java +++ b/src/main/java/org/geysermc/connect/PacketHandler.java @@ -73,6 +73,10 @@ public class PacketHandler implements BedrockPacketHandler { if (player != null) { masterServer.getLogger().info(player.getDisplayName() + " has disconnected from the master server (" + reason + ")"); masterServer.getStorageManager().saveServers(player); + + if (player.getCurrentServer() != null && player.getCurrentServer().isBedrock()) { + masterServer.getPlayers().remove(player); + } } } diff --git a/src/main/java/org/geysermc/connect/ui/UIHandler.java b/src/main/java/org/geysermc/connect/ui/UIHandler.java index c083c28..d7b4a2b 100644 --- a/src/main/java/org/geysermc/connect/ui/UIHandler.java +++ b/src/main/java/org/geysermc/connect/ui/UIHandler.java @@ -133,6 +133,7 @@ public class UIHandler { .addComponent(new InputComponent("IP", "play.cubecraft.net", "")) .addComponent(new InputComponent("Port", "25565", "25565")) .addComponent(new ToggleComponent("Online mode", true)) + .addComponent(new ToggleComponent("Bedrock server", false)) .build(); return window; } @@ -181,6 +182,7 @@ public class UIHandler { .addComponent(new InputComponent("IP", server.getAddress(), server.getAddress())) .addComponent(new InputComponent("Port", port, port)) .addComponent(new ToggleComponent("Online mode", server.isOnline())) + .addComponent(new ToggleComponent("Bedrock server", server.isBedrock())) .build(); return window; } @@ -282,6 +284,7 @@ public class UIHandler { String address = data.getInputResponses().get(0); int port = Integer.valueOf(data.getInputResponses().get(1)); boolean online = data.getToggleResponses().get(2); + boolean bedrock = data.getToggleResponses().get(3); // Make sure we got an address and port if (address == null || "".equals(address) || port <= 0 || port >= 65535) { @@ -289,7 +292,7 @@ public class UIHandler { return; } - player.getServers().add(new Server(address, port, online)); + player.getServers().add(new Server(address, port, online, bedrock)); // Send them back to the edit screen player.sendWindow(FormID.EDIT_SERVERS, getEditServerList(player.getServers())); @@ -389,6 +392,7 @@ public class UIHandler { String address = data.getInputResponses().get(1); int port = Integer.valueOf(data.getInputResponses().get(2)); boolean online = data.getToggleResponses().get(3); + boolean bedrock = data.getToggleResponses().get(4); // Make sure we got an address and port if (address == null || "".equals(address) || port <= 0 || port >= 65535) { @@ -396,7 +400,7 @@ public class UIHandler { return; } - player.getServers().set(serverIndex, new Server(address, port, online)); + player.getServers().set(serverIndex, new Server(address, port, online, bedrock)); // Send them back to the edit screen player.sendWindow(FormID.EDIT_SERVERS, getEditServerList(player.getServers())); diff --git a/src/main/java/org/geysermc/connect/utils/Player.java b/src/main/java/org/geysermc/connect/utils/Player.java index 166bd95..109da61 100644 --- a/src/main/java/org/geysermc/connect/utils/Player.java +++ b/src/main/java/org/geysermc/connect/utils/Player.java @@ -189,12 +189,20 @@ public class Player { } /** - * Send the player to the Geyser proxy server + * Send the player to the Geyser proxy server or straight to the bedrock server if it is */ public void connectToProxy() { + String address = MasterServer.getInstance().getGeyserConnectConfig().getRemoteAddress(); + int port = MasterServer.getInstance().getGeyserConnectConfig().getGeyser().getPort(); + + if (currentServer.isBedrock()) { + address = currentServer.getAddress(); + port = currentServer.getPort(); + } + TransferPacket transferPacket = new TransferPacket(); - transferPacket.setAddress(MasterServer.getInstance().getGeyserConnectConfig().getRemoteAddress()); - transferPacket.setPort(MasterServer.getInstance().getGeyserConnectConfig().getGeyser().getPort()); + transferPacket.setAddress(address); + transferPacket.setPort(port); session.sendPacket(transferPacket); } diff --git a/src/main/java/org/geysermc/connect/utils/Server.java b/src/main/java/org/geysermc/connect/utils/Server.java index 74ac4d3..eb7b949 100644 --- a/src/main/java/org/geysermc/connect/utils/Server.java +++ b/src/main/java/org/geysermc/connect/utils/Server.java @@ -38,15 +38,20 @@ public class Server { private String address; private int port = 25565; private boolean online = true; + private boolean bedrock = false; public Server(String address) { - this(address, 25565, true); + this(address, 25565); } public Server(String address, int port) { this(address, port, true); } + public Server(String address, int port, boolean online) { + this(address, port, online, false); + } + @Override public String toString() { return address + (port != 25565 ? ":" + port : "");