diff --git a/src/main/java/com/cleanroommc/groovyscript/GroovyScriptConfig.java b/src/main/java/com/cleanroommc/groovyscript/GroovyScriptConfig.java index d3c9f4c2c..5fa6d8fec 100644 --- a/src/main/java/com/cleanroommc/groovyscript/GroovyScriptConfig.java +++ b/src/main/java/com/cleanroommc/groovyscript/GroovyScriptConfig.java @@ -26,5 +26,14 @@ public static class Compat { @Config.Name("ExtendedCrafting recipe maker makes grs recipes") @Config.Comment("If this is true, the recipe maker from ExtendedCrafting will produce a script for GroovyScript instead of CraftTweaker.") public boolean extendedCraftingRecipeMakerMakesGrsRecipes = true; + + @Config.Name("Blacklisted Containers") + @Config.Comment({ + "This is a list of modids to not register containers for. Only do this if the containers cause errors or crash when registered.", + "This happens when a mod uses the same modid as a mod with direct compat, but has different internals,", + "typically a fork of the original mod that breaks compatibility." + }) + @Config.RequiresMcRestart + public String[] blacklistedContainers = {}; } } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java index e2ac33af1..37371f3ff 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java @@ -1,6 +1,7 @@ package com.cleanroommc.groovyscript.compat.mods; import com.cleanroommc.groovyscript.GroovyScript; +import com.cleanroommc.groovyscript.GroovyScriptConfig; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyPlugin; import com.cleanroommc.groovyscript.compat.mods.actuallyadditions.ActuallyAdditions; @@ -78,6 +79,7 @@ import net.minecraftforge.fml.common.Loader; import net.minecraftforge.fml.common.ModContainer; import net.minecraftforge.fml.common.discovery.ASMDataTable; +import org.apache.commons.lang3.ArrayUtils; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; @@ -196,6 +198,10 @@ private void registerContainer(GroovyPlugin container) { throw new RuntimeException("Groovy mod containers must be registered at construction event! Tried to register '" + container.getContainerName() + "' too late."); } if (!Loader.isModLoaded(container.getModId())) return; + if (ArrayUtils.contains(GroovyScriptConfig.compat.blacklistedContainers, container.getModId())) { + GroovyScript.LOGGER.warn("Not registering compat for '{}' as it was in the config blacklist", container.getContainerName()); + return; + } if (hasCompatFor(container.getModId())) { GroovyContainer current = getContainer(container.getModId()); if (current.getOverridePriority().ordinal() >= container.getOverridePriority().ordinal()) { @@ -222,6 +228,10 @@ void registerContainer(GroovyContainer container) { if (containerList.contains(container) || containers.containsKey(container.getModId())) { throw new IllegalStateException("Container already present!"); } + if (ArrayUtils.contains(GroovyScriptConfig.compat.blacklistedContainers, container.getModId())) { + GroovyScript.LOGGER.warn("Not registering compat for '{}' as it was in the config blacklist", container.getContainerName()); + return; + } containerList.add(container); for (String alias : container.getAliases()) { GroovyContainer container2 = containers.put(alias, container);