package net.minecraft.data.metadata; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.mojang.serialization.JsonOps; import java.util.HashMap; import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.function.Supplier; import net.minecraft.DetectedVersion; import net.minecraft.data.CachedOutput; import net.minecraft.data.DataProvider; import net.minecraft.data.PackOutput; import net.minecraft.network.chat.Component; import net.minecraft.server.packs.FeatureFlagsMetadataSection; import net.minecraft.server.packs.PackType; import net.minecraft.server.packs.metadata.MetadataSectionType; import net.minecraft.server.packs.metadata.pack.PackMetadataSection; import net.minecraft.world.flag.FeatureFlagSet; /** * Access widened by fabric-data-generation-api-v1 to extendable */ public class PackMetadataGenerator implements DataProvider { private final PackOutput output; private final Map> elements = new HashMap(); public PackMetadataGenerator(final PackOutput output) { this.output = output; } public PackMetadataGenerator add(final MetadataSectionType type, final T value) { this.elements.put(type.name(), (Supplier)() -> type.codec().encodeStart(JsonOps.INSTANCE, value).getOrThrow(IllegalArgumentException::new).getAsJsonObject()); return this; } @Override public CompletableFuture run(final CachedOutput cache) { JsonObject result = new JsonObject(); this.elements.forEach((id, data) -> result.add(id, (JsonElement)data.get())); return DataProvider.saveStable(cache, result, this.output.getOutputFolder().resolve("pack.mcmeta")); } /** * Access widened by fabric-data-generation-api-v1 to extendable */ @Override public String getName() { return "Pack Metadata"; } public static PackMetadataGenerator forFeaturePack(final PackOutput output, final Component description) { return new PackMetadataGenerator(output) .add(PackMetadataSection.SERVER_TYPE, new PackMetadataSection(description, DetectedVersion.BUILT_IN.packVersion(PackType.SERVER_DATA).minorRange())); } public static PackMetadataGenerator forFeaturePack(final PackOutput output, final Component description, final FeatureFlagSet flags) { return forFeaturePack(output, description).add(FeatureFlagsMetadataSection.TYPE, new FeatureFlagsMetadataSection(flags)); } }