119 lines
4.4 KiB
Java
119 lines
4.4 KiB
Java
|
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<TelemetryProperty<?>, Object> entries;
|
||
|
|
||
|
TelemetryPropertyMap(Map<TelemetryProperty<?>, Object> p_262135_) {
|
||
|
this.entries = p_262135_;
|
||
|
}
|
||
|
|
||
|
public static TelemetryPropertyMap.Builder builder() {
|
||
|
return new TelemetryPropertyMap.Builder();
|
||
|
}
|
||
|
|
||
|
public static MapCodec<TelemetryPropertyMap> createCodec(final List<TelemetryProperty<?>> p_262139_) {
|
||
|
return new MapCodec<TelemetryPropertyMap>() {
|
||
|
public <T> RecordBuilder<T> encode(TelemetryPropertyMap p_261525_, DynamicOps<T> p_262068_, RecordBuilder<T> p_261850_) {
|
||
|
RecordBuilder<T> recordbuilder = p_261850_;
|
||
|
|
||
|
for (TelemetryProperty<?> telemetryproperty : p_262139_) {
|
||
|
recordbuilder = this.encodeProperty(p_261525_, recordbuilder, telemetryproperty);
|
||
|
}
|
||
|
|
||
|
return recordbuilder;
|
||
|
}
|
||
|
|
||
|
private <T, V> RecordBuilder<T> encodeProperty(TelemetryPropertyMap p_262128_, RecordBuilder<T> p_261947_, TelemetryProperty<V> 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 <T> DataResult<TelemetryPropertyMap> decode(DynamicOps<T> p_261767_, MapLike<T> p_262176_) {
|
||
|
DataResult<TelemetryPropertyMap.Builder> 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 <T, V> DataResult<TelemetryPropertyMap.Builder> decodeProperty(
|
||
|
DataResult<TelemetryPropertyMap.Builder> p_261892_, DynamicOps<T> p_261859_, MapLike<T> p_261668_, TelemetryProperty<V> p_261627_
|
||
|
) {
|
||
|
T t = p_261668_.get(p_261627_.id());
|
||
|
if (t != null) {
|
||
|
DataResult<V> 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 <T> Stream<T> keys(DynamicOps<T> p_261746_) {
|
||
|
return p_262139_.stream().map(TelemetryProperty::id).map(p_261746_::createString);
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
@Nullable
|
||
|
public <T> T get(TelemetryProperty<T> p_261667_) {
|
||
|
return (T)this.entries.get(p_261667_);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public String toString() {
|
||
|
return this.entries.toString();
|
||
|
}
|
||
|
|
||
|
public Set<TelemetryProperty<?>> propertySet() {
|
||
|
return this.entries.keySet();
|
||
|
}
|
||
|
|
||
|
@OnlyIn(Dist.CLIENT)
|
||
|
public static class Builder {
|
||
|
private final Map<TelemetryProperty<?>, Object> entries = new Reference2ObjectOpenHashMap<>();
|
||
|
|
||
|
Builder() {
|
||
|
}
|
||
|
|
||
|
public <T> TelemetryPropertyMap.Builder put(TelemetryProperty<T> p_261681_, T p_262093_) {
|
||
|
this.entries.put(p_261681_, p_262093_);
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public <T> TelemetryPropertyMap.Builder putIfNotNull(TelemetryProperty<T> 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);
|
||
|
}
|
||
|
}
|
||
|
}
|