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.Commands.CommandSelection; 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; import net.minecraft.data.PackOutput.Target; public class CommandsReport implements DataProvider { private final PackOutput output; private final CompletableFuture registries; public CommandsReport(PackOutput output, CompletableFuture registries) { this.output = output; this.registries = registries; } @Override public CompletableFuture run(CachedOutput output) { Path path = this.output.getOutputFolder(Target.REPORTS).resolve("commands.json"); return this.registries.thenCompose(provider -> { CommandDispatcher commandDispatcher = new Commands(CommandSelection.ALL, Commands.createValidationContext(provider)).getDispatcher(); return DataProvider.saveStable(output, ArgumentUtils.serializeNodeToJson(commandDispatcher, commandDispatcher.getRoot()), path); }); } @Override public final String getName() { return "Command Syntax"; } }