check for multiconnect when trying to integrate, fix blocked servers

This commit is contained in:
creeper123123321 2020-07-06 13:41:42 -03:00
parent f2ef8e8c81
commit b2d62b28c3

View File

@ -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,6 +52,7 @@ public class VRVersionProvider extends VersionProvider {
{ {
try { try {
if (FabricLoader.getInstance().isModLoaded("multiconnect")) {
Class<?> mcApiClass = Class.forName("net.earthcomputer.multiconnect.api.MultiConnectAPI"); Class<?> mcApiClass = Class.forName("net.earthcomputer.multiconnect.api.MultiConnectAPI");
Class<?> iProtocolClass = Class.forName("net.earthcomputer.multiconnect.api.IProtocol"); Class<?> iProtocolClass = Class.forName("net.earthcomputer.multiconnect.api.IProtocol");
Object mcApiInstance = mcApiClass.getMethod("instance").invoke(null); Object mcApiInstance = mcApiClass.getMethod("instance").invoke(null);
@ -62,6 +63,7 @@ public class VRVersionProvider extends VersionProvider {
multiconnectSupportedVersions.add((Integer) getValue.invoke(protocol)); 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);