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

88 lines
2.7 KiB
Java

package net.minecraft.server.packs.resources;
import com.google.common.collect.ImmutableMap;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
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 java.util.Collection;
import java.util.Optional;
import net.minecraft.server.packs.metadata.MetadataSectionType;
import net.minecraft.server.packs.resources.ResourceMetadata.Builder.1;
import net.minecraft.util.GsonHelper;
public interface ResourceMetadata {
ResourceMetadata EMPTY = new ResourceMetadata() {
@Override
public <T> Optional<T> getSection(MetadataSectionType<T> type) {
return Optional.empty();
}
};
IoSupplier<ResourceMetadata> 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 <T> Optional<T> getSection(MetadataSectionType<T> type) {
String string = type.name();
if (jsonObject.has(string)) {
T object = type.codec().parse(JsonOps.INSTANCE, jsonObject.get(string)).getOrThrow(JsonParseException::new);
return Optional.of(object);
} else {
return Optional.empty();
}
}
};
} catch (Throwable var5) {
try {
bufferedReader.close();
} catch (Throwable var4) {
var5.addSuppressed(var4);
}
throw var5;
}
bufferedReader.close();
return var3;
}
<T> Optional<T> getSection(MetadataSectionType<T> type);
default ResourceMetadata copySections(Collection<MetadataSectionType<?>> serializers) {
ResourceMetadata.Builder builder = new ResourceMetadata.Builder();
for (MetadataSectionType<?> metadataSectionType : serializers) {
this.copySection(builder, metadataSectionType);
}
return builder.build();
}
private <T> void copySection(ResourceMetadata.Builder builder, MetadataSectionType<T> type) {
this.getSection(type).ifPresent(object -> builder.put(type, (T)object));
}
public static class Builder {
private final ImmutableMap.Builder<MetadataSectionType<?>, Object> map = ImmutableMap.builder();
public <T> ResourceMetadata.Builder put(MetadataSectionType<T> type, T value) {
this.map.put(type, value);
return this;
}
public ResourceMetadata build() {
ImmutableMap<MetadataSectionType<?>, Object> immutableMap = this.map.build();
return (ResourceMetadata)(immutableMap.isEmpty() ? ResourceMetadata.EMPTY : new 1(this, immutableMap));
}
}
}