Skip to content

Commit 781ce1c

Browse files
committed
Fix /cenchant crash with ViaFabricPlus. Fixes #535
1 parent 41fa95a commit 781ce1c

File tree

1 file changed

+9
-22
lines changed

1 file changed

+9
-22
lines changed

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

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,12 @@
66
import io.netty.channel.ChannelHandler;
77
import net.fabricmc.loader.api.FabricLoader;
88
import net.fabricmc.loader.api.ModContainer;
9-
import net.fabricmc.loader.api.Version;
10-
import net.fabricmc.loader.api.VersionParsingException;
119
import net.minecraft.SharedConstants;
1210
import net.minecraft.client.MinecraftClient;
1311
import net.minecraft.client.network.ClientPlayNetworkHandler;
1412
import net.minecraft.item.Item;
1513
import net.minecraft.network.ClientConnection;
1614
import net.minecraft.util.Util;
17-
import org.jetbrains.annotations.Nullable;
1815
import org.slf4j.Logger;
1916

2017
import java.lang.reflect.Field;
@@ -48,7 +45,7 @@ public boolean doesItemExist(Item item) {
4845
if ((modContainer = loader.getModContainer("viafabric").orElse(null)) != null) {
4946
return new ViaFabric();
5047
} else if ((modContainer = loader.getModContainer("viafabricplus").orElse(null)) != null) {
51-
return new ViaFabricPlus(modContainer);
48+
return new ViaFabricPlus();
5249
} else {
5350
return new None();
5451
}
@@ -180,42 +177,32 @@ private int doGetProtocolVersion() throws ReflectiveOperationException {
180177
private static final class ViaFabricPlus extends AbstractViaVersion {
181178
private final Field itemReleaseVersionMappingsInstance;
182179
private final Method getTargetVersion;
183-
@Nullable
184180
private final Method versionEnumGetProtocol;
185181
private final Method itemReleaseVersionMappingsContains;
186182

187-
private static final Version V2_7_3 = Util.make(() -> {
188-
try {
189-
return Version.parse("2.7.3");
190-
} catch (VersionParsingException e) {
191-
throw new AssertionError(e);
192-
}
193-
});
194-
195-
private ViaFabricPlus(ModContainer modContainer) throws ReflectiveOperationException {
183+
private ViaFabricPlus() throws ReflectiveOperationException {
196184
Class<?> protocolHack = Class.forName("de.florianmichael.viafabricplus.protocolhack.ProtocolHack");
197185
Class<?> itemReleaseVersionMappings = Class.forName("de.florianmichael.viafabricplus.mappings.ItemReleaseVersionMappings");
198186
itemReleaseVersionMappingsInstance = itemReleaseVersionMappings.getField("INSTANCE");
199187
getTargetVersion = protocolHack.getMethod("getTargetVersion");
200-
versionEnumGetProtocol = modContainer.getMetadata().getVersion().compareTo(V2_7_3) <= 0 ? null
201-
: getTargetVersion.getReturnType().getMethod("getProtocol");
188+
versionEnumGetProtocol = getTargetVersion.getReturnType().getMethod("getProtocol");
202189
itemReleaseVersionMappingsContains = itemReleaseVersionMappings.getMethod("contains", Item.class, getTargetVersion.getReturnType());
203190
}
204191

205192
@Override
206193
protected Object getCurrentVersion() throws ReflectiveOperationException {
207-
Object targetVersion = getTargetVersion.invoke(null);
208-
if (versionEnumGetProtocol != null) {
209-
targetVersion = versionEnumGetProtocol.invoke(targetVersion);
210-
}
211-
return targetVersion;
194+
return versionEnumGetProtocol.invoke(getVersionEnum());
195+
}
196+
197+
private Object getVersionEnum() throws ReflectiveOperationException {
198+
return getTargetVersion.invoke(null);
212199
}
213200

214201
@Override
215202
public boolean doesItemExist(Item item) {
216203
try {
217204
Object instance = itemReleaseVersionMappingsInstance.get(null);
218-
return (Boolean) itemReleaseVersionMappingsContains.invoke(instance, item, getCurrentVersion());
205+
return (Boolean) itemReleaseVersionMappingsContains.invoke(instance, item, getVersionEnum());
219206
} catch (ReflectiveOperationException e) {
220207
throw new RuntimeException(e);
221208
}

0 commit comments

Comments
 (0)