package net.minecraft.client.telemetry; import com.mojang.serialization.DataResult; import com.mojang.serialization.DynamicOps; import com.mojang.serialization.MapCodec; import com.mojang.serialization.MapLike; import com.mojang.serialization.RecordBuilder; import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Stream; import javax.annotation.Nullable; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @OnlyIn(Dist.CLIENT) public class TelemetryPropertyMap { final Map, Object> entries; TelemetryPropertyMap(Map, Object> p_262135_) { this.entries = p_262135_; } public static TelemetryPropertyMap.Builder builder() { return new TelemetryPropertyMap.Builder(); } public static MapCodec createCodec(final List> p_262139_) { return new MapCodec() { public RecordBuilder encode(TelemetryPropertyMap p_261525_, DynamicOps p_262068_, RecordBuilder p_261850_) { RecordBuilder recordbuilder = p_261850_; for (TelemetryProperty telemetryproperty : p_262139_) { recordbuilder = this.encodeProperty(p_261525_, recordbuilder, telemetryproperty); } return recordbuilder; } private RecordBuilder encodeProperty(TelemetryPropertyMap p_262128_, RecordBuilder p_261947_, TelemetryProperty p_261911_) { V v = p_262128_.get(p_261911_); return v != null ? p_261947_.add(p_261911_.id(), v, p_261911_.codec()) : p_261947_; } @Override public DataResult decode(DynamicOps p_261767_, MapLike p_262176_) { DataResult dataresult = DataResult.success(new TelemetryPropertyMap.Builder()); for (TelemetryProperty telemetryproperty : p_262139_) { dataresult = this.decodeProperty(dataresult, p_261767_, p_262176_, telemetryproperty); } return dataresult.map(TelemetryPropertyMap.Builder::build); } private DataResult decodeProperty( DataResult p_261892_, DynamicOps p_261859_, MapLike p_261668_, TelemetryProperty p_261627_ ) { T t = p_261668_.get(p_261627_.id()); if (t != null) { DataResult dataresult = p_261627_.codec().parse(p_261859_, t); return p_261892_.apply2stable((p_262028_, p_261796_) -> p_262028_.put(p_261627_, (V)p_261796_), dataresult); } else { return p_261892_; } } @Override public Stream keys(DynamicOps p_261746_) { return p_262139_.stream().map(TelemetryProperty::id).map(p_261746_::createString); } }; } @Nullable public T get(TelemetryProperty p_261667_) { return (T)this.entries.get(p_261667_); } @Override public String toString() { return this.entries.toString(); } public Set> propertySet() { return this.entries.keySet(); } @OnlyIn(Dist.CLIENT) public static class Builder { private final Map, Object> entries = new Reference2ObjectOpenHashMap<>(); Builder() { } public TelemetryPropertyMap.Builder put(TelemetryProperty p_261681_, T p_262093_) { this.entries.put(p_261681_, p_262093_); return this; } public TelemetryPropertyMap.Builder putIfNotNull(TelemetryProperty p_286534_, @Nullable T p_286699_) { if (p_286699_ != null) { this.entries.put(p_286534_, p_286699_); } return this; } public TelemetryPropertyMap.Builder putAll(TelemetryPropertyMap p_261779_) { this.entries.putAll(p_261779_.entries); return this; } public TelemetryPropertyMap build() { return new TelemetryPropertyMap(this.entries); } } }