mirror of
https://github.com/ViaVersion/ViaFabric.git
synced 2024-10-01 04:37:30 +02:00
check for multiconnect when trying to integrate, fix blocked servers
This commit is contained in:
parent
f2ef8e8c81
commit
b2d62b28c3
@ -27,10 +27,10 @@ package com.github.creeper123123321.viafabric.providers;
|
|||||||
import com.github.creeper123123321.viafabric.ViaFabric;
|
import com.github.creeper123123321.viafabric.ViaFabric;
|
||||||
import com.github.creeper123123321.viafabric.platform.VRClientSideUserConnection;
|
import com.github.creeper123123321.viafabric.platform.VRClientSideUserConnection;
|
||||||
import com.google.common.primitives.Ints;
|
import com.google.common.primitives.Ints;
|
||||||
|
import net.fabricmc.loader.api.FabricLoader;
|
||||||
import net.minecraft.network.ClientConnection;
|
import net.minecraft.network.ClientConnection;
|
||||||
import us.myles.ViaVersion.api.PacketWrapper;
|
import us.myles.ViaVersion.api.PacketWrapper;
|
||||||
import us.myles.ViaVersion.api.data.UserConnection;
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
import us.myles.ViaVersion.api.protocol.ProtocolRegistry;
|
|
||||||
import us.myles.ViaVersion.api.protocol.ProtocolVersion;
|
import us.myles.ViaVersion.api.protocol.ProtocolVersion;
|
||||||
import us.myles.ViaVersion.api.type.Type;
|
import us.myles.ViaVersion.api.type.Type;
|
||||||
import us.myles.ViaVersion.exception.CancelException;
|
import us.myles.ViaVersion.exception.CancelException;
|
||||||
@ -52,16 +52,18 @@ public class VRVersionProvider extends VersionProvider {
|
|||||||
|
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
Class<?> mcApiClass = Class.forName("net.earthcomputer.multiconnect.api.MultiConnectAPI");
|
if (FabricLoader.getInstance().isModLoaded("multiconnect")) {
|
||||||
Class<?> iProtocolClass = Class.forName("net.earthcomputer.multiconnect.api.IProtocol");
|
Class<?> mcApiClass = Class.forName("net.earthcomputer.multiconnect.api.MultiConnectAPI");
|
||||||
Object mcApiInstance = mcApiClass.getMethod("instance").invoke(null);
|
Class<?> iProtocolClass = Class.forName("net.earthcomputer.multiconnect.api.IProtocol");
|
||||||
List<?> protocols = (List<?>) mcApiClass.getMethod("getSupportedProtocols").invoke(mcApiInstance);
|
Object mcApiInstance = mcApiClass.getMethod("instance").invoke(null);
|
||||||
Method getValue = iProtocolClass.getMethod("getValue");
|
List<?> protocols = (List<?>) mcApiClass.getMethod("getSupportedProtocols").invoke(mcApiInstance);
|
||||||
multiconnectSupportedVersions = new TreeSet<>();
|
Method getValue = iProtocolClass.getMethod("getValue");
|
||||||
for (Object protocol : protocols) {
|
multiconnectSupportedVersions = new TreeSet<>();
|
||||||
multiconnectSupportedVersions.add((Integer) getValue.invoke(protocol));
|
for (Object protocol : protocols) {
|
||||||
|
multiconnectSupportedVersions.add((Integer) getValue.invoke(protocol));
|
||||||
|
}
|
||||||
|
ViaFabric.JLOGGER.info("ViaFabric will integrate with multiconnect");
|
||||||
}
|
}
|
||||||
ViaFabric.JLOGGER.info("ViaFabric will integrate with multiconnect");
|
|
||||||
} catch (ClassNotFoundException | IllegalAccessException | InvocationTargetException | NoSuchMethodException
|
} catch (ClassNotFoundException | IllegalAccessException | InvocationTargetException | NoSuchMethodException
|
||||||
| ClassCastException ignored) {
|
| ClassCastException ignored) {
|
||||||
}
|
}
|
||||||
@ -84,7 +86,7 @@ public class VRVersionProvider extends VersionProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (info.getState() == State.STATUS && info.getProtocolVersion() == -1
|
if (info.getState() == State.STATUS && info.getProtocolVersion() == -1
|
||||||
&& clientSideVersion != -1
|
&& (clientSideVersion != -1 || blocked)
|
||||||
&& connection.getChannel().pipeline().get(ClientConnection.class).getPacketListener()
|
&& connection.getChannel().pipeline().get(ClientConnection.class).getPacketListener()
|
||||||
.getClass().getName().startsWith("net.earthcomputer.multiconnect")) { // multiconnect version detector
|
.getClass().getName().startsWith("net.earthcomputer.multiconnect")) { // multiconnect version detector
|
||||||
int multiconnectSuggestion = getVersionForMulticonnect(clientSideVersion);
|
int multiconnectSuggestion = getVersionForMulticonnect(clientSideVersion);
|
||||||
@ -95,9 +97,8 @@ public class VRVersionProvider extends VersionProvider {
|
|||||||
newAnswer.send(info.getPipeline().contains(BaseProtocol1_16.class) ? BaseProtocol1_16.class : BaseProtocol1_7.class);
|
newAnswer.send(info.getPipeline().contains(BaseProtocol1_16.class) ? BaseProtocol1_16.class : BaseProtocol1_7.class);
|
||||||
throw CancelException.generate();
|
throw CancelException.generate();
|
||||||
}
|
}
|
||||||
if (blocked) return info.getProtocolVersion();
|
if (clientSideVersion == -1 || blocked) return info.getProtocolVersion();
|
||||||
}
|
}
|
||||||
if (clientSideVersion == -1) clientSideVersion = ProtocolRegistry.SERVER_PROTOCOL;
|
|
||||||
return clientSideVersion;
|
return clientSideVersion;
|
||||||
}
|
}
|
||||||
return super.getServerProtocol(connection);
|
return super.getServerProtocol(connection);
|
||||||
|
Loading…
Reference in New Issue
Block a user