package net.minecraft.world.entity.ai.attributes; import com.google.common.collect.ImmutableMap; import java.util.Map; import java.util.function.Consumer; import javax.annotation.Nullable; import net.minecraft.core.Holder; import net.minecraft.resources.ResourceLocation; public class AttributeSupplier { private final Map, AttributeInstance> instances; AttributeSupplier(Map, AttributeInstance> p_22243_) { this.instances = p_22243_; } private AttributeInstance getAttributeInstance(Holder p_335900_) { AttributeInstance attributeinstance = this.instances.get(p_335900_); if (attributeinstance == null) { throw new IllegalArgumentException("Can't find attribute " + p_335900_.getRegisteredName()); } else { return attributeinstance; } } public double getValue(Holder p_333974_) { return this.getAttributeInstance(p_333974_).getValue(); } public double getBaseValue(Holder p_333849_) { return this.getAttributeInstance(p_333849_).getBaseValue(); } public double getModifierValue(Holder p_333807_, ResourceLocation p_344356_) { AttributeModifier attributemodifier = this.getAttributeInstance(p_333807_).getModifier(p_344356_); if (attributemodifier == null) { throw new IllegalArgumentException("Can't find modifier " + p_344356_ + " on attribute " + p_333807_.getRegisteredName()); } else { return attributemodifier.amount(); } } @Nullable public AttributeInstance createInstance(Consumer p_22251_, Holder p_333997_) { AttributeInstance attributeinstance = this.instances.get(p_333997_); if (attributeinstance == null) { return null; } else { AttributeInstance attributeinstance1 = new AttributeInstance(p_333997_, p_22251_); attributeinstance1.replaceFrom(attributeinstance); return attributeinstance1; } } public static AttributeSupplier.Builder builder() { return new AttributeSupplier.Builder(); } public boolean hasAttribute(Holder p_331710_) { return this.instances.containsKey(p_331710_); } public boolean hasModifier(Holder p_335566_, ResourceLocation p_343659_) { AttributeInstance attributeinstance = this.instances.get(p_335566_); return attributeinstance != null && attributeinstance.getModifier(p_343659_) != null; } public static class Builder { private final ImmutableMap.Builder, AttributeInstance> builder = ImmutableMap.builder(); private boolean instanceFrozen; private AttributeInstance create(Holder p_334904_) { AttributeInstance attributeinstance = new AttributeInstance(p_334904_, p_326800_ -> { if (this.instanceFrozen) { throw new UnsupportedOperationException("Tried to change value for default attribute instance: " + p_334904_.getRegisteredName()); } }); this.builder.put(p_334904_, attributeinstance); return attributeinstance; } public AttributeSupplier.Builder add(Holder p_334664_) { this.create(p_334664_); return this; } public AttributeSupplier.Builder add(Holder p_329131_, double p_22270_) { AttributeInstance attributeinstance = this.create(p_329131_); attributeinstance.setBaseValue(p_22270_); return this; } public AttributeSupplier build() { this.instanceFrozen = true; return new AttributeSupplier(this.builder.buildKeepingLast()); } } }