package net.minecraft.data; import java.nio.file.Path; import net.minecraft.core.Registry; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; public class PackOutput { private final Path outputFolder; public PackOutput(Path outputFolder) { this.outputFolder = outputFolder; } public Path getOutputFolder() { return this.outputFolder; } public Path getOutputFolder(PackOutput.Target target) { return this.getOutputFolder().resolve(target.directory); } public PackOutput.PathProvider createPathProvider(PackOutput.Target target, String kind) { return new PackOutput.PathProvider(this, target, kind); } public PackOutput.PathProvider createRegistryElementsPathProvider(ResourceKey> registryKey) { return this.createPathProvider(PackOutput.Target.DATA_PACK, Registries.elementsDirPath(registryKey)); } public PackOutput.PathProvider createRegistryTagsPathProvider(ResourceKey> registryKey) { return this.createPathProvider(PackOutput.Target.DATA_PACK, Registries.tagsDirPath(registryKey)); } public static class PathProvider { private final Path root; private final String kind; PathProvider(PackOutput output, PackOutput.Target target, String kind) { this.root = output.getOutputFolder(target); this.kind = kind; } public Path file(ResourceLocation location, String extension) { return this.root.resolve(location.getNamespace()).resolve(this.kind).resolve(location.getPath() + "." + extension); } public Path json(ResourceLocation location) { return this.root.resolve(location.getNamespace()).resolve(this.kind).resolve(location.getPath() + ".json"); } public Path json(ResourceKey key) { return this.root.resolve(key.location().getNamespace()).resolve(this.kind).resolve(key.location().getPath() + ".json"); } } public static enum Target { DATA_PACK("data"), RESOURCE_PACK("assets"), REPORTS("reports"); final String directory; private Target(final String directory) { this.directory = directory; } } }