3
0
Mirror von https://github.com/GeyserMC/Geyser.git synchronisiert 2024-10-08 10:50:11 +02:00

More descriptive disconnect messages for outdated Java servers

Dieser Commit ist enthalten in:
Camotoy 2022-03-18 10:51:22 -04:00
Ursprung 0829b5cd4e
Commit 607e97f988
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 7EEFB66FE798081F
3 geänderte Dateien mit 38 neuen und 18 gelöschten Zeilen

Datei anzeigen

@ -100,7 +100,7 @@ public class GeyserSession {
} }
public void login() { public void login() {
this.handle.login(); throw new UnsupportedOperationException();
} }
public void authenticate(String username) { public void authenticate(String username) {
@ -120,7 +120,7 @@ public class GeyserSession {
} }
public void close() { public void close() {
this.handle.close(); throw new UnsupportedOperationException();
} }
public void executeInEventLoop(Runnable runnable) { public void executeInEventLoop(Runnable runnable) {

Datei anzeigen

@ -625,17 +625,6 @@ public class GeyserSession implements GeyserConnection, CommandSender {
upstream.sendPacket(gamerulePacket); upstream.sendPacket(gamerulePacket);
} }
public void login() {
if (this.remoteAuthType != AuthType.ONLINE) {
if (this.remoteAuthType == AuthType.OFFLINE) {
geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.auth.login.offline"));
} else {
geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.auth.login.floodgate"));
}
authenticate(authData.name());
}
}
public void authenticate(String username) { public void authenticate(String username) {
authenticate(username, ""); authenticate(username, "");
} }
@ -1046,10 +1035,6 @@ public class GeyserSession implements GeyserConnection, CommandSender {
closed = true; closed = true;
} }
public void close() {
disconnect(GeyserLocale.getPlayerLocaleString("geyser.network.close", getClientData().getLanguageCode()));
}
/** /**
* Executes a task and prints a stack trace if an error occurs. * Executes a task and prints a stack trace if an error occurs.
*/ */

Datei anzeigen

@ -26,7 +26,13 @@
package org.geysermc.geyser.translator.protocol.java; package org.geysermc.geyser.translator.protocol.java;
import com.github.steveice10.mc.protocol.packet.login.clientbound.ClientboundLoginDisconnectPacket; import com.github.steveice10.mc.protocol.packet.login.clientbound.ClientboundLoginDisconnectPacket;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.TranslatableComponent;
import org.geysermc.common.PlatformType;
import org.geysermc.geyser.network.MinecraftProtocol;
import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.text.GeyserLocale;
import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.PacketTranslator;
import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.translator.protocol.Translator;
import org.geysermc.geyser.translator.text.MessageTranslator; import org.geysermc.geyser.translator.text.MessageTranslator;
@ -36,8 +42,37 @@ public class JavaLoginDisconnectTranslator extends PacketTranslator<ClientboundL
@Override @Override
public void translate(GeyserSession session, ClientboundLoginDisconnectPacket packet) { public void translate(GeyserSession session, ClientboundLoginDisconnectPacket packet) {
Component disconnectReason = packet.getReason();
boolean isOutdatedMessage;
if (disconnectReason instanceof TranslatableComponent component) {
String key = component.key();
isOutdatedMessage = "multiplayer.disconnect.incompatible".equals(key) ||
// Legacy string (starting from at least 1.15.2)
"multiplayer.disconnect.outdated_server".equals(key)
// Reproduced on 1.15.2 server with ViaVersion 4.0.0-21w20a with 1.18.2 Java client
|| key.startsWith("Outdated server!");
} else {
// Reproduced with vanilla 1.8.8 server and 1.18.2 Java client
isOutdatedMessage = disconnectReason instanceof TextComponent component
&& component.content().startsWith("Outdated server!");
}
String serverDisconnectMessage = MessageTranslator.convertMessage(disconnectReason, session.getLocale());
String disconnectMessage;
if (isOutdatedMessage) {
String locale = session.getLocale();
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, MinecraftProtocol.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 // The client doesn't manually get disconnected so we have to do it ourselves
session.disconnect(MessageTranslator.convertMessage(packet.getReason(), session.getLocale())); session.disconnect(disconnectMessage);
} }
@Override @Override