From ee6d0fa9384fba4be2efe5ea2a0e06ba7df8df11 Mon Sep 17 00:00:00 2001
From: Thinkofdeath <thinkofdeath@spigotmc.org>
Date: Fri, 20 Feb 2015 10:19:11 +0000
Subject: [PATCH] SPIGOT-591: Optimize EntitySlice.iterator

Previously if the key 'this.c' was missing a new hashmap was created, this
caused thousands to be created each tick
---
 nms-patches/EntitySlice.patch            | 22 ++++++++++++++++++++++
 nms-patches/EntitySliceInnerClass1.patch | 10 ++++++++++
 nms-patches/EntitySliceInnerClass2.patch | 10 ++++++++++
 3 files changed, 42 insertions(+)
 create mode 100644 nms-patches/EntitySlice.patch
 create mode 100644 nms-patches/EntitySliceInnerClass1.patch
 create mode 100644 nms-patches/EntitySliceInnerClass2.patch

diff --git a/nms-patches/EntitySlice.patch b/nms-patches/EntitySlice.patch
new file mode 100644
index 0000000000..5e898280de
--- /dev/null
+++ b/nms-patches/EntitySlice.patch
@@ -0,0 +1,22 @@
+--- ../work/decompile-8eb82bde/net/minecraft/server/EntitySlice.java	2015-02-20 10:18:42.025023871 +0000
++++ src/main/java/net/minecraft/server/EntitySlice.java	2015-02-20 10:18:42.057023871 +0000
+@@ -4,6 +4,7 @@
+ import com.google.common.collect.Multimap;
+ import com.google.common.collect.Sets;
+ import java.util.AbstractSet;
++import java.util.Collections;
+ import java.util.Iterator;
+ import java.util.Set;
+ import org.apache.commons.lang3.ClassUtils;
+@@ -89,6 +90,11 @@
+     }
+ 
+     public Iterator iterator() {
++        // CraftBukkit start
++        if (!this.a.containsKey(this.c)) {
++            return Collections.EMPTY_LIST.iterator();
++        }
++        // CraftBukkit end
+         Iterator iterator = this.a.get(this.c).iterator();
+ 
+         return new EntitySliceInnerClass2(this, iterator);
diff --git a/nms-patches/EntitySliceInnerClass1.patch b/nms-patches/EntitySliceInnerClass1.patch
new file mode 100644
index 0000000000..c4cf2192f7
--- /dev/null
+++ b/nms-patches/EntitySliceInnerClass1.patch
@@ -0,0 +1,10 @@
+--- ../work/decompile-8eb82bde/net/minecraft/server/EntitySliceInnerClass1.java	2015-02-20 10:18:41.853023875 +0000
++++ src/main/java/net/minecraft/server/EntitySliceInnerClass1.java	2015-02-20 10:18:41.853023875 +0000
+@@ -3,6 +3,7 @@
+ import com.google.common.collect.Iterators;
+ import java.util.Iterator;
+ 
++// PAIL: Access transform
+ class EntitySliceInnerClass1 implements Iterable {
+ 
+     final Class a;
diff --git a/nms-patches/EntitySliceInnerClass2.patch b/nms-patches/EntitySliceInnerClass2.patch
new file mode 100644
index 0000000000..bd7f1184e7
--- /dev/null
+++ b/nms-patches/EntitySliceInnerClass2.patch
@@ -0,0 +1,10 @@
+--- ../work/decompile-8eb82bde/net/minecraft/server/EntitySliceInnerClass2.java	2015-02-20 10:18:41.945023873 +0000
++++ src/main/java/net/minecraft/server/EntitySliceInnerClass2.java	2015-02-20 10:18:41.965023873 +0000
+@@ -3,6 +3,7 @@
+ import com.google.common.collect.AbstractIterator;
+ import java.util.Iterator;
+ 
++// PAIL: Access transform
+ class EntitySliceInnerClass2 extends AbstractIterator {
+ 
+     final Iterator a;