diff --git a/Spigot-Server-Patches/Configurable-Player-Collision.patch b/Spigot-Server-Patches/Configurable-Player-Collision.patch
index 12a6124769..fb62f0a320 100644
--- a/Spigot-Server-Patches/Configurable-Player-Collision.patch
+++ b/Spigot-Server-Patches/Configurable-Player-Collision.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Configurable Player Collision
 
 
 diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java
-index db5770ef..233e7c64 100644
+index db5770ef14..233e7c64ad 100644
 --- a/src/main/java/com/destroystokyo/paper/PaperConfig.java
 +++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java
 @@ -0,0 +0,0 @@ public class PaperConfig {
@@ -19,7 +19,7 @@ index db5770ef..233e7c64 100644
 +    }
  }
 diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 8056dc40..74c84dda 100644
+index 8056dc40df..74c84dda69 100644
 --- a/src/main/java/net/minecraft/server/MinecraftServer.java
 +++ b/src/main/java/net/minecraft/server/MinecraftServer.java
 @@ -0,0 +0,0 @@ public abstract class MinecraftServer implements IAsyncTaskHandler, IMojangStati
@@ -43,7 +43,7 @@ index 8056dc40..74c84dda 100644
  
      protected void a(File file, WorldData worlddata) {
 diff --git a/src/main/java/net/minecraft/server/PacketPlayOutScoreboardTeam.java b/src/main/java/net/minecraft/server/PacketPlayOutScoreboardTeam.java
-index f7a9b9d8..7befd80c 100644
+index f7a9b9d885..7befd80cf5 100644
 --- a/src/main/java/net/minecraft/server/PacketPlayOutScoreboardTeam.java
 +++ b/src/main/java/net/minecraft/server/PacketPlayOutScoreboardTeam.java
 @@ -0,0 +0,0 @@ public class PacketPlayOutScoreboardTeam implements Packet<PacketListenerPlayOut
@@ -56,7 +56,7 @@ index f7a9b9d8..7befd80c 100644
              packetdataserializer.a(this.c);
              packetdataserializer.a(this.d);
 diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
-index 2154c051..baf870ac 100644
+index 2154c0516c..baf870ac2a 100644
 --- a/src/main/java/net/minecraft/server/PlayerList.java
 +++ b/src/main/java/net/minecraft/server/PlayerList.java
 @@ -0,0 +0,0 @@ public abstract class PlayerList {
diff --git a/Spigot-Server-Patches/Do-not-load-chunks-for-Pathfinding.patch b/Spigot-Server-Patches/Do-not-load-chunks-for-Pathfinding.patch
new file mode 100644
index 0000000000..ba7b1c33c3
--- /dev/null
+++ b/Spigot-Server-Patches/Do-not-load-chunks-for-Pathfinding.patch
@@ -0,0 +1,136 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Aikar <aikar@aikar.co>
+Date: Thu, 31 Mar 2016 19:17:58 -0400
+Subject: [PATCH] Do not load chunks for Pathfinding
+
+
+diff --git a/src/main/java/net/minecraft/server/ChunkCache.java b/src/main/java/net/minecraft/server/ChunkCache.java
+index ff740bc1a7..78adbf9062 100644
+--- a/src/main/java/net/minecraft/server/ChunkCache.java
++++ b/src/main/java/net/minecraft/server/ChunkCache.java
+@@ -0,0 +0,0 @@ public class ChunkCache implements IIBlockAccess {
+ 
+         for(int l = this.a; l <= j; ++l) {
+             for(int i1 = this.b; i1 <= k; ++i1) {
+-                this.c[l - this.a][i1 - this.b] = world.getChunkAt(l, i1);
++                this.c[l - this.a][i1 - this.b] = world.getChunkIfLoaded(l, i1); // Paper
+             }
+         }
+ 
+diff --git a/src/main/java/net/minecraft/server/NavigationAbstract.java b/src/main/java/net/minecraft/server/NavigationAbstract.java
+index a8b070ed32..7a4bc0fcc3 100644
+--- a/src/main/java/net/minecraft/server/NavigationAbstract.java
++++ b/src/main/java/net/minecraft/server/NavigationAbstract.java
+@@ -0,0 +0,0 @@ public abstract class NavigationAbstract {
+     protected long n;
+     protected PathfinderAbstract o;
+     private BlockPosition q;
+-    private Pathfinder r;
++    private Pathfinder r; public Pathfinder getPathfinder() { return r; } // Paper - OBFHELPER
+ 
++    private void setWorld() { if (getPathfinder() != null && getPathfinder().getPathfinder() != null) getPathfinder().getPathfinder().world = getEntity().world; } // Paper
+     public NavigationAbstract(EntityInsentient entityinsentient, World world) {
+         this.a = entityinsentient;
+         this.b = world;
+         this.p = entityinsentient.getAttributeInstance(GenericAttributes.FOLLOW_RANGE);
+         this.r = this.a();
++        setWorld(); // Paper
+     }
+ 
+     public BlockPosition i() {
+@@ -0,0 +0,0 @@ public abstract class NavigationAbstract {
+     }
+ 
+     public void d() {
++        setWorld(); // Paper
+         ++this.e;
+         if (this.m) {
+             this.l();
+diff --git a/src/main/java/net/minecraft/server/Pathfinder.java b/src/main/java/net/minecraft/server/Pathfinder.java
+index 04c71ac0ef..6e583356ce 100644
+--- a/src/main/java/net/minecraft/server/Pathfinder.java
++++ b/src/main/java/net/minecraft/server/Pathfinder.java
+@@ -0,0 +0,0 @@ public class Pathfinder {
+     private final Path a = new Path();
+     private final Set<PathPoint> b = Sets.newHashSet();
+     private final PathPoint[] c = new PathPoint[32];
+-    private PathfinderAbstract d;
++    private PathfinderAbstract d; public PathfinderAbstract getPathfinder() { return d; }  // Paper - OBFHELPER
+ 
+     public Pathfinder(PathfinderAbstract pathfinderabstract) {
+         this.d = pathfinderabstract;
+diff --git a/src/main/java/net/minecraft/server/PathfinderAbstract.java b/src/main/java/net/minecraft/server/PathfinderAbstract.java
+index ba7fe359fe..6716280146 100644
+--- a/src/main/java/net/minecraft/server/PathfinderAbstract.java
++++ b/src/main/java/net/minecraft/server/PathfinderAbstract.java
+@@ -0,0 +0,0 @@ package net.minecraft.server;
+ public abstract class PathfinderAbstract {
+     protected IBlockAccess a;
+     protected EntityInsentient b;
++    public World world; // Paper
+     protected final IntHashMap<PathPoint> c = new IntHashMap<PathPoint>();
+     protected int d;
+     protected int e;
+@@ -0,0 +0,0 @@ public abstract class PathfinderAbstract {
+ 
+     public void a(IBlockAccess iblockaccess, EntityInsentient entityinsentient) {
+         this.a = iblockaccess;
++        if (iblockaccess instanceof World) world = (World) iblockaccess; // Paper
+         this.b = entityinsentient;
+         this.c.c();
+         this.d = MathHelper.d(entityinsentient.width + 1.0F);
+diff --git a/src/main/java/net/minecraft/server/PathfinderNormal.java b/src/main/java/net/minecraft/server/PathfinderNormal.java
+index 64e0b08170..93f3d2e363 100644
+--- a/src/main/java/net/minecraft/server/PathfinderNormal.java
++++ b/src/main/java/net/minecraft/server/PathfinderNormal.java
+@@ -0,0 +0,0 @@ public class PathfinderNormal extends PathfinderAbstract {
+         BlockPosition blockposition2 = new BlockPosition(this.b);
+         PathType pathtype1 = this.a(this.b, blockposition2.getX(), i, blockposition2.getZ());
+         if (this.b.a(pathtype1) < 0.0F) {
+-            HashSet hashset = Sets.newHashSet();
++            HashSet<BlockPosition> hashset = Sets.newHashSet(); // Paper - decompile fix
+             hashset.add(new BlockPosition(this.b.getBoundingBox().a, (double)i, this.b.getBoundingBox().c));
+             hashset.add(new BlockPosition(this.b.getBoundingBox().a, (double)i, this.b.getBoundingBox().f));
+             hashset.add(new BlockPosition(this.b.getBoundingBox().d, (double)i, this.b.getBoundingBox().c));
+@@ -0,0 +0,0 @@ public class PathfinderNormal extends PathfinderAbstract {
+     }
+ 
+     public PathType a(IBlockAccess iblockaccess, int i, int jx, int k, EntityInsentient entityinsentient, int l, int i1, int j1, boolean flag, boolean flag1) {
+-        EnumSet enumset = EnumSet.noneOf(PathType.class);
++        EnumSet<PathType> enumset = EnumSet.noneOf(PathType.class); // Paper - decompile fix
+         PathType pathtype = PathType.BLOCKED;
+         double d0 = (double)entityinsentient.width / 2.0D;
+         BlockPosition blockposition = new BlockPosition(entityinsentient);
+@@ -0,0 +0,0 @@ public class PathfinderNormal extends PathfinderAbstract {
+     public PathType a(IBlockAccess iblockaccess, int i, int jx, int k) {
+         PathType pathtype = this.b(iblockaccess, i, jx, k);
+         if (pathtype == PathType.OPEN && jx >= 1) {
+-            Block block = iblockaccess.getType(new BlockPosition(i, jx - 1, k)).getBlock();
++            Block block = world.getBlockIfLoaded(new BlockPosition(i, jx - 1, k)); // Paper
++            if (block == null) return PathType.BLOCKED; // Paper
+             PathType pathtype1 = this.b(iblockaccess, i, jx - 1, k);
+             pathtype = pathtype1 != PathType.WALKABLE && pathtype1 != PathType.OPEN && pathtype1 != PathType.WATER && pathtype1 != PathType.LAVA ? PathType.WALKABLE : PathType.OPEN;
+             if (pathtype1 == PathType.DAMAGE_FIRE || block == Blocks.MAGMA_BLOCK) {
+@@ -0,0 +0,0 @@ public class PathfinderNormal extends PathfinderAbstract {
+                 for(int l = -1; l <= 1; ++l) {
+                     for(int i1 = -1; i1 <= 1; ++i1) {
+                         if (l != 0 || i1 != 0) {
+-                            Block block = iblockaccess.getType(blockposition$b.f(l + i, jx, i1 + k)).getBlock();
+-                            if (block == Blocks.CACTUS) {
++                            Block block = world.getBlockIfLoaded(blockposition$b.f(l + i, jx, i1 + k)); // Paper
++                            if (block == null) pathtype = PathType.BLOCKED; // Paper
++                            else if (block == Blocks.CACTUS) { // Paper
+                                 pathtype = PathType.DANGER_CACTUS;
+                             } else if (block == Blocks.FIRE) {
+                                 pathtype = PathType.DANGER_FIRE;
+@@ -0,0 +0,0 @@ public class PathfinderNormal extends PathfinderAbstract {
+ 
+     protected PathType b(IBlockAccess iblockaccess, int i, int jx, int k) {
+         BlockPosition blockposition = new BlockPosition(i, jx, k);
+-        IBlockData iblockdata = iblockaccess.getType(blockposition);
++        IBlockData iblockdata = world.getTypeIfLoaded(blockposition); // Paper
++        if (iblockdata == null) return PathType.BLOCKED; // Paper
+         Block block = iblockdata.getBlock();
+         Material material = iblockdata.getMaterial();
+         if (iblockdata.isAir()) {
+--
\ No newline at end of file
diff --git a/Spigot-Server-Patches/Do-not-load-chunks-for-light-checks.patch b/Spigot-Server-Patches/Do-not-load-chunks-for-light-checks.patch
index d788636074..eb8c5c40d3 100644
--- a/Spigot-Server-Patches/Do-not-load-chunks-for-light-checks.patch
+++ b/Spigot-Server-Patches/Do-not-load-chunks-for-light-checks.patch
@@ -6,122 +6,6 @@ Subject: [PATCH] Do not load chunks for light checks
 Should only happen for blocks on the edge that uses neighbors light level
 (certain blocks). In that case, there will be 3-4 other neighbors to get a light level from.
 
-diff --git a/src/main/java/net/minecraft/server/NavigationAbstract.java b/src/main/java/net/minecraft/server/NavigationAbstract.java
-index a8b070ed32..7a4bc0fcc3 100644
---- a/src/main/java/net/minecraft/server/NavigationAbstract.java
-+++ b/src/main/java/net/minecraft/server/NavigationAbstract.java
-@@ -0,0 +0,0 @@ public abstract class NavigationAbstract {
-     protected long n;
-     protected PathfinderAbstract o;
-     private BlockPosition q;
--    private Pathfinder r;
-+    private Pathfinder r; public Pathfinder getPathfinder() { return r; } // Paper - OBFHELPER
- 
-+    private void setWorld() { if (getPathfinder() != null && getPathfinder().getPathfinder() != null) getPathfinder().getPathfinder().world = getEntity().world; } // Paper
-     public NavigationAbstract(EntityInsentient entityinsentient, World world) {
-         this.a = entityinsentient;
-         this.b = world;
-         this.p = entityinsentient.getAttributeInstance(GenericAttributes.FOLLOW_RANGE);
-         this.r = this.a();
-+        setWorld(); // Paper
-     }
- 
-     public BlockPosition i() {
-@@ -0,0 +0,0 @@ public abstract class NavigationAbstract {
-     }
- 
-     public void d() {
-+        setWorld(); // Paper
-         ++this.e;
-         if (this.m) {
-             this.l();
-diff --git a/src/main/java/net/minecraft/server/Pathfinder.java b/src/main/java/net/minecraft/server/Pathfinder.java
-index 04c71ac0ef..6e583356ce 100644
---- a/src/main/java/net/minecraft/server/Pathfinder.java
-+++ b/src/main/java/net/minecraft/server/Pathfinder.java
-@@ -0,0 +0,0 @@ public class Pathfinder {
-     private final Path a = new Path();
-     private final Set<PathPoint> b = Sets.newHashSet();
-     private final PathPoint[] c = new PathPoint[32];
--    private PathfinderAbstract d;
-+    private PathfinderAbstract d; public PathfinderAbstract getPathfinder() { return d; }  // Paper - OBFHELPER
- 
-     public Pathfinder(PathfinderAbstract pathfinderabstract) {
-         this.d = pathfinderabstract;
-diff --git a/src/main/java/net/minecraft/server/PathfinderAbstract.java b/src/main/java/net/minecraft/server/PathfinderAbstract.java
-index ba7fe359fe..6716280146 100644
---- a/src/main/java/net/minecraft/server/PathfinderAbstract.java
-+++ b/src/main/java/net/minecraft/server/PathfinderAbstract.java
-@@ -0,0 +0,0 @@ package net.minecraft.server;
- public abstract class PathfinderAbstract {
-     protected IBlockAccess a;
-     protected EntityInsentient b;
-+    public World world; // Paper
-     protected final IntHashMap<PathPoint> c = new IntHashMap<PathPoint>();
-     protected int d;
-     protected int e;
-@@ -0,0 +0,0 @@ public abstract class PathfinderAbstract {
- 
-     public void a(IBlockAccess iblockaccess, EntityInsentient entityinsentient) {
-         this.a = iblockaccess;
-+        if (iblockaccess instanceof World) world = (World) iblockaccess; // Paper
-         this.b = entityinsentient;
-         this.c.c();
-         this.d = MathHelper.d(entityinsentient.width + 1.0F);
-diff --git a/src/main/java/net/minecraft/server/PathfinderNormal.java b/src/main/java/net/minecraft/server/PathfinderNormal.java
-index 64e0b08170..93f3d2e363 100644
---- a/src/main/java/net/minecraft/server/PathfinderNormal.java
-+++ b/src/main/java/net/minecraft/server/PathfinderNormal.java
-@@ -0,0 +0,0 @@ public class PathfinderNormal extends PathfinderAbstract {
-         BlockPosition blockposition2 = new BlockPosition(this.b);
-         PathType pathtype1 = this.a(this.b, blockposition2.getX(), i, blockposition2.getZ());
-         if (this.b.a(pathtype1) < 0.0F) {
--            HashSet hashset = Sets.newHashSet();
-+            HashSet<BlockPosition> hashset = Sets.newHashSet(); // Paper - decompile fix
-             hashset.add(new BlockPosition(this.b.getBoundingBox().a, (double)i, this.b.getBoundingBox().c));
-             hashset.add(new BlockPosition(this.b.getBoundingBox().a, (double)i, this.b.getBoundingBox().f));
-             hashset.add(new BlockPosition(this.b.getBoundingBox().d, (double)i, this.b.getBoundingBox().c));
-@@ -0,0 +0,0 @@ public class PathfinderNormal extends PathfinderAbstract {
-     }
- 
-     public PathType a(IBlockAccess iblockaccess, int i, int jx, int k, EntityInsentient entityinsentient, int l, int i1, int j1, boolean flag, boolean flag1) {
--        EnumSet enumset = EnumSet.noneOf(PathType.class);
-+        EnumSet<PathType> enumset = EnumSet.noneOf(PathType.class); // Paper - decompile fix
-         PathType pathtype = PathType.BLOCKED;
-         double d0 = (double)entityinsentient.width / 2.0D;
-         BlockPosition blockposition = new BlockPosition(entityinsentient);
-@@ -0,0 +0,0 @@ public class PathfinderNormal extends PathfinderAbstract {
-     public PathType a(IBlockAccess iblockaccess, int i, int jx, int k) {
-         PathType pathtype = this.b(iblockaccess, i, jx, k);
-         if (pathtype == PathType.OPEN && jx >= 1) {
--            Block block = iblockaccess.getType(new BlockPosition(i, jx - 1, k)).getBlock();
-+            Block block = world.getBlockIfLoaded(new BlockPosition(i, jx - 1, k)); // Paper
-+            if (block == null) return PathType.BLOCKED; // Paper
-             PathType pathtype1 = this.b(iblockaccess, i, jx - 1, k);
-             pathtype = pathtype1 != PathType.WALKABLE && pathtype1 != PathType.OPEN && pathtype1 != PathType.WATER && pathtype1 != PathType.LAVA ? PathType.WALKABLE : PathType.OPEN;
-             if (pathtype1 == PathType.DAMAGE_FIRE || block == Blocks.MAGMA_BLOCK) {
-@@ -0,0 +0,0 @@ public class PathfinderNormal extends PathfinderAbstract {
-                 for(int l = -1; l <= 1; ++l) {
-                     for(int i1 = -1; i1 <= 1; ++i1) {
-                         if (l != 0 || i1 != 0) {
--                            Block block = iblockaccess.getType(blockposition$b.f(l + i, jx, i1 + k)).getBlock();
--                            if (block == Blocks.CACTUS) {
-+                            Block block = world.getBlockIfLoaded(blockposition$b.f(l + i, jx, i1 + k)); // Paper
-+                            if (block == null) pathtype = PathType.BLOCKED; // Paper
-+                            else if (block == Blocks.CACTUS) { // Paper
-                                 pathtype = PathType.DANGER_CACTUS;
-                             } else if (block == Blocks.FIRE) {
-                                 pathtype = PathType.DANGER_FIRE;
-@@ -0,0 +0,0 @@ public class PathfinderNormal extends PathfinderAbstract {
- 
-     protected PathType b(IBlockAccess iblockaccess, int i, int jx, int k) {
-         BlockPosition blockposition = new BlockPosition(i, jx, k);
--        IBlockData iblockdata = iblockaccess.getType(blockposition);
-+        IBlockData iblockdata = world.getTypeIfLoaded(blockposition); // Paper
-+        if (iblockdata == null) return PathType.BLOCKED; // Paper
-         Block block = iblockdata.getBlock();
-         Material material = iblockdata.getMaterial();
-         if (iblockdata.isAir()) {
 diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
 index 207f53a9c3..b8fcfb6092 100644
 --- a/src/main/java/net/minecraft/server/World.java
diff --git a/Spigot-Server-Patches/Do-not-load-chunks-for-pathfinding.patch b/Spigot-Server-Patches/Do-not-load-chunks-for-pathfinding.patch
deleted file mode 100644
index 5c16cbe028..0000000000
--- a/Spigot-Server-Patches/Do-not-load-chunks-for-pathfinding.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Aikar <aikar@aikar.co>
-Date: Tue, 19 Jan 2016 00:13:19 -0500
-Subject: [PATCH] Do not load chunks for pathfinding
-
-
-diff --git a/src/main/java/net/minecraft/server/ChunkCache.java b/src/main/java/net/minecraft/server/ChunkCache.java
-index ff740bc1a7..78adbf9062 100644
---- a/src/main/java/net/minecraft/server/ChunkCache.java
-+++ b/src/main/java/net/minecraft/server/ChunkCache.java
-@@ -0,0 +0,0 @@ public class ChunkCache implements IIBlockAccess {
- 
-         for(int l = this.a; l <= j; ++l) {
-             for(int i1 = this.b; i1 <= k; ++i1) {
--                this.c[l - this.a][i1 - this.b] = world.getChunkAt(l, i1);
-+                this.c[l - this.a][i1 - this.b] = world.getChunkIfLoaded(l, i1); // Paper
-             }
-         }
- 
---
\ No newline at end of file
diff --git a/Spigot-Server-Patches/Fix-reducedDebugInfo-not-initialized-on-client.patch b/Spigot-Server-Patches/Fix-reducedDebugInfo-not-initialized-on-client.patch
index 7f0d7f3a26..d12daf4759 100644
--- a/Spigot-Server-Patches/Fix-reducedDebugInfo-not-initialized-on-client.patch
+++ b/Spigot-Server-Patches/Fix-reducedDebugInfo-not-initialized-on-client.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Fix reducedDebugInfo not initialized on client
 
 
 diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
-index 9f2c7d3f45..8121f8e40a 100644
+index 7dfb2bee49..2154c0516c 100644
 --- a/src/main/java/net/minecraft/server/PlayerList.java
 +++ b/src/main/java/net/minecraft/server/PlayerList.java
 @@ -0,0 +0,0 @@ public abstract class PlayerList {