--- a/net/minecraft/server/TickListServer.java
+++ b/net/minecraft/server/TickListServer.java
@@ -39,11 +39,17 @@
     public void a() {
         int i = this.nextTickList.size();
 
-        if (i != this.nextTickListHash.size()) {
+        if (false) { // CraftBukkit
             throw new IllegalStateException("TickNextTick list out of synch");
         } else {
             if (i > 65536) {
-                i = 65536;
+                // CraftBukkit start - If the server has too much to process over time, try to alleviate that
+                if (i > 20 * 65536) {
+                    i = i / 20;
+                } else {
+                    i = 65536;
+                }
+                // CraftBukkit end
             }
 
             ChunkProviderServer chunkproviderserver = this.f.getChunkProvider();
@@ -82,7 +88,7 @@
                         throw new ReportedException(crashreport);
                     }
                 } else {
-                    this.a(nextticklistentry.a, nextticklistentry.b(), 0);
+                    this.a(nextticklistentry.a, (T) nextticklistentry.b(), 0); // CraftBukkit - decompile error
                 }
             }