Search in sources :

Example 1 with EntrypointContainer

use of net.fabricmc.loader.api.entrypoint.EntrypointContainer in project frame-fabric by moddingplayground.

the class DataMain method main.

public static void main(String[] strings) throws IOException {
    OptionParser opts = new OptionParser();
    OptionSpec<Void> help = opts.accepts("help", "Show the help menu").forHelp();
    OptionSpec<Void> server = opts.accepts("server", "Include server generators");
    OptionSpec<Void> client = opts.accepts("client", "Include client generators");
    OptionSpec<Void> dev = opts.accepts("dev", "Include development tools");
    OptionSpec<Void> reports = opts.accepts("reports", "Include data reports");
    OptionSpec<Void> validate = opts.accepts("validate", "Validate inputs");
    OptionSpec<Void> all = opts.accepts("all", "Include all generators");
    OptionSpec<String> output = opts.accepts("output", "Output folder").withRequiredArg().defaultsTo("generated");
    OptionSpec<String> extra = opts.accepts("extra", "Additional output folder to copy assets to").withRequiredArg();
    OptionSpec<String> input = opts.accepts("input", "Input folder").withRequiredArg();
    OptionSet optionSet = opts.parse(strings);
    if (!optionSet.has(help) && optionSet.hasOptions()) {
        Path path = Paths.get(output.value(optionSet));
        boolean genAll = optionSet.has(all);
        boolean genClient = genAll || optionSet.has(client);
        boolean genServer = genAll || optionSet.has(server);
        boolean genDev = genAll || optionSet.has(dev);
        boolean genReports = genAll || optionSet.has(reports);
        boolean genValidate = genAll || optionSet.has(validate);
        FabricLoader loader = FabricLoader.getInstance();
        List<EntrypointContainer<ToymakerEntrypoint>> initializers = loader.getEntrypointContainers("toymaker", ToymakerEntrypoint.class);
        if (initializers.isEmpty()) {
            LOGGER.error("No data generators were initialized!");
        } else {
            for (EntrypointContainer<ToymakerEntrypoint> initializer : initializers) {
                ModMetadata meta = initializer.getProvider().getMetadata();
                if (TARGET_MOD_ID != null && !meta.getId().equals(TARGET_MOD_ID))
                    continue;
                LOGGER.info("Initializing data generator for " + meta.getId());
                initializer.getEntrypoint().onInitializeToymaker();
            }
        }
        DataGenerator gen = create(path, optionSet.valuesOf(input).stream().map(Paths::get).collect(Collectors.toList()), genClient, genServer, genDev, genReports, genValidate);
        DataGenAccess access = (DataGenAccess) gen;
        access.run(config -> optionSet.valuesOf(extra).stream().map(Paths::get).forEach(config::addCopyPath));
    } else {
        opts.printHelpOn(System.out);
    }
}
Also used : Path(java.nio.file.Path) FabricLoader(net.fabricmc.loader.api.FabricLoader) OptionParser(joptsimple.OptionParser) EntrypointContainer(net.fabricmc.loader.api.entrypoint.EntrypointContainer) ModMetadata(net.fabricmc.loader.api.metadata.ModMetadata) DataGenerator(net.minecraft.data.DataGenerator) Paths(java.nio.file.Paths) OptionSet(joptsimple.OptionSet) ToymakerEntrypoint(net.moddingplayground.frame.api.toymaker.v0.ToymakerEntrypoint)

Example 2 with EntrypointContainer

use of net.fabricmc.loader.api.entrypoint.EntrypointContainer in project BetterLoadingScreen by shedaniel.

the class MixinMinecraft method invoke.

