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] 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

View file

@ -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);
}
}
}

View file

@ -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()));

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() {
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);
}

View file

@ -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 : "");