Skip to content

Commit 572eeb2

Browse files
Fixed support for ViaFabricPlus 3.1.0 and newer versions (#609)
* Fixed support for ViaFabricPlus 3.1.0 and newer versions * Split VFP support into multiple classes, use isModLoaded() for viafabric
1 parent f20575f commit 572eeb2

File tree

1 file changed

+46
-4
lines changed

1 file changed

+46
-4
lines changed

src/main/java/net/earthcomputer/clientcommands/MultiVersionCompat.java

Lines changed: 46 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
import io.netty.channel.Channel;
66
import io.netty.channel.ChannelHandler;
77
import net.fabricmc.loader.api.FabricLoader;
8+
import net.fabricmc.loader.api.ModContainer;
9+
import net.fabricmc.loader.api.Version;
10+
import net.fabricmc.loader.api.VersionParsingException;
811
import net.minecraft.SharedConstants;
912
import net.minecraft.Util;
1013
import net.minecraft.client.Minecraft;
@@ -37,13 +40,26 @@ public boolean doesItemExist(Item item) {
3740
return true;
3841
}
3942

43+
private static final Version V3_0_6 = Util.make(() -> {
44+
try {
45+
return Version.parse("3.0.6");
46+
} catch (VersionParsingException e) {
47+
throw new AssertionError(e);
48+
}
49+
});
50+
4051
public static final MultiVersionCompat INSTANCE = Util.make(() -> {
4152
try {
4253
FabricLoader loader = FabricLoader.getInstance();
54+
ModContainer modContainer;
4355
if (loader.isModLoaded("viafabric")) {
4456
return new ViaFabric();
45-
} else if (loader.isModLoaded("viafabricplus")) {
46-
return new ViaFabricPlus();
57+
} else if ((modContainer = loader.getModContainer("viafabricplus").orElse(null)) != null) {
58+
if (modContainer.getMetadata().getVersion().compareTo(V3_0_6) > 0) {
59+
return new ViaFabricPlus(); // VFP 3.1.0 and newer
60+
} else {
61+
return new ViaFabricPlus3_0_6AndOlder(); // Once 1.20.5 is released, this can be removed
62+
}
4763
} else {
4864
return new None();
4965
}
@@ -172,12 +188,12 @@ private int doGetProtocolVersion() throws ReflectiveOperationException {
172188
}
173189
}
174190

175-
private static final class ViaFabricPlus extends AbstractViaVersion {
191+
private static final class ViaFabricPlus3_0_6AndOlder extends AbstractViaVersion {
176192
private final Method getTargetVersion;
177193
private final Method versionEnumGetProtocol;
178194
private final Method itemRegistryDiffKeepItem;
179195

180-
private ViaFabricPlus() throws ReflectiveOperationException {
196+
private ViaFabricPlus3_0_6AndOlder() throws ReflectiveOperationException {
181197
Class<?> protocolHack = Class.forName("de.florianmichael.viafabricplus.protocolhack.ProtocolHack");
182198
Class<?> itemRegistryDiff = Class.forName("de.florianmichael.viafabricplus.fixes.data.ItemRegistryDiff");
183199
getTargetVersion = protocolHack.getMethod("getTargetVersion");
@@ -199,4 +215,30 @@ public boolean doesItemExist(Item item) {
199215
}
200216
}
201217
}
218+
219+
private static final class ViaFabricPlus extends AbstractViaVersion {
220+
private final Method getTargetVersion;
221+
private final Method itemRegistryDiffKeepItem;
222+
223+
private ViaFabricPlus() throws ReflectiveOperationException {
224+
Class<?> protocolTranslator = Class.forName("de.florianmichael.viafabricplus.protocoltranslator.ProtocolTranslator");
225+
Class<?> itemRegistryDiff = Class.forName("de.florianmichael.viafabricplus.fixes.data.ItemRegistryDiff");
226+
getTargetVersion = protocolTranslator.getMethod("getTargetVersion");
227+
itemRegistryDiffKeepItem = itemRegistryDiff.getMethod("keepItem", Item.class);
228+
}
229+
230+
@Override
231+
protected Object getCurrentVersion() throws ReflectiveOperationException {
232+
return getTargetVersion.invoke(null);
233+
}
234+
235+
@Override
236+
public boolean doesItemExist(Item item) {
237+
try {
238+
return (Boolean) itemRegistryDiffKeepItem.invoke(null, item);
239+
} catch (ReflectiveOperationException e) {
240+
throw new RuntimeException(e);
241+
}
242+
}
243+
}
202244
}

0 commit comments

Comments
 (0)