Files
CatServer/patches/net/minecraft/util/ClassInheritanceMultiMap.java.patch

39 lines
1.8 KiB
Diff

--- ../src-base/minecraft/net/minecraft/util/ClassInheritanceMultiMap.java
+++ ../src-work/minecraft/net/minecraft/util/ClassInheritanceMultiMap.java
@@ -13,7 +13,8 @@
public class ClassInheritanceMultiMap<T> extends AbstractSet<T>
{
- private static final Set < Class<? >> ALL_KNOWN = Sets. < Class<? >> newHashSet();
+ // Forge: Use concurrent collection to allow creating chunks from multiple threads safely
+ private static final Set < Class<? >> ALL_KNOWN = Collections.newSetFromMap(new java.util.concurrent.ConcurrentHashMap<Class<?>, Boolean>());
private final Map < Class<?>, List<T >> map = Maps. < Class<?>, List<T >> newHashMap();
private final Set < Class<? >> knownKeys = Sets. < Class<? >> newIdentityHashSet();
private final Class<T> baseClass;
@@ -122,6 +123,17 @@
{
public Iterator<S> iterator()
{
+ // CatServer start - Optimization from Foamfix
+ Class c = ClassInheritanceMultiMap.this.initializeClassLookup(clazz);
+ List<T> list = ClassInheritanceMultiMap.this.map.get(c);
+ if (list == null) {
+ return Collections.emptyIterator();
+ } else {
+ Iterator<T> iterator = list.iterator();
+ return clazz == c ? (Iterator<S>) iterator : Iterators.filter(iterator, clazz);
+ }
+ // CatServer end
+ /*
List<T> list = (List)ClassInheritanceMultiMap.this.map.get(ClassInheritanceMultiMap.this.initializeClassLookup(clazz));
if (list == null)
@@ -133,6 +145,7 @@
Iterator<T> iterator = list.iterator();
return Iterators.filter(iterator, clazz);
}
+ */
}
};
}