package net.minecraft.data.info; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.mojang.serialization.JsonOps; import java.nio.file.Path; import java.util.concurrent.CompletableFuture; import net.minecraft.core.HolderLookup.Provider; import net.minecraft.core.component.DataComponentMap; import net.minecraft.core.registries.Registries; import net.minecraft.data.CachedOutput; import net.minecraft.data.DataProvider; import net.minecraft.data.PackOutput; import net.minecraft.resources.RegistryOps; import net.minecraft.world.item.Item; public class ItemListReport implements DataProvider { private final PackOutput output; private final CompletableFuture registries; public ItemListReport(PackOutput output, CompletableFuture registries) { this.output = output; this.registries = registries; } @Override public CompletableFuture run(CachedOutput output) { Path path = this.output.getOutputFolder(PackOutput.Target.REPORTS).resolve("items.json"); return this.registries .thenCompose( provider -> { JsonObject jsonObject = new JsonObject(); RegistryOps registryOps = provider.createSerializationContext(JsonOps.INSTANCE); provider.lookupOrThrow(Registries.ITEM) .listElements() .forEach( reference -> { JsonObject jsonObject2 = new JsonObject(); jsonObject2.add( "components", DataComponentMap.CODEC .encodeStart(registryOps, ((Item)reference.value()).components()) .getOrThrow(string -> new IllegalStateException("Failed to encode components: " + string)) ); jsonObject.add(reference.getRegisteredName(), jsonObject2); } ); return DataProvider.saveStable(output, jsonObject, path); } ); } @Override public final String getName() { return "Item List"; } }