package net.minecraft.server.packs.resources; import com.google.common.collect.ImmutableMap; import com.google.gson.JsonObject; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.Collection; import java.util.Optional; import net.minecraft.server.packs.metadata.MetadataSectionSerializer; import net.minecraft.util.GsonHelper; public interface ResourceMetadata { ResourceMetadata EMPTY = new ResourceMetadata() { @Override public Optional getSection(MetadataSectionSerializer serializer) { return Optional.empty(); } }; IoSupplier EMPTY_SUPPLIER = () -> EMPTY; static ResourceMetadata fromJsonStream(InputStream stream) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8)); ResourceMetadata var3; try { final JsonObject jsonObject = GsonHelper.parse(bufferedReader); var3 = new ResourceMetadata() { @Override public Optional getSection(MetadataSectionSerializer serializer) { String string = serializer.getMetadataSectionName(); return jsonObject.has(string) ? Optional.of(serializer.fromJson(GsonHelper.getAsJsonObject(jsonObject, string))) : Optional.empty(); } }; } catch (Throwable var5) { try { bufferedReader.close(); } catch (Throwable var4) { var5.addSuppressed(var4); } throw var5; } bufferedReader.close(); return var3; } Optional getSection(MetadataSectionSerializer serializer); default ResourceMetadata copySections(Collection> serializers) { ResourceMetadata.Builder builder = new ResourceMetadata.Builder(); for (MetadataSectionSerializer metadataSectionSerializer : serializers) { this.copySection(builder, metadataSectionSerializer); } return builder.build(); } private void copySection(ResourceMetadata.Builder builder, MetadataSectionSerializer serializer) { this.getSection(serializer).ifPresent(object -> builder.put(serializer, (T)object)); } public static class Builder { private final ImmutableMap.Builder, Object> map = ImmutableMap.builder(); public ResourceMetadata.Builder put(MetadataSectionSerializer key, T value) { this.map.put(key, value); return this; } public ResourceMetadata build() { final ImmutableMap, Object> immutableMap = this.map.build(); return immutableMap.isEmpty() ? ResourceMetadata.EMPTY : new ResourceMetadata() { @Override public Optional getSection(MetadataSectionSerializer serializer) { return Optional.ofNullable(immutableMap.get(serializer)); } }; } } }