package net.minecraft.server.packs; import com.google.gson.JsonObject; import com.mojang.logging.LogUtils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import net.minecraft.server.packs.metadata.MetadataSectionSerializer; import net.minecraft.server.packs.resources.IoSupplier; import net.minecraft.util.GsonHelper; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; public abstract class AbstractPackResources implements PackResources { private static final Logger LOGGER = LogUtils.getLogger(); private final PackLocationInfo location; protected AbstractPackResources(PackLocationInfo location) { this.location = location; } @Nullable @Override public T getMetadataSection(MetadataSectionSerializer deserializer) throws IOException { IoSupplier ioSupplier = this.getRootResource(new String[]{"pack.mcmeta"}); if (ioSupplier == null) { return null; } else { InputStream inputStream = ioSupplier.get(); Object var4; try { var4 = getMetadataFromStream(deserializer, inputStream); } catch (Throwable var7) { if (inputStream != null) { try { inputStream.close(); } catch (Throwable var6) { var7.addSuppressed(var6); } } throw var7; } if (inputStream != null) { inputStream.close(); } return (T)var4; } } @Nullable public static T getMetadataFromStream(MetadataSectionSerializer deserializer, InputStream inputStream) { JsonObject jsonObject; try { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); try { jsonObject = GsonHelper.parse(bufferedReader); } catch (Throwable var8) { try { bufferedReader.close(); } catch (Throwable var6) { var8.addSuppressed(var6); } throw var8; } bufferedReader.close(); } catch (Exception var9) { LOGGER.error("Couldn't load {} metadata", deserializer.getMetadataSectionName(), var9); return null; } if (!jsonObject.has(deserializer.getMetadataSectionName())) { return null; } else { try { return deserializer.fromJson(GsonHelper.getAsJsonObject(jsonObject, deserializer.getMetadataSectionName())); } catch (Exception var7) { LOGGER.error("Couldn't load {} metadata", deserializer.getMetadataSectionName(), var7); return null; } } } @Override public PackLocationInfo location() { return this.location; } }