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

85 lines
2.8 KiB
Java

package net.minecraft.server.packs.resources;
import com.google.common.collect.ImmutableMap;
import com.google.gson.JsonObject;
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.MetadataSectionSerializer;
import net.minecraft.util.GsonHelper;
public interface ResourceMetadata {
ResourceMetadata EMPTY = new ResourceMetadata() {
@Override
public <T> Optional<T> getSection(MetadataSectionSerializer<T> serializer) {
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(MetadataSectionSerializer<T> serializer) {
String string = serializer.getMetadataSectionName();
return jsonObject.has(string) ? Optional.of(serializer.fromJson(GsonHelper.getAsJsonObject(jsonObject, string))) : Optional.empty();
}
};
} catch (Throwable var5) {
try {
bufferedReader.close();
} catch (Throwable var4) {
var5.addSuppressed(var4);
}
throw var5;
}
bufferedReader.close();
return var3;
}
<T> Optional<T> getSection(MetadataSectionSerializer<T> serializer);
default ResourceMetadata copySections(Collection<MetadataSectionSerializer<?>> serializers) {
ResourceMetadata.Builder builder = new ResourceMetadata.Builder();
for (MetadataSectionSerializer<?> metadataSectionSerializer : serializers) {
this.copySection(builder, metadataSectionSerializer);
}
return builder.build();
}
private <T> void copySection(ResourceMetadata.Builder builder, MetadataSectionSerializer<T> serializer) {
this.getSection(serializer).ifPresent(object -> builder.put(serializer, (T)object));
}
public static class Builder {
private final ImmutableMap.Builder<MetadataSectionSerializer<?>, Object> map = ImmutableMap.builder();
public <T> ResourceMetadata.Builder put(MetadataSectionSerializer<T> key, T value) {
this.map.put(key, value);
return this;
}
public ResourceMetadata build() {
final ImmutableMap<MetadataSectionSerializer<?>, Object> immutableMap = this.map.build();
return immutableMap.isEmpty() ? ResourceMetadata.EMPTY : new ResourceMetadata() {
@Override
public <T> Optional<T> getSection(MetadataSectionSerializer<T> serializer) {
return Optional.ofNullable(immutableMap.get(serializer));
}
};
}
}
}