Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-12-26 16:12:46 +01:00
Elaborate if secure profiles need to be disabled
Dieser Commit ist enthalten in:
Ursprung
55f7253a98
Commit
5206bc3b99
@ -46,10 +46,30 @@ public class JavaLoginDisconnectTranslator extends PacketTranslator<ClientboundL
|
||||
public void translate(GeyserSession session, ClientboundLoginDisconnectPacket packet) {
|
||||
Component disconnectReason = packet.getReason();
|
||||
|
||||
boolean isOutdatedMessage = false;
|
||||
String serverDisconnectMessage = MessageTranslator.convertMessage(disconnectReason, session.locale());
|
||||
String disconnectMessage;
|
||||
if (testForOutdatedServer(disconnectReason)) {
|
||||
String locale = session.locale();
|
||||
PlatformType platform = session.getGeyser().getPlatformType();
|
||||
String outdatedType = (platform == PlatformType.BUNGEECORD || platform == PlatformType.VELOCITY) ?
|
||||
"geyser.network.remote.outdated.proxy" : "geyser.network.remote.outdated.server";
|
||||
disconnectMessage = GeyserLocale.getPlayerLocaleString(outdatedType, locale, GameProtocol.getJavaVersions().get(0)) + '\n'
|
||||
+ GeyserLocale.getPlayerLocaleString("geyser.network.remote.original_disconnect_message", locale, serverDisconnectMessage);
|
||||
} else if (testForMissingProfilePublicKey(disconnectReason)) {
|
||||
disconnectMessage = "Please set `enforce-secure-profile` to `false` in server.properties for Bedrock players to be able to connect." + '\n'
|
||||
+ GeyserLocale.getPlayerLocaleString("geyser.network.remote.original_disconnect_message", session.locale(), serverDisconnectMessage);
|
||||
} else {
|
||||
disconnectMessage = serverDisconnectMessage;
|
||||
}
|
||||
|
||||
// The client doesn't manually get disconnected so we have to do it ourselves
|
||||
session.disconnect(disconnectMessage);
|
||||
}
|
||||
|
||||
private boolean testForOutdatedServer(Component disconnectReason) {
|
||||
if (disconnectReason instanceof TranslatableComponent component) {
|
||||
String key = component.key();
|
||||
isOutdatedMessage = "multiplayer.disconnect.incompatible".equals(key) ||
|
||||
return "multiplayer.disconnect.incompatible".equals(key) ||
|
||||
// Seen with Velocity 1.18 rejecting a 1.19 client
|
||||
"multiplayer.disconnect.outdated_client".equals(key) ||
|
||||
// Legacy string (starting from at least 1.15.2)
|
||||
@ -60,35 +80,23 @@ public class JavaLoginDisconnectTranslator extends PacketTranslator<ClientboundL
|
||||
if (disconnectReason instanceof TextComponent component) {
|
||||
if (component.content().startsWith("Outdated server!")) {
|
||||
// Reproduced with vanilla 1.8.8 server and 1.18.2 Java client
|
||||
isOutdatedMessage = true;
|
||||
return true;
|
||||
} else {
|
||||
List<Component> children = component.children();
|
||||
for (int i = 0; i < children.size(); i++) {
|
||||
if (children.get(i) instanceof TextComponent child && child.content().startsWith("Outdated server!")) {
|
||||
// Reproduced on Paper 1.17.1
|
||||
isOutdatedMessage = true;
|
||||
break;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
String serverDisconnectMessage = MessageTranslator.convertMessage(disconnectReason, session.locale());
|
||||
String disconnectMessage;
|
||||
if (isOutdatedMessage) {
|
||||
String locale = session.locale();
|
||||
PlatformType platform = session.getGeyser().getPlatformType();
|
||||
String outdatedType = (platform == PlatformType.BUNGEECORD || platform == PlatformType.VELOCITY) ?
|
||||
"geyser.network.remote.outdated.proxy" : "geyser.network.remote.outdated.server";
|
||||
disconnectMessage = GeyserLocale.getPlayerLocaleString(outdatedType, locale, GameProtocol.getJavaVersions().get(0)) + '\n'
|
||||
+ GeyserLocale.getPlayerLocaleString("geyser.network.remote.original_disconnect_message", locale, serverDisconnectMessage);
|
||||
} else {
|
||||
disconnectMessage = serverDisconnectMessage;
|
||||
}
|
||||
|
||||
// The client doesn't manually get disconnected so we have to do it ourselves
|
||||
session.disconnect(disconnectMessage);
|
||||
private boolean testForMissingProfilePublicKey(Component disconnectReason) {
|
||||
return disconnectReason instanceof TranslatableComponent component && "multiplayer.disconnect.missing_public_key".equals(component.key());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren