diff --git a/src/main/java/net/neoforged/neoforge/data/event/GatherDataEvent.java b/src/main/java/net/neoforged/neoforge/data/event/GatherDataEvent.java index 0132789114..97c3cb908e 100644 --- a/src/main/java/net/neoforged/neoforge/data/event/GatherDataEvent.java +++ b/src/main/java/net/neoforged/neoforge/data/event/GatherDataEvent.java @@ -47,6 +47,7 @@ import net.neoforged.fml.event.IModBusEvent; import net.neoforged.fml.loading.FMLEnvironment; import net.neoforged.neoforge.resource.ResourcePackLoader; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; public abstract class GatherDataEvent extends Event implements IModBusEvent { @@ -107,6 +108,7 @@ public Client(ModContainer mc, DataGenerator dataGenerator, DataGeneratorConfig } } + @ApiStatus.Internal public static class DataGeneratorConfig { private final Set mods; private final Path path; @@ -155,10 +157,9 @@ public boolean isFlat() { return flat || getMods().size() == 1; } - public DataGenerator makeGenerator(final Function pathEnhancer, final boolean shouldExecute) { - final DataGenerator generator = new DataGenerator(pathEnhancer.apply(path), DetectedVersion.tryDetectVersion(), shouldExecute); - if (shouldExecute) - generators.add(generator); + public DataGenerator makeGenerator(final Function pathEnhancer) { + final DataGenerator generator = new DataGenerator(pathEnhancer.apply(path), DetectedVersion.tryDetectVersion(), true); + generators.add(generator); return generator; } diff --git a/src/main/java/net/neoforged/neoforge/data/loading/DatagenModLoader.java b/src/main/java/net/neoforged/neoforge/data/loading/DatagenModLoader.java index 6540788c64..10da6b25ba 100644 --- a/src/main/java/net/neoforged/neoforge/data/loading/DatagenModLoader.java +++ b/src/main/java/net/neoforged/neoforge/data/loading/DatagenModLoader.java @@ -15,7 +15,8 @@ import net.minecraft.data.DataGenerator; import net.minecraft.data.registries.VanillaRegistries; import net.minecraft.server.Bootstrap; -import net.neoforged.fml.ModLoader; +import net.neoforged.fml.ModContainer; +import net.neoforged.fml.ModList; import net.neoforged.neoforge.data.event.GatherDataEvent; import net.neoforged.neoforge.internal.CommonModLoader; import net.neoforged.neoforge.internal.RegistrationEvents; @@ -49,8 +50,16 @@ public static void begin(final Set mods, final Path path, final Collecti CompletableFuture lookupProvider = CompletableFuture.supplyAsync(VanillaRegistries::createLookup, Util.backgroundExecutor()); dataGeneratorConfig = new GatherDataEvent.DataGeneratorConfig(mods, path, inputs, lookupProvider, devToolGenerators, reportsGenerator, structureValidator, flat, vanillaGenerator, assetIndex, assetsDir, existingPacks); setup.run(); - ModLoader.runEventGenerator(mc -> eventGenerator.create(mc, dataGeneratorConfig.makeGenerator(p -> dataGeneratorConfig.isFlat() ? p : p.resolve(mc.getModId()), - dataGeneratorConfig.getMods().contains(mc.getModId())), dataGeneratorConfig)); + + // Only fire the event for mods that have their generators enabled + for (ModContainer mod : ModList.get().getSortedMods()) { + if (dataGeneratorConfig.getMods().contains(mod.getModId())) { + var generator = dataGeneratorConfig.makeGenerator(p -> dataGeneratorConfig.isFlat() ? p : p.resolve(mod.getModId())); + var event = eventGenerator.create(mod, generator, dataGeneratorConfig); + mod.acceptEvent(event); + } + } + dataGeneratorConfig.runAll(); } }