Add support for bedrock server forwarding

This commit is contained in:
rtm516 2020-06-18 01:31:26 +01:00
parent a47b395471
commit 1ecc9dcc6a
5 changed files with 28 additions and 7 deletions

View file

@ -26,4 +26,4 @@ GeyserConnect is a server that Minecraft: Bedrock Edition clients can connect to
- [x] Config file - [x] Config file
- [x] Fix server images not loading straight away on Win10 - [x] Fix server images not loading straight away on Win10
- [ ] Per server online/offline mode (50%) - [ ] Per server online/offline mode (50%)
- [ ] Add option to add a bedrock server - [x] Add option to add a bedrock server

View file

@ -73,6 +73,10 @@ public class PacketHandler implements BedrockPacketHandler {
if (player != null) { if (player != null) {
masterServer.getLogger().info(player.getDisplayName() + " has disconnected from the master server (" + reason + ")"); masterServer.getLogger().info(player.getDisplayName() + " has disconnected from the master server (" + reason + ")");
masterServer.getStorageManager().saveServers(player); masterServer.getStorageManager().saveServers(player);
if (player.getCurrentServer() != null && player.getCurrentServer().isBedrock()) {
masterServer.getPlayers().remove(player);
}
} }
} }

View file

@ -133,6 +133,7 @@ public class UIHandler {
.addComponent(new InputComponent("IP", "play.cubecraft.net", "")) .addComponent(new InputComponent("IP", "play.cubecraft.net", ""))
.addComponent(new InputComponent("Port", "25565", "25565")) .addComponent(new InputComponent("Port", "25565", "25565"))
.addComponent(new ToggleComponent("Online mode", true)) .addComponent(new ToggleComponent("Online mode", true))
.addComponent(new ToggleComponent("Bedrock server", false))
.build(); .build();
return window; return window;
} }
@ -181,6 +182,7 @@ public class UIHandler {
.addComponent(new InputComponent("IP", server.getAddress(), server.getAddress())) .addComponent(new InputComponent("IP", server.getAddress(), server.getAddress()))
.addComponent(new InputComponent("Port", port, port)) .addComponent(new InputComponent("Port", port, port))
.addComponent(new ToggleComponent("Online mode", server.isOnline())) .addComponent(new ToggleComponent("Online mode", server.isOnline()))
.addComponent(new ToggleComponent("Bedrock server", server.isBedrock()))
.build(); .build();
return window; return window;
} }
@ -282,6 +284,7 @@ public class UIHandler {
String address = data.getInputResponses().get(0); String address = data.getInputResponses().get(0);
int port = Integer.valueOf(data.getInputResponses().get(1)); int port = Integer.valueOf(data.getInputResponses().get(1));
boolean online = data.getToggleResponses().get(2); boolean online = data.getToggleResponses().get(2);
boolean bedrock = data.getToggleResponses().get(3);
// Make sure we got an address and port // Make sure we got an address and port
if (address == null || "".equals(address) || port <= 0 || port >= 65535) { if (address == null || "".equals(address) || port <= 0 || port >= 65535) {
@ -289,7 +292,7 @@ public class UIHandler {
return; 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 // Send them back to the edit screen
player.sendWindow(FormID.EDIT_SERVERS, getEditServerList(player.getServers())); player.sendWindow(FormID.EDIT_SERVERS, getEditServerList(player.getServers()));
@ -389,6 +392,7 @@ public class UIHandler {
String address = data.getInputResponses().get(1); String address = data.getInputResponses().get(1);
int port = Integer.valueOf(data.getInputResponses().get(2)); int port = Integer.valueOf(data.getInputResponses().get(2));
boolean online = data.getToggleResponses().get(3); boolean online = data.getToggleResponses().get(3);
boolean bedrock = data.getToggleResponses().get(4);
// Make sure we got an address and port // Make sure we got an address and port
if (address == null || "".equals(address) || port <= 0 || port >= 65535) { if (address == null || "".equals(address) || port <= 0 || port >= 65535) {
@ -396,7 +400,7 @@ public class UIHandler {
return; 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 // Send them back to the edit screen
player.sendWindow(FormID.EDIT_SERVERS, getEditServerList(player.getServers())); player.sendWindow(FormID.EDIT_SERVERS, getEditServerList(player.getServers()));

View file

@ -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() { 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 transferPacket = new TransferPacket();
transferPacket.setAddress(MasterServer.getInstance().getGeyserConnectConfig().getRemoteAddress()); transferPacket.setAddress(address);
transferPacket.setPort(MasterServer.getInstance().getGeyserConnectConfig().getGeyser().getPort()); transferPacket.setPort(port);
session.sendPacket(transferPacket); session.sendPacket(transferPacket);
} }

View file

@ -38,15 +38,20 @@ public class Server {
private String address; private String address;
private int port = 25565; private int port = 25565;
private boolean online = true; private boolean online = true;
private boolean bedrock = false;
public Server(String address) { public Server(String address) {
this(address, 25565, true); this(address, 25565);
} }
public Server(String address, int port) { public Server(String address, int port) {
this(address, port, true); this(address, port, true);
} }
public Server(String address, int port, boolean online) {
this(address, port, online, false);
}
@Override @Override
public String toString() { public String toString() {
return address + (port != 25565 ? ":" + port : ""); return address + (port != 25565 ? ":" + port : "");