Added support for snapshot client versions (Still requires VV dev access)

This commit is contained in:
RaphiMC 2024-10-30 17:53:43 +01:00
parent f155799a36
commit a4099d760f
No known key found for this signature in database
GPG key ID: 0F6BB0657A03AC94

View file

@ -22,6 +22,7 @@ import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viaversion.api.protocol.version.VersionType; import com.viaversion.viaversion.api.protocol.version.VersionType;
import com.viaversion.viaversion.protocol.RedirectProtocolVersion; import com.viaversion.viaversion.protocol.RedirectProtocolVersion;
import com.viaversion.viaversion.protocol.version.BaseVersionProvider; import com.viaversion.viaversion.protocol.version.BaseVersionProvider;
import net.raphimc.netminecraft.constants.MCVersion;
import net.raphimc.viaproxy.proxy.session.ProxyConnection; import net.raphimc.viaproxy.proxy.session.ProxyConnection;
public class ViaProxyVersionProvider extends BaseVersionProvider { public class ViaProxyVersionProvider extends BaseVersionProvider {
@ -42,7 +43,15 @@ public class ViaProxyVersionProvider extends BaseVersionProvider {
if (connection.isClientSide()) { if (connection.isClientSide()) {
return ProxyConnection.fromUserConnection(connection).getServerVersion(); return ProxyConnection.fromUserConnection(connection).getServerVersion();
} else if (clientProtocol.getVersionType() == VersionType.RELEASE) { } else if (clientProtocol.getVersionType() == VersionType.RELEASE) {
return clientProtocol; if (MCVersion.ALL_VERSIONS.containsKey(clientProtocol.getVersion())) {
return clientProtocol;
} else { // Version not supported by NetMinecraft
return MCVersion.ALL_VERSIONS.keySet().stream().min((o1, o2) -> {
final int diff1 = Math.abs(o1 - clientProtocol.getVersion());
final int diff2 = Math.abs(o2 - clientProtocol.getVersion());
return Integer.compare(diff1, diff2);
}).map(ProtocolVersion::getProtocol).orElse(ProtocolVersion.unknown);
}
} else if (clientProtocol instanceof RedirectProtocolVersion redirectProtocolVersion) { } else if (clientProtocol instanceof RedirectProtocolVersion redirectProtocolVersion) {
return redirectProtocolVersion.getOrigin(); return redirectProtocolVersion.getOrigin();
} else { } else {