@Unique
private static <T> Supplier<RuntimeException> invoke(String name, Class<T> type, StatusIdentifier<SteppedTask> taskId, IntConsumer total, BiConsumer<ModContainer, ? super T> invoker) {
    ParentTask initMods = LoadGameSteps.initMods();
    Collection<EntrypointContainer<T>> entrypoints = FabricLoader.getInstance().getEntrypointContainers(name, type);
    Multimap<String, EntrypointContainer<T>> map = LinkedHashMultimap.create();
    SteppedTask task = initMods.stepped(taskId);
    for (EntrypointContainer<T> container : entrypoints) {
        ModMetadata metadata = container.getProvider().getMetadata();
        map.put(metadata.getId(), container);
    }
    total.accept(map.keySet().size());
    return () -> {
        RuntimeException exception = null;
        for (Map.Entry<String, Collection<EntrypointContainer<T>>> entry : map.asMap().entrySet()) {
            task.setCurrentStepInfo(Iterables.getFirst(entry.getValue(), null).getProvider().getMetadata().getName());
            for (EntrypointContainer<T> container : entry.getValue()) {
                try {
                    invoker.accept(container.getProvider(), container.getEntrypoint());
                } catch (Throwable t) {
                    exception = ExceptionUtil.gatherExceptions(t, exception, exc -> new RuntimeException(String.format("Could not execute entrypoint stage '%s' due to errors, provided by '%s'!", name, container.getProvider().getMetadata().getId()), exc));
                }
            }
            task.incrementStep();
        }
        return exception;
    };
}
Also used : FabricLoader(net.fabricmc.loader.api.FabricLoader) Iterables(com.google.common.collect.Iterables) EntrypointContainer(net.fabricmc.loader.api.entrypoint.EntrypointContainer) Unique(org.spongepowered.asm.mixin.Unique) IntConsumer(java.util.function.IntConsumer) Multimap(com.google.common.collect.Multimap) Supplier(java.util.function.Supplier) Minecraft(net.minecraft.client.Minecraft) Mixin(org.spongepowered.asm.mixin.Mixin) Map(java.util.Map) BiConsumer(java.util.function.BiConsumer) ModContainer(net.fabricmc.loader.api.ModContainer) LinkedHashMultimap(com.google.common.collect.LinkedHashMultimap) LoadGameSteps(me.shedaniel.betterloadingscreen.api.step.LoadGameSteps) ExceptionUtil(net.fabricmc.loader.impl.util.ExceptionUtil) At(org.spongepowered.asm.mixin.injection.At) ClientModInitializer(net.fabricmc.api.ClientModInitializer) Redirect(org.spongepowered.asm.mixin.injection.Redirect) Collection(java.util.Collection) ModInitializer(net.fabricmc.api.ModInitializer) File(java.io.File) ParentTask(me.shedaniel.betterloadingscreen.api.step.ParentTask) ModMetadata(net.fabricmc.loader.api.metadata.ModMetadata) FabricLoaderImpl(net.fabricmc.loader.impl.FabricLoaderImpl) StatusIdentifier(me.shedaniel.betterloadingscreen.api.StatusIdentifier) Shadow(org.spongepowered.asm.mixin.Shadow) SteppedTask(me.shedaniel.betterloadingscreen.api.step.SteppedTask) SteppedTask(me.shedaniel.betterloadingscreen.api.step.SteppedTask) EntrypointContainer(net.fabricmc.loader.api.entrypoint.EntrypointContainer) ParentTask(me.shedaniel.betterloadingscreen.api.step.ParentTask) ModMetadata(net.fabricmc.loader.api.metadata.ModMetadata) Unique(org.spongepowered.asm.mixin.Unique)

Aggregations

FabricLoader (net.fabricmc.loader.api.FabricLoader)2 EntrypointContainer (net.fabricmc.loader.api.entrypoint.EntrypointContainer)2 ModMetadata (net.fabricmc.loader.api.metadata.ModMetadata)2 Iterables (com.google.common.collect.Iterables)1 LinkedHashMultimap (com.google.common.collect.LinkedHashMultimap)1 Multimap (com.google.common.collect.Multimap)1 File (java.io.File)1 Path (java.nio.file.Path)1 Paths (java.nio.file.Paths)1 Collection (java.util.Collection)1 Map (java.util.Map)1 BiConsumer (java.util.function.BiConsumer)1 IntConsumer (java.util.function.IntConsumer)1 Supplier (java.util.function.Supplier)1 OptionParser (joptsimple.OptionParser)1 OptionSet (joptsimple.OptionSet)1 StatusIdentifier (me.shedaniel.betterloadingscreen.api.StatusIdentifier)1 LoadGameSteps (me.shedaniel.betterloadingscreen.api.step.LoadGameSteps)1 ParentTask (me.shedaniel.betterloadingscreen.api.step.ParentTask)1 SteppedTask (me.shedaniel.betterloadingscreen.api.step.SteppedTask)1