forked from git-mirrors/GeyserConnect
Add Microsoft account support (#19)
* Add MSA support; fix up whatever IntelliJ complained about * Add togglable password authentication option
This commit is contained in:
parent
c4b1faaaf6
commit
498df7983b
9 changed files with 44 additions and 23 deletions
2
pom.xml
2
pom.xml
|
@ -85,7 +85,7 @@
|
|||
<dependency>
|
||||
<groupId>com.github.CloudburstMC.Protocol</groupId>
|
||||
<artifactId>bedrock-v422</artifactId>
|
||||
<version>87d862d69d</version>
|
||||
<version>d41b84e86c</version>
|
||||
<scope>compile</scope>
|
||||
<exclusions>
|
||||
<!-- Stay on the older version of Network while it's rewritten -->
|
||||
|
|
|
@ -74,6 +74,9 @@ public class GeyserConnectConfig {
|
|||
|
||||
private int port;
|
||||
|
||||
@JsonProperty("allow-password-authentication")
|
||||
private boolean allowPasswordAuthentication = true;
|
||||
|
||||
@JsonProperty("debug-mode")
|
||||
private boolean debugMode;
|
||||
|
||||
|
|
|
@ -49,7 +49,6 @@ import java.util.concurrent.ScheduledExecutorService;
|
|||
|
||||
public class MasterServer {
|
||||
|
||||
private final Timer timer;
|
||||
private BedrockServer bdServer;
|
||||
private BedrockPong bdPong;
|
||||
|
||||
|
@ -79,10 +78,10 @@ public class MasterServer {
|
|||
|
||||
@Setter
|
||||
@Getter
|
||||
private long lastDisconnectTime = 0l;
|
||||
private long lastDisconnectTime = 0L;
|
||||
|
||||
public MasterServer() {
|
||||
this.instance = this;
|
||||
instance = this;
|
||||
|
||||
logger = new Logger();
|
||||
|
||||
|
@ -101,7 +100,7 @@ public class MasterServer {
|
|||
this.generalThreadPool = Executors.newScheduledThreadPool(32);
|
||||
|
||||
// Start a timer to keep the thread running
|
||||
timer = new Timer();
|
||||
Timer timer = new Timer();
|
||||
TimerTask task = new TimerTask() { public void run() { } };
|
||||
timer.scheduleAtFixedRate(task, 0L, 1000L);
|
||||
|
||||
|
@ -165,6 +164,7 @@ public class MasterServer {
|
|||
|
||||
public void shutdown() {
|
||||
shuttingDown = true;
|
||||
bdServer.close();
|
||||
|
||||
shutdownGeyserProxy();
|
||||
|
||||
|
|
|
@ -58,8 +58,8 @@ import java.util.concurrent.TimeUnit;
|
|||
|
||||
public class PacketHandler implements BedrockPacketHandler {
|
||||
|
||||
private BedrockServerSession session;
|
||||
private MasterServer masterServer;
|
||||
private final BedrockServerSession session;
|
||||
private final MasterServer masterServer;
|
||||
|
||||
private Player player;
|
||||
|
||||
|
@ -69,7 +69,7 @@ public class PacketHandler implements BedrockPacketHandler {
|
|||
this.session = session;
|
||||
this.masterServer = masterServer;
|
||||
|
||||
session.addDisconnectHandler((reason) -> disconnect(reason));
|
||||
session.addDisconnectHandler(this::disconnect);
|
||||
}
|
||||
|
||||
public void disconnect(DisconnectReason reason) {
|
||||
|
@ -78,7 +78,7 @@ public class PacketHandler implements BedrockPacketHandler {
|
|||
masterServer.getStorageManager().saveServers(player);
|
||||
|
||||
if (player.getCurrentServer() != null && player.getCurrentServer().isBedrock()) {
|
||||
masterServer.getPlayers().remove(player);
|
||||
masterServer.getPlayers().remove(player.getXuid(), player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,6 +71,7 @@ public class GeyserProxyBootstrap implements GeyserBootstrap {
|
|||
text = text.replace("PORT", String.valueOf(multiConfig.getGeyser().getPort()));
|
||||
text = text.replaceAll("MOTD", multiConfig.getMotd());
|
||||
text = text.replace("PLAYERS", String.valueOf(multiConfig.getMaxPlayers()));
|
||||
text = text.replace("ALLOWPASSWORDAUTHENTICATION", String.valueOf(multiConfig.getGeyser().isAllowPasswordAuthentication()));
|
||||
|
||||
ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
|
||||
geyserConfig = objectMapper.readValue(text, GeyserProxyConfiguration.class);
|
||||
|
|
|
@ -62,6 +62,24 @@ public class GeyserProxySession extends GeyserSession {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void authenticateWithMicrosoftCode() {
|
||||
// Get the player based on the connection address
|
||||
Player player = MasterServer.getInstance().getPlayers().get(getAuthData().getXboxUUID());
|
||||
if (player != null && player.getCurrentServer() != null) {
|
||||
// Set the remote server info for the player
|
||||
connector.getRemoteServer().setAddress(player.getCurrentServer().getAddress());
|
||||
connector.getRemoteServer().setPort(player.getCurrentServer().getPort());
|
||||
|
||||
connector.setAuthType(player.getCurrentServer().isOnline() ? AuthType.ONLINE : AuthType.OFFLINE);
|
||||
|
||||
super.authenticateWithMicrosoftCode();
|
||||
} else {
|
||||
// Disconnect the player if they haven't picked a server on the master server list
|
||||
bedrockServerSession.disconnect("Please connect to the master server and pick a server first!");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void login() {
|
||||
Player player = MasterServer.getInstance().getPlayers().get(getAuthData().getXboxUUID());
|
||||
|
@ -77,7 +95,6 @@ public class GeyserProxySession extends GeyserSession {
|
|||
Player player = MasterServer.getInstance().getPlayers().get(authData.getXboxUUID());
|
||||
if (player == null) {
|
||||
bedrockServerSession.disconnect("Please connect to the master server and pick a server first!");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -83,8 +83,7 @@ public class UIHandler {
|
|||
* @return A {@link SimpleFormWindow} object
|
||||
*/
|
||||
public static FormWindow getWaitingScreen(Server server) {
|
||||
SimpleFormWindow window = new SimpleFormWindow("Connecting", "Please wait while we connect you to " + server.toString());
|
||||
return window;
|
||||
return new SimpleFormWindow("Connecting", "Please wait while we connect you to " + server.toString());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -93,13 +92,12 @@ public class UIHandler {
|
|||
* @return A {@link CustomFormWindow} object
|
||||
*/
|
||||
public static FormWindow getDirectConnect() {
|
||||
CustomFormWindow window = new CustomFormBuilder("Direct Connect")
|
||||
return new CustomFormBuilder("Direct Connect")
|
||||
.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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -128,13 +126,12 @@ public class UIHandler {
|
|||
* @return A {@link CustomFormWindow} object
|
||||
*/
|
||||
public static FormWindow getAddServer() {
|
||||
CustomFormWindow window = new CustomFormBuilder("Add Server")
|
||||
return new CustomFormBuilder("Add Server")
|
||||
.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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -176,14 +173,13 @@ public class UIHandler {
|
|||
*/
|
||||
public static FormWindow getEditServer(int serverIndex, Server server) {
|
||||
String port = String.valueOf(server.getPort());
|
||||
CustomFormWindow window = new CustomFormBuilder("Edit Server")
|
||||
return new CustomFormBuilder("Edit Server")
|
||||
.addComponent(new LabelComponent("Server at index: " + serverIndex))
|
||||
.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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -227,7 +223,7 @@ public class UIHandler {
|
|||
|
||||
try {
|
||||
String address = data.getInputResponses().get(0);
|
||||
int port = Integer.valueOf(data.getInputResponses().get(1));
|
||||
int port = Integer.parseInt(data.getInputResponses().get(1));
|
||||
boolean online = data.getToggleResponses().get(2);
|
||||
boolean bedrock = data.getToggleResponses().get(3);
|
||||
|
||||
|
@ -288,7 +284,7 @@ public class UIHandler {
|
|||
|
||||
try {
|
||||
String address = data.getInputResponses().get(0);
|
||||
int port = Integer.valueOf(data.getInputResponses().get(1));
|
||||
int port = Integer.parseInt(data.getInputResponses().get(1));
|
||||
boolean online = data.getToggleResponses().get(2);
|
||||
boolean bedrock = data.getToggleResponses().get(3);
|
||||
|
||||
|
@ -399,10 +395,10 @@ public class UIHandler {
|
|||
}
|
||||
|
||||
try {
|
||||
int serverIndex = Integer.valueOf(data.getLabelResponses().get(0).split(":")[1].trim());
|
||||
int serverIndex = Integer.parseInt(data.getLabelResponses().get(0).split(":")[1].trim());
|
||||
|
||||
String address = data.getInputResponses().get(1);
|
||||
int port = Integer.valueOf(data.getInputResponses().get(2));
|
||||
int port = Integer.parseInt(data.getInputResponses().get(2));
|
||||
boolean online = data.getToggleResponses().get(3);
|
||||
boolean bedrock = data.getToggleResponses().get(4);
|
||||
|
||||
|
|
|
@ -25,6 +25,9 @@ geyser:
|
|||
# The port that will listen for connections
|
||||
port: 19133
|
||||
|
||||
# If password authentication should be allowed in online mode.
|
||||
allow-password-authentication: true
|
||||
|
||||
# If debug messages should be sent through console, has to be enabled in both places to work
|
||||
debug-mode: false
|
||||
|
||||
|
|
|
@ -32,6 +32,7 @@ remote:
|
|||
port: 25565
|
||||
# Authentication type. Can be offline, online, or floodgate (see https://github.com/GeyserMC/Geyser/wiki/Floodgate).
|
||||
auth-type: online
|
||||
allow-password-authentication: ALLOWPASSWORDAUTHENTICATION
|
||||
|
||||
# Floodgate uses encryption to ensure use from authorised sources.
|
||||
# This should point to the public key generated by Floodgate (Bungee or CraftBukkit)
|
||||
|
|
Loading…
Add table
Reference in a new issue