minecraft-src/net/minecraft/server/packs/AbstractPackResources.java
2025-07-04 03:15:13 +03:00

94 lines
2.4 KiB
Java

package net.minecraft.server.packs;
import com.google.gson.JsonObject;
import com.mojang.logging.LogUtils;
import com.mojang.serialization.JsonOps;
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.MetadataSectionType;
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(MetadataSectionType<T> type) 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(type, 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(MetadataSectionType<T> type, InputStream stream) {
JsonObject jsonObject;
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8));
try {
jsonObject = GsonHelper.parse(bufferedReader);
} catch (Throwable var7) {
try {
bufferedReader.close();
} catch (Throwable var6) {
var7.addSuppressed(var6);
}
throw var7;
}
bufferedReader.close();
} catch (Exception var8) {
LOGGER.error("Couldn't load {} metadata", type.name(), var8);
return null;
}
return (T)(!jsonObject.has(type.name())
? null
: type.codec()
.parse(JsonOps.INSTANCE, jsonObject.get(type.name()))
.ifError(error -> LOGGER.error("Couldn't load {} metadata: {}", type.name(), error))
.result()
.orElse(null));
}
@Override
public PackLocationInfo location() {
return this.location;
}
}