/* * Decompiled with CFR 0.152. * * Could not load the following classes: * it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap * org.jspecify.annotations.Nullable */ package net.minecraft.world.attribute; import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap; import java.util.Map; import java.util.function.Function; import net.minecraft.world.attribute.EnvironmentAttribute; import net.minecraft.world.attribute.GaussianSampler; import net.minecraft.world.attribute.SpatialAttributeInterpolator; import net.minecraft.world.level.Level; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.phys.Vec3; import org.jspecify.annotations.Nullable; public class EnvironmentAttributeProbe { private final Map, ValueProbe> valueProbes = new Reference2ObjectOpenHashMap(); private final Function, ValueProbe> valueProbeFactory = x$0 -> new ValueProbe(x$0); private @Nullable Level level; private @Nullable Vec3 position; private final SpatialAttributeInterpolator biomeInterpolator = new SpatialAttributeInterpolator(); public void reset() { this.level = null; this.position = null; this.biomeInterpolator.clear(); this.valueProbes.clear(); } public void tick(Level level, Vec3 position) { this.level = level; this.position = position; this.valueProbes.values().removeIf(ValueProbe::tick); this.biomeInterpolator.clear(); GaussianSampler.sample(position.scale(0.25), level.getBiomeManager()::getNoiseBiomeAtQuart, (weight, biome) -> this.biomeInterpolator.accumulate(weight, ((Biome)biome.value()).getAttributes())); } public Value getValue(EnvironmentAttribute attribute, float partialTicks) { ValueProbe valueProbe = this.valueProbes.computeIfAbsent(attribute, this.valueProbeFactory); return (Value)valueProbe.get(attribute, partialTicks); } private class ValueProbe { private Value lastValue; private @Nullable Value newValue; public ValueProbe(EnvironmentAttribute attribute) { Value value = this.getValueFromLevel(attribute); this.lastValue = value; this.newValue = value; } private Value getValueFromLevel(EnvironmentAttribute attribute) { if (EnvironmentAttributeProbe.this.level == null || EnvironmentAttributeProbe.this.position == null) { return attribute.defaultValue(); } return EnvironmentAttributeProbe.this.level.environmentAttributes().getValue(attribute, EnvironmentAttributeProbe.this.position, EnvironmentAttributeProbe.this.biomeInterpolator); } public boolean tick() { if (this.newValue == null) { return true; } this.lastValue = this.newValue; this.newValue = null; return false; } public Value get(EnvironmentAttribute attribute, float partialTicks) { if (this.newValue == null) { this.newValue = this.getValueFromLevel(attribute); } return attribute.type().partialTickLerp().apply(partialTicks, this.lastValue, this.newValue); } } }