Mirror von
https://github.com/ViaVersion/ViaVersion.git
synchronisiert 2024-12-27 08:30:09 +01:00
Allow base protocols to set client version (#4029)
Dieser Commit ist enthalten in:
Ursprung
5ec30ef18a
Commit
f2f0be0581
@ -28,6 +28,17 @@ import com.viaversion.viaversion.api.platform.providers.Provider;
|
|||||||
@FunctionalInterface
|
@FunctionalInterface
|
||||||
public interface VersionProvider extends Provider {
|
public interface VersionProvider extends Provider {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Optionally allows platforms to specify the client version of a user. This is needed when the platform supports
|
||||||
|
* connecting other version types then {@link VersionType#RELEASE} to the server.
|
||||||
|
*
|
||||||
|
* @param connection connection
|
||||||
|
* @return client protocol version, or null if handshake packet should be used
|
||||||
|
*/
|
||||||
|
default ProtocolVersion getClientProtocol(UserConnection connection) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the closest server protocol version to the user's protocol version.
|
* Returns the closest server protocol version to the user's protocol version.
|
||||||
* On non-proxy servers, this returns the actual server version.
|
* On non-proxy servers, this returns the actual server version.
|
||||||
|
@ -61,15 +61,21 @@ public class BaseProtocol extends AbstractProtocol<BaseClientboundPacket, BaseCl
|
|||||||
wrapper.passthrough(Types.UNSIGNED_SHORT); // Server Port
|
wrapper.passthrough(Types.UNSIGNED_SHORT); // Server Port
|
||||||
int state = wrapper.passthrough(Types.VAR_INT);
|
int state = wrapper.passthrough(Types.VAR_INT);
|
||||||
|
|
||||||
ProtocolInfo info = wrapper.user().getProtocolInfo();
|
|
||||||
info.setProtocolVersion(ProtocolVersion.getProtocol(protocolVersion));
|
|
||||||
// Ensure the server has a version provider
|
|
||||||
VersionProvider versionProvider = Via.getManager().getProviders().get(VersionProvider.class);
|
VersionProvider versionProvider = Via.getManager().getProviders().get(VersionProvider.class);
|
||||||
|
// Ensure the server has a version provider
|
||||||
if (versionProvider == null) {
|
if (versionProvider == null) {
|
||||||
wrapper.user().setActive(false);
|
wrapper.user().setActive(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ProtocolInfo info = wrapper.user().getProtocolInfo();
|
||||||
|
ProtocolVersion clientVersion = versionProvider.getClientProtocol(wrapper.user());
|
||||||
|
if (clientVersion != null) {
|
||||||
|
info.setProtocolVersion(clientVersion);
|
||||||
|
} else {
|
||||||
|
info.setProtocolVersion(ProtocolVersion.getProtocol(protocolVersion));
|
||||||
|
}
|
||||||
|
|
||||||
// Choose the pipe
|
// Choose the pipe
|
||||||
ProtocolVersion serverProtocol;
|
ProtocolVersion serverProtocol;
|
||||||
try {
|
try {
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren