Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-12-27 08:30:12 +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) {
|
public void translate(GeyserSession session, ClientboundLoginDisconnectPacket packet) {
|
||||||
Component disconnectReason = packet.getReason();
|
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) {
|
if (disconnectReason instanceof TranslatableComponent component) {
|
||||||
String key = component.key();
|
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
|
// Seen with Velocity 1.18 rejecting a 1.19 client
|
||||||
"multiplayer.disconnect.outdated_client".equals(key) ||
|
"multiplayer.disconnect.outdated_client".equals(key) ||
|
||||||
// Legacy string (starting from at least 1.15.2)
|
// 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 (disconnectReason instanceof TextComponent component) {
|
||||||
if (component.content().startsWith("Outdated server!")) {
|
if (component.content().startsWith("Outdated server!")) {
|
||||||
// Reproduced with vanilla 1.8.8 server and 1.18.2 Java client
|
// Reproduced with vanilla 1.8.8 server and 1.18.2 Java client
|
||||||
isOutdatedMessage = true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
List<Component> children = component.children();
|
List<Component> children = component.children();
|
||||||
for (int i = 0; i < children.size(); i++) {
|
for (int i = 0; i < children.size(); i++) {
|
||||||
if (children.get(i) instanceof TextComponent child && child.content().startsWith("Outdated server!")) {
|
if (children.get(i) instanceof TextComponent child && child.content().startsWith("Outdated server!")) {
|
||||||
// Reproduced on Paper 1.17.1
|
// Reproduced on Paper 1.17.1
|
||||||
isOutdatedMessage = true;
|
return true;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
String serverDisconnectMessage = MessageTranslator.convertMessage(disconnectReason, session.locale());
|
private boolean testForMissingProfilePublicKey(Component disconnectReason) {
|
||||||
String disconnectMessage;
|
return disconnectReason instanceof TranslatableComponent component && "multiplayer.disconnect.missing_public_key".equals(component.key());
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren