From b7a08af91904b2de1adba04a59dabb5b081a0774 Mon Sep 17 00:00:00 2001 From: asie <kontakt@asie.pl> Date: Sat, 27 Apr 2019 08:32:30 +0200 Subject: [PATCH] add better registry error logging --- .../mixin/registry/MixinIdRegistry.java | 42 +++++++++++++++---- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/fabric-registry-sync/src/main/java/net/fabricmc/fabric/mixin/registry/MixinIdRegistry.java b/fabric-registry-sync/src/main/java/net/fabricmc/fabric/mixin/registry/MixinIdRegistry.java index b495147fd..e6e46d8a0 100644 --- a/fabric-registry-sync/src/main/java/net/fabricmc/fabric/mixin/registry/MixinIdRegistry.java +++ b/fabric-registry-sync/src/main/java/net/fabricmc/fabric/mixin/registry/MixinIdRegistry.java @@ -94,16 +94,44 @@ public abstract class MixinIdRegistry<T> implements RemappableRegistry, Listenab switch (mode) { case AUTHORITATIVE: break; - case REMOTE: - if (!registry.getIds().containsAll(remoteIndexedEntries.keySet())) { - throw new RemapException("Received ID map contains IDs unknown to the receiver!"); + case REMOTE: { + List<String> strings = new ArrayList<>(); + for (Identifier remoteId : remoteIndexedEntries.keySet()) { + if (!registry.getIds().contains(remoteId)) { + strings.add(" - " + remoteId); + } } - break; - case EXACT: + + if (!strings.isEmpty()) { + StringBuilder builder = new StringBuilder("Received ID map contains IDs unknown to the receiver!"); + for (String s : strings) { + builder.append('\n').append(s); + } + throw new RemapException(builder.toString()); + } + } break; + case EXACT: { if (!registry.getIds().equals(remoteIndexedEntries.keySet())) { - throw new RemapException("Local and remote ID sets do not match!"); + List<String> strings = new ArrayList<>(); + for (Identifier remoteId : remoteIndexedEntries.keySet()) { + if (!registry.getIds().contains(remoteId)) { + strings.add(" - " + remoteId + " (missing on local)"); + } + } + + for (Identifier localId : registry.getIds()) { + if (!remoteIndexedEntries.keySet().contains(localId)) { + strings.add(" - " + localId + " (missing on remote)"); + } + } + + StringBuilder builder = new StringBuilder("Local and remote ID sets do not match!"); + for (String s : strings) { + builder.append('\n').append(s); + } + throw new RemapException(builder.toString()); } - break; + } break; } // Make a copy of the previous maps.