From 1e30c893704ec31fb37f6dd265dbeeb92a9618a9 Mon Sep 17 00:00:00 2001
From: CheaterCodes <cheater.codes@outlook.com>
Date: Wed, 19 Aug 2020 21:21:15 +0200
Subject: [PATCH] Fixed some generics

---
 .../DynamicRegistryEntryAddedCallback.java    |  9 ++++----
 .../registry/sync/DynamicRegistryEvents.java  | 22 +++++++++----------
 .../sync/DynamicRegistryManagerMixin.java     |  6 ++---
 3 files changed, 18 insertions(+), 19 deletions(-)

diff --git a/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/api/event/registry/DynamicRegistryEntryAddedCallback.java b/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/api/event/registry/DynamicRegistryEntryAddedCallback.java
index 8363a4d2c..ad4f7d129 100644
--- a/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/api/event/registry/DynamicRegistryEntryAddedCallback.java
+++ b/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/api/event/registry/DynamicRegistryEntryAddedCallback.java
@@ -24,14 +24,15 @@ import net.fabricmc.fabric.api.event.Event;
 import net.fabricmc.fabric.impl.registry.sync.DynamicRegistryEvents;
 
 @FunctionalInterface
-public interface DynamicRegistryEntryAddedCallback {
-	void onEntryAdded(int rawId, RegistryKey<?> key, Object object, MutableRegistry<?> registry);
+public interface DynamicRegistryEntryAddedCallback<T> {
+	void onEntryAdded(int rawId, RegistryKey<T> key, T object, MutableRegistry<T> registry);
 
-	static Event<DynamicRegistryEntryAddedCallback> event(RegistryKey<? extends Registry<?>> registryKey) {
+	@SuppressWarnings("unchecked")
+	static <T> Event<DynamicRegistryEntryAddedCallback<T>> event(RegistryKey<? extends Registry<T>> registryKey) {
 		if (!DynamicRegistryEvents.ADD_ENTRY_EVENTS.containsKey(registryKey)) {
 			throw new IllegalArgumentException("Unsupported registry: " + registryKey);
 		}
 
-		return DynamicRegistryEvents.ADD_ENTRY_EVENTS.get(registryKey);
+		return (Event<DynamicRegistryEntryAddedCallback<T>>) DynamicRegistryEvents.ADD_ENTRY_EVENTS.get(registryKey);
 	}
 }
diff --git a/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/impl/registry/sync/DynamicRegistryEvents.java b/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/impl/registry/sync/DynamicRegistryEvents.java
index e8827b160..e0509c88c 100644
--- a/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/impl/registry/sync/DynamicRegistryEvents.java
+++ b/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/impl/registry/sync/DynamicRegistryEvents.java
@@ -28,24 +28,22 @@ import net.fabricmc.fabric.api.event.EventFactory;
 import net.fabricmc.fabric.api.event.registry.DynamicRegistryEntryAddedCallback;
 import net.fabricmc.fabric.mixin.registry.sync.DynamicRegistryManagerAccessor;
 
+@SuppressWarnings({"rawtypes", "unchecked"})
 public final class DynamicRegistryEvents {
-	public static Map<RegistryKey<? extends Registry<?>>, Event<DynamicRegistryEntryAddedCallback>> ADD_ENTRY_EVENTS;
-
-	private DynamicRegistryEvents() {
-	}
+	public static final Map<RegistryKey<? extends Registry<?>>, Event<?>> ADD_ENTRY_EVENTS;
 
 	static {
 		ADD_ENTRY_EVENTS = Maps.newLinkedHashMap();
 
 		for (RegistryKey<? extends Registry<?>> registryKey : DynamicRegistryManagerAccessor.getInfos().keySet()) {
-			ADD_ENTRY_EVENTS.put(registryKey,
-					EventFactory.createArrayBacked(
-					DynamicRegistryEntryAddedCallback.class,
-						callbacks -> (rawId, key, object, registry) -> {
-							for (DynamicRegistryEntryAddedCallback callback : callbacks) {
-								callback.onEntryAdded(rawId, key, object, registry);
-							}
-						}));
+			ADD_ENTRY_EVENTS.put(registryKey, EventFactory.createArrayBacked(DynamicRegistryEntryAddedCallback.class,
+					callbacks -> (rawId, key, object, registry) -> {
+						for (DynamicRegistryEntryAddedCallback callback : callbacks) {
+							callback.onEntryAdded(rawId, key, object, registry);
+						}
+					}));
 		}
 	}
+
+	private DynamicRegistryEvents() { }
 }
diff --git a/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/mixin/registry/sync/DynamicRegistryManagerMixin.java b/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/mixin/registry/sync/DynamicRegistryManagerMixin.java
index 95128b71d..28ed013bd 100644
--- a/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/mixin/registry/sync/DynamicRegistryManagerMixin.java
+++ b/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/mixin/registry/sync/DynamicRegistryManagerMixin.java
@@ -35,14 +35,14 @@ import net.fabricmc.fabric.impl.registry.sync.DynamicRegistryEvents;
 
 @Mixin(DynamicRegistryManager.class)
 public class DynamicRegistryManagerMixin {
+	@SuppressWarnings({"unchecked", "rawtypes"})
 	@Inject(method = "create", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/dynamic/RegistryOps$class_5506$class_5507;<init>()V"), locals = LocalCapture.CAPTURE_FAILHARD)
 	private static void onCreateImpl(CallbackInfoReturnable<DynamicRegistryManager.Impl> cir, DynamicRegistryManager.Impl registryManager) {
-		for (Map.Entry<RegistryKey<? extends Registry<?>>, Event<DynamicRegistryEntryAddedCallback>> event : DynamicRegistryEvents.ADD_ENTRY_EVENTS.entrySet()) {
-			//noinspection unchecked
+		for (Map.Entry<RegistryKey<? extends Registry<?>>, Event<?>> event : DynamicRegistryEvents.ADD_ENTRY_EVENTS.entrySet()) {
 			RegistryKey<? extends Registry<Object>> registryKey = (RegistryKey<? extends Registry<Object>>) event.getKey();
 			RegistryEntryAddedCallback.event(registryManager.get(registryKey)).register((rawId, id, object) -> {
 				RegistryKey<?> key = RegistryKey.of(registryKey, id);
-				event.getValue().invoker().onEntryAdded(rawId, key, object, registryManager.get(registryKey));
+				((DynamicRegistryEntryAddedCallback) event.getValue().invoker()).onEntryAdded(rawId, key, object, registryManager.get(registryKey));
 			});
 		}
 	}