minecraft-src/net/minecraft/data/info/BiomeParametersDumpReport.java
2025-07-04 03:15:13 +03:00

66 lines
2.9 KiB
Java

package net.minecraft.data.info;
import com.google.gson.JsonElement;
import com.mojang.logging.LogUtils;
import com.mojang.serialization.Codec;
import com.mojang.serialization.DynamicOps;
import com.mojang.serialization.Encoder;
import com.mojang.serialization.JsonOps;
import com.mojang.serialization.MapCodec;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import net.minecraft.core.HolderLookup.Provider;
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.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.biome.MultiNoiseBiomeSourceParameterList;
import net.minecraft.world.level.biome.Climate.ParameterList;
import org.slf4j.Logger;
public class BiomeParametersDumpReport implements DataProvider {
private static final Logger LOGGER = LogUtils.getLogger();
private final Path topPath;
private final CompletableFuture<Provider> registries;
private static final MapCodec<ResourceKey<Biome>> ENTRY_CODEC = ResourceKey.codec(Registries.BIOME).fieldOf("biome");
private static final Codec<ParameterList<ResourceKey<Biome>>> CODEC = ParameterList.codec(ENTRY_CODEC).fieldOf("biomes").codec();
public BiomeParametersDumpReport(PackOutput output, CompletableFuture<Provider> registries) {
this.topPath = output.getOutputFolder(PackOutput.Target.REPORTS).resolve("biome_parameters");
this.registries = registries;
}
@Override
public CompletableFuture<?> run(CachedOutput output) {
return this.registries
.thenCompose(
provider -> {
DynamicOps<JsonElement> dynamicOps = provider.createSerializationContext(JsonOps.INSTANCE);
List<CompletableFuture<?>> list = new ArrayList();
MultiNoiseBiomeSourceParameterList.knownPresets()
.forEach((preset, parameterList) -> list.add(dumpValue(this.createPath(preset.id()), output, dynamicOps, CODEC, parameterList)));
return CompletableFuture.allOf((CompletableFuture[])list.toArray(CompletableFuture[]::new));
}
);
}
private static <E> CompletableFuture<?> dumpValue(Path path, CachedOutput output, DynamicOps<JsonElement> ops, Encoder<E> encoder, E value) {
Optional<JsonElement> optional = encoder.encodeStart(ops, value).resultOrPartial(string -> LOGGER.error("Couldn't serialize element {}: {}", path, string));
return optional.isPresent() ? DataProvider.saveStable(output, (JsonElement)optional.get(), path) : CompletableFuture.completedFuture(null);
}
private Path createPath(ResourceLocation location) {
return this.topPath.resolve(location.getNamespace()).resolve(location.getPath() + ".json");
}
@Override
public final String getName() {
return "Biome Parameters";
}
}