From 682a9b7c6329d22418a2ed4e9772b42f8b1439d1 Mon Sep 17 00:00:00 2001 From: modmuss50 <modmuss50@gmail.com> Date: Fri, 11 Feb 2022 18:14:32 +0000 Subject: [PATCH] Fix crash when remapping registries with unused raw ids. --- .../fabric/mixin/registry/sync/MixinIdRegistry.java | 12 ++++++++---- .../fabric/test/registry/sync/RegistrySyncTest.java | 3 +++ gradle.properties | 6 +++--- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/mixin/registry/sync/MixinIdRegistry.java b/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/mixin/registry/sync/MixinIdRegistry.java index bfeeea584..3e2803194 100644 --- a/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/mixin/registry/sync/MixinIdRegistry.java +++ b/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/mixin/registry/sync/MixinIdRegistry.java @@ -310,13 +310,17 @@ public abstract class MixinIdRegistry<T> extends Registry<T> implements Remappab Int2IntMap idMap = new Int2IntOpenHashMap(); - for (RegistryEntry.Reference<T> o : rawIdToEntry) { - Identifier id = getId(o.value()); - int rid = getRawId(o.value()); + for (int i = 0; i < rawIdToEntry.size(); i++) { + RegistryEntry.Reference<T> reference = rawIdToEntry.get(i); + + // Unused id, skip + if (reference == null) continue; + + Identifier id = reference.registryKey().getValue(); // see above note if (remoteIndexedEntries.containsKey(id)) { - idMap.put(rid, remoteIndexedEntries.getInt(id)); + idMap.put(i, remoteIndexedEntries.getInt(id)); } } diff --git a/fabric-registry-sync-v0/src/testmod/java/net/fabricmc/fabric/test/registry/sync/RegistrySyncTest.java b/fabric-registry-sync-v0/src/testmod/java/net/fabricmc/fabric/test/registry/sync/RegistrySyncTest.java index ddf38cf01..4a78ec75b 100644 --- a/fabric-registry-sync-v0/src/testmod/java/net/fabricmc/fabric/test/registry/sync/RegistrySyncTest.java +++ b/fabric-registry-sync-v0/src/testmod/java/net/fabricmc/fabric/test/registry/sync/RegistrySyncTest.java @@ -114,6 +114,9 @@ public class RegistrySyncTest implements ModInitializer { System.out.println(id); }); }); + + // Vanilla status effects don't have an entry for the int id 0, test we can handle this. + RegistryAttributeHolder.get(Registry.STATUS_EFFECT).addAttribute(RegistryAttribute.MODDED); } private static void registerBlocks(String namespace, int amount, int startingId) { diff --git a/gradle.properties b/gradle.properties index 64a8c750d..76db2308e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ org.gradle.jvmargs=-Xmx2560M -version=0.47.0 +version=0.47.1 minecraft_version=22w06a yarn_version=+build.8 loader_version=0.13.2 @@ -17,7 +17,7 @@ fabric-commands-v0-version=0.2.7 fabric-containers-v0-version=0.1.20 fabric-content-registries-v0-version=2.0.0 fabric-crash-report-info-v1-version=0.1.10 -fabric-data-generation-api-v1-version=2.0.0 +fabric-data-generation-api-v1-version=2.0.1 fabric-dimensions-v1-version=2.1.12 fabric-entity-events-v1-version=1.4.7 fabric-events-interaction-v0-version=0.4.18 @@ -36,7 +36,7 @@ fabric-networking-api-v1-version=1.0.20 fabric-networking-v0-version=0.3.7 fabric-object-builder-api-v1-version=2.0.0 fabric-particles-v1-version=0.2.11 -fabric-registry-sync-v0-version=0.9.3 +fabric-registry-sync-v0-version=0.9.4 fabric-renderer-api-v1-version=0.4.12 fabric-renderer-indigo-version=0.4.16 fabric-renderer-registries-v1-version=3.2.10