/* * Decompiled with CFR 0.152. * * Could not load the following classes: * com.google.common.hash.Hashing * com.google.common.hash.HashingOutputStream * com.google.gson.JsonElement * com.google.gson.stream.JsonWriter * com.mojang.logging.LogUtils * com.mojang.serialization.Codec * com.mojang.serialization.DynamicOps * com.mojang.serialization.JsonOps * it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap * org.slf4j.Logger */ 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.OutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.util.Comparator; import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.function.Function; import java.util.function.ToIntFunction; import net.minecraft.core.HolderLookup; import net.minecraft.data.CachedOutput; import net.minecraft.data.PackOutput; import net.minecraft.resources.Identifier; import net.minecraft.resources.RegistryOps; import net.minecraft.util.GsonHelper; import net.minecraft.util.Util; import org.slf4j.Logger; public interface DataProvider { public static final ToIntFunction FIXED_ORDER_FIELDS = (ToIntFunction)Util.make(new Object2IntOpenHashMap(), m -> { m.put((Object)"type", 0); m.put((Object)"parent", 1); m.defaultReturnValue(2); }); public static final Comparator KEY_COMPARATOR = Comparator.comparingInt(FIXED_ORDER_FIELDS).thenComparing(e -> e); public static final Logger LOGGER = LogUtils.getLogger(); public CompletableFuture run(CachedOutput var1); public String getName(); public static CompletableFuture saveAll(CachedOutput cache, Codec codec, PackOutput.PathProvider pathProvider, Map entries) { return DataProvider.saveAll(cache, codec, pathProvider::json, entries); } public static CompletableFuture saveAll(CachedOutput cache, Codec codec, Function pathGetter, Map contents) { return DataProvider.saveAll(cache, (E e) -> (JsonElement)codec.encodeStart((DynamicOps)JsonOps.INSTANCE, e).getOrThrow(), pathGetter, contents); } public static CompletableFuture saveAll(CachedOutput cache, Function serializer, Function pathGetter, Map contents) { return CompletableFuture.allOf((CompletableFuture[])contents.entrySet().stream().map(entry -> { Path path = (Path)pathGetter.apply(entry.getKey()); JsonElement json = (JsonElement)serializer.apply(entry.getValue()); return DataProvider.saveStable(cache, json, path); }).toArray(CompletableFuture[]::new)); } public static CompletableFuture saveStable(CachedOutput cache, HolderLookup.Provider registries, Codec codec, T value, Path path) { RegistryOps ops = registries.createSerializationContext(JsonOps.INSTANCE); return DataProvider.saveStable(cache, ops, codec, value, path); } public static CompletableFuture saveStable(CachedOutput cache, Codec codec, T value, Path path) { return DataProvider.saveStable(cache, (DynamicOps)JsonOps.INSTANCE, codec, value, path); } private static CompletableFuture saveStable(CachedOutput cache, DynamicOps ops, Codec codec, T value, Path path) { JsonElement json = (JsonElement)codec.encodeStart(ops, value).getOrThrow(); return DataProvider.saveStable(cache, json, path); } public static CompletableFuture saveStable(CachedOutput cache, JsonElement root, Path path) { return CompletableFuture.runAsync(() -> { try { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); HashingOutputStream hashedBytes = new HashingOutputStream(Hashing.sha1(), (OutputStream)bytes); try (JsonWriter jsonWriter = new JsonWriter((Writer)new OutputStreamWriter((OutputStream)hashedBytes, StandardCharsets.UTF_8));){ jsonWriter.setSerializeNulls(false); jsonWriter.setIndent(" "); GsonHelper.writeValue(jsonWriter, root, KEY_COMPARATOR); } cache.writeIfNeeded(path, bytes.toByteArray(), hashedBytes.hash()); } catch (IOException e) { LOGGER.error("Failed to save file to {}", (Object)path, (Object)e); } }, Util.backgroundExecutor().forName("saveStable")); } @FunctionalInterface public static interface Factory { public T create(PackOutput var1); } }