94 lines
2.4 KiB
Java
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;
|
|
}
|
|
}
|