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:
Ursprung
0829b5cd4e
Commit
607e97f988
@ -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) {
|
||||||
|
@ -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.
|
||||||
*/
|
*/
|
||||||
|
@ -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
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren