soiz1's picture
Upload folder using huggingface_hub
d46f4a3 verified
package net.minecraft.data;
import com.google.common.hash.Hashing;
import com.google.common.hash.HashingOutputStream;
import com.google.gson.JsonElement;
import com.google.gson.stream.JsonWriter;
import com.mojang.logging.LogUtils;
import com.mojang.serialization.Codec;
import com.mojang.serialization.DynamicOps;
import com.mojang.serialization.JsonOps;
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.util.Comparator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.CompletableFuture;
import java.util.function.Function;
import java.util.function.ToIntFunction;
import net.minecraft.Util;
import net.minecraft.core.HolderLookup;
import net.minecraft.resources.RegistryOps;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.GsonHelper;
import org.slf4j.Logger;
public interface DataProvider {
ToIntFunction<String> FIXED_ORDER_FIELDS = Util.make(new Object2IntOpenHashMap<>(), p_236070_ -> {
p_236070_.put("type", 0);
p_236070_.put("parent", 1);
p_236070_.defaultReturnValue(2);
});
Comparator<String> KEY_COMPARATOR = Comparator.comparingInt(FIXED_ORDER_FIELDS).thenComparing(p_236077_ -> (String)p_236077_);
Logger LOGGER = LogUtils.getLogger();
CompletableFuture<?> run(CachedOutput p_236071_);
String getName();
static <T> CompletableFuture<?> saveAll(CachedOutput p_369703_, Codec<T> p_369384_, PackOutput.PathProvider p_366772_, Map<ResourceLocation, T> p_364004_) {
return saveAll(p_369703_, p_369384_, p_366772_::json, p_364004_);
}
static <T, E> CompletableFuture<?> saveAll(CachedOutput p_378522_, Codec<E> p_375923_, Function<T, Path> p_378335_, Map<T, E> p_378562_) {
return saveAll(p_378522_, p_374749_ -> p_375923_.encodeStart(JsonOps.INSTANCE, (E)p_374749_).getOrThrow(), p_378335_, p_378562_);
}
static <T, E> CompletableFuture<?> saveAll(CachedOutput p_376020_, Function<E, JsonElement> p_377735_, Function<T, Path> p_375746_, Map<T, E> p_378110_) {
return CompletableFuture.allOf(p_378110_.entrySet().stream().map(p_374753_ -> {
Path path = p_375746_.apply(p_374753_.getKey());
JsonElement jsonelement = p_377735_.apply(p_374753_.getValue());
return saveStable(p_376020_, jsonelement, path);
}).toArray(CompletableFuture[]::new));
}
static <T> CompletableFuture<?> saveStable(CachedOutput p_300299_, HolderLookup.Provider p_330662_, Codec<T> p_297797_, T p_300766_, Path p_299101_) {
RegistryOps<JsonElement> registryops = p_330662_.createSerializationContext(JsonOps.INSTANCE);
return saveStable(p_300299_, registryops, p_297797_, p_300766_, p_299101_);
}
static <T> CompletableFuture<?> saveStable(CachedOutput p_364924_, Codec<T> p_367616_, T p_369344_, Path p_369481_) {
return saveStable(p_364924_, JsonOps.INSTANCE, p_367616_, p_369344_, p_369481_);
}
private static <T> CompletableFuture<?> saveStable(
CachedOutput p_366662_, DynamicOps<JsonElement> p_369056_, Codec<T> p_365700_, T p_360791_, Path p_368062_
) {
JsonElement jsonelement = p_365700_.encodeStart(p_369056_, p_360791_).getOrThrow();
return saveStable(p_366662_, jsonelement, p_368062_);
}
static CompletableFuture<?> saveStable(CachedOutput p_253653_, JsonElement p_254542_, Path p_254467_) {
return CompletableFuture.runAsync(() -> {
try {
ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream();
HashingOutputStream hashingoutputstream = new HashingOutputStream(Hashing.sha1(), bytearrayoutputstream);
try (JsonWriter jsonwriter = new JsonWriter(new OutputStreamWriter(hashingoutputstream, StandardCharsets.UTF_8))) {
jsonwriter.setSerializeNulls(false);
jsonwriter.setIndent(" ");
GsonHelper.writeValue(jsonwriter, p_254542_, KEY_COMPARATOR);
}
p_253653_.writeIfNeeded(p_254467_, bytearrayoutputstream.toByteArray(), hashingoutputstream.hash());
} catch (IOException ioexception) {
LOGGER.error("Failed to save file to {}", p_254467_, ioexception);
}
}, Util.backgroundExecutor().forName("saveStable"));
}
@FunctionalInterface
public interface Factory<T extends DataProvider> {
T create(PackOutput p_253851_);
}
}