From d6d9a45100a88be4c1c296cd605fa15b8da4a7c0 Mon Sep 17 00:00:00 2001 From: LexManos Date: Sat, 20 Aug 2016 17:09:58 -0700 Subject: [PATCH] Add legacy support for signature change of AddCallback. --- .../registry/PersistentRegistryManager.java | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraftforge/fml/common/registry/PersistentRegistryManager.java b/src/main/java/net/minecraftforge/fml/common/registry/PersistentRegistryManager.java index 938ab5c70..9c7a8aabd 100644 --- a/src/main/java/net/minecraftforge/fml/common/registry/PersistentRegistryManager.java +++ b/src/main/java/net/minecraftforge/fml/common/registry/PersistentRegistryManager.java @@ -166,7 +166,7 @@ public class PersistentRegistryManager IForgeRegistry.CreateCallback createCallback) { return PersistentRegistry.ACTIVE.createRegistry(registryName, registryType, optionalDefaultKey, minId, maxId, - addCallback, getLegacyClear(clearCallback), getLegacyCreate(createCallback), null); + getLegacyAdd(addCallback), getLegacyClear(clearCallback), getLegacyCreate(createCallback), null); } @Deprecated //Use RegistryBuilder TODO: Remove in 1.11 {Make package private so only builder can use it} public static > FMLControlledNamespacedRegistry createRegistry( @@ -789,4 +789,34 @@ public class PersistentRegistryManager } return null; //Will never get here unless things go wonkey... } + + //TODO: Remove in 1.11, creates wrappers for API breakage cpw did in registry re-work. + private static > IForgeRegistry.AddCallback getLegacyAdd(final IForgeRegistry.AddCallback cb) + { + if (cb == null) + return null; + try { + final Method mtd = cb.getClass().getMethod("onAdd", Object.class, int.class, Map.class); + return new IForgeRegistry.AddCallback() + { + @Override + public void onAdd(T obj, int id, Map slaveset) + { + try { + mtd.invoke(cb, obj, id, slaveset); + } catch (Exception e) { + e.printStackTrace( ); + Throwables.propagate(e); + } + } + }; + } catch (NoSuchMethodException e) { + e.printStackTrace(); + return cb; //Assume they are ussing modern API + } catch (SecurityException e) { + e.printStackTrace(); + Throwables.propagate(e); + } + return null; //Will never get here unless things go wonkey... + } }