minecraft-src/net/minecraft/server/packs/AbstractPackResources.java
2025-07-04 01:41:11 +03:00

96 lines
2.5 KiB
Java

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> T getMetadataSection(MetadataSectionSerializer<T> deserializer) throws IOException {
IoSupplier<InputStream> 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> T getMetadataFromStream(MetadataSectionSerializer<T> 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;
}
}