diff --git a/src/main/java/net/minecraftforge/common/config/Config.java b/src/main/java/net/minecraftforge/common/config/Config.java index ec84d339c..4c18fe780 100644 --- a/src/main/java/net/minecraftforge/common/config/Config.java +++ b/src/main/java/net/minecraftforge/common/config/Config.java @@ -31,7 +31,7 @@ /** * The mod id that this configuration is associated with. */ - String modid(); + String modid() default ""; /** * A user friendly name for the config file, * the default will be modid diff --git a/src/main/java/net/minecraftforge/common/config/ConfigManager.java b/src/main/java/net/minecraftforge/common/config/ConfigManager.java index c4dcda5fd..f8d7fa995 100644 --- a/src/main/java/net/minecraftforge/common/config/ConfigManager.java +++ b/src/main/java/net/minecraftforge/common/config/ConfigManager.java @@ -47,6 +47,8 @@ import net.minecraftforge.fml.common.discovery.ASMDataTable.ASMData; import net.minecraftforge.fml.common.discovery.asm.ModAnnotation.EnumHolder; +import com.cleanroommc.discovery.CleanroomModDiscoverer; + import org.apache.commons.lang3.StringUtils; public class ConfigManager @@ -113,6 +115,19 @@ public static void loadData(ASMDataTable data) for (ASMData target : data.getAll(Config.class)) { String modid = (String)target.getAnnotationInfo().get("modid"); + if (modid == null) { + var containedMods = target.getCandidate().getContainedMods(); + if (containedMods != null && containedMods.isEmpty()) { + modid = containedMods.getFirst().getModId(); + } else { + modid = CleanroomModDiscoverer.instance() + .modFromSource(target.getCandidate().getModContainer()); + if (modid == null) throw new IllegalStateException( + "Could not infer the modid for the config " + target.getClassName() + ); + } + } + Multimap map = asm_data.computeIfAbsent(modid, k -> ArrayListMultimap.create()); EnumHolder tholder = (EnumHolder)target.getAnnotationInfo().get("type"); @@ -460,4 +475,4 @@ public static void sync(Class configClass) { cfg.save(); } -} \ No newline at end of file +}