Newer
Older
void-pack-super-server / work / decompile-ee3ecae0 / net / minecraft / server / AttributeMapBase.java
package net.minecraft.server;

import com.google.common.collect.HashMultimap;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import javax.annotation.Nullable;

public abstract class AttributeMapBase {

    protected final Map<IAttribute, AttributeInstance> a = Maps.newHashMap();
    protected final Map<String, AttributeInstance> b = new InsensitiveStringMap<>();
    protected final Multimap<IAttribute, IAttribute> c = HashMultimap.create();

    public AttributeMapBase() {}

    @Nullable
    public AttributeInstance a(IAttribute iattribute) {
        return (AttributeInstance) this.a.get(iattribute);
    }

    @Nullable
    public AttributeInstance a(String s) {
        return (AttributeInstance) this.b.get(s);
    }

    public AttributeInstance b(IAttribute iattribute) {
        if (this.b.containsKey(iattribute.getName())) {
            throw new IllegalArgumentException("Attribute is already registered!");
        } else {
            AttributeInstance attributeinstance = this.c(iattribute);

            this.b.put(iattribute.getName(), attributeinstance);
            this.a.put(iattribute, attributeinstance);

            for (IAttribute iattribute1 = iattribute.d(); iattribute1 != null; iattribute1 = iattribute1.d()) {
                this.c.put(iattribute1, iattribute);
            }

            return attributeinstance;
        }
    }

    protected abstract AttributeInstance c(IAttribute iattribute);

    public Collection<AttributeInstance> a() {
        return this.b.values();
    }

    public void a(AttributeInstance attributeinstance) {}

    public void a(Multimap<String, AttributeModifier> multimap) {
        Iterator iterator = multimap.entries().iterator();

        while (iterator.hasNext()) {
            Entry<String, AttributeModifier> entry = (Entry) iterator.next();
            AttributeInstance attributeinstance = this.a((String) entry.getKey());

            if (attributeinstance != null) {
                attributeinstance.removeModifier((AttributeModifier) entry.getValue());
            }
        }

    }

    public void b(Multimap<String, AttributeModifier> multimap) {
        Iterator iterator = multimap.entries().iterator();

        while (iterator.hasNext()) {
            Entry<String, AttributeModifier> entry = (Entry) iterator.next();
            AttributeInstance attributeinstance = this.a((String) entry.getKey());

            if (attributeinstance != null) {
                attributeinstance.removeModifier((AttributeModifier) entry.getValue());
                attributeinstance.addModifier((AttributeModifier) entry.getValue());
            }
        }

    }
}