mirror of
https://github.com/FabricMC/fabric.git
synced 2025-03-23 21:40:02 -04:00
Add DataGeneratorEntrypoint.getEffectiveModId (#2534)
This commit is contained in:
parent
9a4cf49a49
commit
dd4fd39044
3 changed files with 27 additions and 3 deletions
fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric
api/datagen/v1
impl/datagen
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue