Spaces:
Build error
Build error
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")); | |
} | |
public interface Factory<T extends DataProvider> { | |
T create(PackOutput p_253851_); | |
} | |
} |