package net.minecraft.util; import com.google.common.collect.AbstractIterator; import com.google.common.collect.HashMultimap; import com.google.common.collect.Iterators; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; import java.util.AbstractSet; import java.util.Iterator; import java.util.Set; import org.apache.commons.lang3.ClassUtils; import org.apache.commons.lang3.ClassUtils.Interfaces; public class ClassInheratanceMultiMap extends AbstractSet { private final Multimap field_180218_a = HashMultimap.create(); private final Set field_180216_b = Sets.newIdentityHashSet(); private final Class field_180217_c; private static final String __OBFID = "CL_00002266"; public ClassInheratanceMultiMap(Class p_i45909_1_) { this.field_180217_c = p_i45909_1_; this.field_180216_b.add(p_i45909_1_); } public void func_180213_a(Class p_180213_1_) { Iterator var2 = this.field_180218_a.get(this.func_180212_a(p_180213_1_, false)).iterator(); while (var2.hasNext()) { Object var3 = var2.next(); if (p_180213_1_.isAssignableFrom(var3.getClass())) { this.field_180218_a.put(p_180213_1_, var3); } } this.field_180216_b.add(p_180213_1_); } protected Class func_180212_a(Class p_180212_1_, boolean p_180212_2_) { Iterator var3 = ClassUtils.hierarchy(p_180212_1_, Interfaces.INCLUDE).iterator(); Class var4; do { if (!var3.hasNext()) { throw new IllegalArgumentException("Don\'t know how to search for " + p_180212_1_); } var4 = (Class)var3.next(); } while (!this.field_180216_b.contains(var4)); if (var4 == this.field_180217_c && p_180212_2_) { this.func_180213_a(p_180212_1_); } return var4; } public boolean add(Object p_add_1_) { Iterator var2 = this.field_180216_b.iterator(); while (var2.hasNext()) { Class var3 = (Class)var2.next(); if (var3.isAssignableFrom(p_add_1_.getClass())) { this.field_180218_a.put(var3, p_add_1_); } } return true; } public boolean remove(Object p_remove_1_) { Object var2 = p_remove_1_; boolean var3 = false; Iterator var4 = this.field_180216_b.iterator(); while (var4.hasNext()) { Class var5 = (Class)var4.next(); if (var5.isAssignableFrom(var2.getClass())) { var3 |= this.field_180218_a.remove(var5, var2); } } return var3; } public Iterable func_180215_b(final Class p_180215_1_) { return new Iterable() { private static final String __OBFID = "CL_00002265"; public Iterator iterator() { Iterator var1 = ClassInheratanceMultiMap.this.field_180218_a.get(ClassInheratanceMultiMap.this.func_180212_a(p_180215_1_, true)).iterator(); return Iterators.filter(var1, p_180215_1_); } }; } public Iterator iterator() { final Iterator var1 = this.field_180218_a.get(this.field_180217_c).iterator(); return new AbstractIterator() { private static final String __OBFID = "CL_00002264"; protected Object computeNext() { return !var1.hasNext() ? this.endOfData() : var1.next(); } }; } public int size() { return this.field_180218_a.get(this.field_180217_c).size(); } }