package net.minecraft.data.info; import com.mojang.brigadier.CommandDispatcher; import java.nio.file.Path; import java.util.concurrent.CompletableFuture; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.Commands; import net.minecraft.commands.synchronization.ArgumentUtils; import net.minecraft.core.HolderLookup; import net.minecraft.data.CachedOutput; import net.minecraft.data.DataProvider; import net.minecraft.data.PackOutput; /** * Access widened by fabric-data-generation-api-v1 to extendable */ public class CommandsReport implements DataProvider { private final PackOutput output; private final CompletableFuture registries; public CommandsReport(final PackOutput output, final CompletableFuture registries) { this.output = output; this.registries = registries; } @Override public CompletableFuture run(final CachedOutput cache) { Path path = this.output.getOutputFolder(PackOutput.Target.REPORTS).resolve("commands.json"); return this.registries.thenCompose(provider -> { CommandDispatcher dispatcher = new Commands(Commands.CommandSelection.ALL, Commands.createValidationContext(provider)).getDispatcher(); return DataProvider.saveStable(cache, ArgumentUtils.serializeNodeToJson(dispatcher, dispatcher.getRoot()), path); }); } /** * Access widened by fabric-data-generation-api-v1 to extendable */ @Override public String getName() { return "Command Syntax"; } }