mirror of
https://github.com/GeyserMC/Geyser.git
synced 2024-08-14 23:57:35 +00:00
More descriptive disconnect messages for outdated Java servers
This commit is contained in:
parent
0829b5cd4e
commit
607e97f988
3 changed files with 38 additions and 18 deletions
|
@ -100,7 +100,7 @@ public class GeyserSession {
|
|||
}
|
||||
|
||||
public void login() {
|
||||
this.handle.login();
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
public void authenticate(String username) {
|
||||
|
@ -120,7 +120,7 @@ public class GeyserSession {
|
|||
}
|
||||
|
||||
public void close() {
|
||||
this.handle.close();
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
public void executeInEventLoop(Runnable runnable) {
|
||||
|
|
|
@ -625,17 +625,6 @@ public class GeyserSession implements GeyserConnection, CommandSender {
|
|||
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) {
|
||||
authenticate(username, "");
|
||||
}
|
||||
|
@ -1046,10 +1035,6 @@ public class GeyserSession implements GeyserConnection, CommandSender {
|
|||
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.
|
||||
*/
|
||||
|
|
|
@ -26,7 +26,13 @@
|
|||
package org.geysermc.geyser.translator.protocol.java;
|
||||
|
||||
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.text.GeyserLocale;
|
||||
import org.geysermc.geyser.translator.protocol.PacketTranslator;
|
||||
import org.geysermc.geyser.translator.protocol.Translator;
|
||||
import org.geysermc.geyser.translator.text.MessageTranslator;
|
||||
|
@ -36,8 +42,37 @@ public class JavaLoginDisconnectTranslator extends PacketTranslator<ClientboundL
|
|||
|
||||
@Override
|
||||
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
|
||||
session.disconnect(MessageTranslator.convertMessage(packet.getReason(), session.getLocale()));
|
||||
session.disconnect(disconnectMessage);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Reference in a new issue