Add DataGeneratorEntrypoint.getEffectiveModId ()

This commit is contained in:
modmuss50 2022-09-25 14:45:43 +01:00
parent 9a4cf49a49
commit dd4fd39044
3 changed files with 27 additions and 3 deletions
fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric

View file

@ -16,6 +16,8 @@
package net.fabricmc.fabric.api.datagen.v1;
import org.jetbrains.annotations.Nullable;
/**
* An entry point for data generation.
*
@ -31,4 +33,16 @@ public interface DataGeneratorEntrypoint {
* @param fabricDataGenerator The {@link FabricDataGenerator} instance
*/
void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator);
/**
* Returns the mod ID of the mod the data is being generated for.
* A {@code null} return will run the data generator using the mod ID that registered the current entrypoint.
*
* @return a {@link String} or {@code null}
* @throws RuntimeException If the mod ID does not exist.
*/
@Nullable
default String getEffectiveModId() {
return null;
}
}

View file

@ -18,6 +18,7 @@ package net.fabricmc.fabric.api.datagen.v1;
import java.nio.file.Path;
import java.util.Collections;
import java.util.Objects;
import java.util.function.Function;
import org.jetbrains.annotations.ApiStatus;
@ -37,7 +38,7 @@ public final class FabricDataGenerator extends DataGenerator {
@ApiStatus.Internal
public FabricDataGenerator(Path output, ModContainer mod, boolean strictValidation) {
super(output, Collections.emptyList());
this.modContainer = mod;
this.modContainer = Objects.requireNonNull(mod);
this.strictValidation = strictValidation;
}

View file

@ -42,6 +42,7 @@ import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider.DynamicRegistryTagProvider;
import net.fabricmc.fabric.api.resource.conditions.v1.ConditionJsonProvider;
import net.fabricmc.loader.api.FabricLoader;
import net.fabricmc.loader.api.ModContainer;
import net.fabricmc.loader.api.entrypoint.EntrypointContainer;
@ApiStatus.Internal
@ -126,8 +127,16 @@ public final class FabricDataGenHelper {
LOGGER.info("Running data generator for {}", id);
try {
FabricDataGenerator dataGenerator = new FabricDataGenerator(outputDir, entrypointContainer.getProvider(), STRICT_VALIDATION);
entrypointContainer.getEntrypoint().onInitializeDataGenerator(dataGenerator);
final DataGeneratorEntrypoint entrypoint = entrypointContainer.getEntrypoint();
final String effectiveModId = entrypoint.getEffectiveModId();
ModContainer modContainer = entrypointContainer.getProvider();
if (effectiveModId != null) {
modContainer = FabricLoader.getInstance().getModContainer(effectiveModId).orElseThrow(() -> new RuntimeException("Failed to find effective mod container for mod id (%s)".formatted(effectiveModId)));
}
FabricDataGenerator dataGenerator = new FabricDataGenerator(outputDir, modContainer, STRICT_VALIDATION);
entrypoint.onInitializeDataGenerator(dataGenerator);
dataGenerator.run();
} catch (Throwable t) {
throw new RuntimeException("Failed to run data generator from mod (%s)".formatted(id), t);