From d16567444c4b2fd5265ffdf24c39f8f21b9f830d Mon Sep 17 00:00:00 2001
From: LatvianModder <latvianmodder@gmail.com>
Date: Thu, 27 Jun 2024 20:01:31 +0300
Subject: [PATCH] Added EMI category removing support

---
 .../integration/emi/KubeJSEMIPlugin.java      | 33 ++++++++++++++++++-
 1 file changed, 32 insertions(+), 1 deletion(-)

diff --git a/src/main/java/dev/latvian/mods/kubejs/integration/emi/KubeJSEMIPlugin.java b/src/main/java/dev/latvian/mods/kubejs/integration/emi/KubeJSEMIPlugin.java
index 0160a31bb..1ed676eaf 100644
--- a/src/main/java/dev/latvian/mods/kubejs/integration/emi/KubeJSEMIPlugin.java
+++ b/src/main/java/dev/latvian/mods/kubejs/integration/emi/KubeJSEMIPlugin.java
@@ -10,8 +10,11 @@
 import dev.latvian.mods.kubejs.recipe.viewer.RecipeViewerEvents;
 import dev.latvian.mods.kubejs.recipe.viewer.server.RecipeViewerData;
 import dev.latvian.mods.kubejs.script.ScriptType;
+import net.minecraft.resources.ResourceLocation;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Set;
 
 @EmiEntrypoint
 public class KubeJSEMIPlugin implements EmiPlugin {
@@ -19,7 +22,35 @@ public class KubeJSEMIPlugin implements EmiPlugin {
 	public void register(EmiRegistry registry) {
 		var remote = RecipeViewerData.remote;
 
-		registry.removeRecipes(r -> remote.removedGlobalRecipes().contains(r.getId()));
+		if (remote != null) {
+			var removedCategories = Set.copyOf(remote.removedCategories());
+			var globalRemovedRecipes = Set.copyOf(remote.removedGlobalRecipes());
+			var removedRecipes = new HashMap<ResourceLocation, Set<ResourceLocation>>();
+
+			for (var data : remote.categoryData()) {
+				removedRecipes.put(data.category(), Set.copyOf(data.removedRecipes()));
+			}
+
+			registry.removeRecipes(r -> {
+				var cat = r.getCategory().getId();
+
+				if (cat == null) {
+					return false;
+				}
+
+				if (removedCategories.contains(cat)) {
+					return true;
+				}
+
+				var id = r.getId();
+
+				if (id == null) {
+					return false;
+				}
+
+				return globalRemovedRecipes.contains(id) || removedRecipes.getOrDefault(cat, Set.of()).contains(id);
+			});
+		}
 
 		for (var type : RecipeViewerEntryType.ALL_TYPES.get()) {
 			if (RecipeViewerEvents.REMOVE_ENTRIES.hasListeners(type)) {