diff --git a/Spigot-Server-Patches/Prevent-Mob-AI-Rules-from-Loading-Chunks.patch b/Spigot-Server-Patches/Prevent-Mob-AI-Rules-from-Loading-Chunks.patch
new file mode 100644
index 0000000000..ac116994c8
--- /dev/null
+++ b/Spigot-Server-Patches/Prevent-Mob-AI-Rules-from-Loading-Chunks.patch
@@ -0,0 +1,53 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Aikar <aikar@aikar.co>
+Date: Mon, 10 Sep 2018 23:56:36 -0400
+Subject: [PATCH] Prevent Mob AI Rules from Loading Chunks
+
+
+diff --git a/src/main/java/net/minecraft/server/PathfinderGoalRemoveBlock.java b/src/main/java/net/minecraft/server/PathfinderGoalRemoveBlock.java
+index b1661693cf..2cbb6c8f91 100644
+--- a/src/main/java/net/minecraft/server/PathfinderGoalRemoveBlock.java
++++ b/src/main/java/net/minecraft/server/PathfinderGoalRemoveBlock.java
+@@ -0,0 +0,0 @@ public class PathfinderGoalRemoveBlock extends PathfinderGoalGotoTarget {
+     private final Block f;
+     private final EntityInsentient g;
+     private int h;
++    private World world; // Paper
+ 
+     public PathfinderGoalRemoveBlock(Block block, EntityCreature entitycreature, double d0, int i) {
+         super(entitycreature, d0, 24, i);
+         this.f = block;
+         this.g = entitycreature;
++        this.world = entitycreature.world; // Paper
+     }
+ 
+     public boolean a() {
+@@ -0,0 +0,0 @@ public class PathfinderGoalRemoveBlock extends PathfinderGoalGotoTarget {
+ 
+     @Nullable
+     private BlockPosition a(BlockPosition blockposition, IBlockAccess iblockaccess) {
+-        if (iblockaccess.getType(blockposition).getBlock() == this.f) {
++        Block block = world.getBlockIfLoaded(blockposition); // Paper
++        if (block == null) return null; // Paper
++        if (block == this.f) { // Paper
+             return blockposition;
+         } else {
+             BlockPosition[] ablockposition = new BlockPosition[]{blockposition.down(), blockposition.west(), blockposition.east(), blockposition.north(), blockposition.south(), blockposition.down().down()};
+ 
+             for(BlockPosition blockposition1 : ablockposition) {
+-                if (iblockaccess.getType(blockposition1).getBlock() == this.f) {
++                if (world.getBlockIfLoaded(blockposition1) == this.f) { // Paper
+                     return blockposition1;
+                 }
+             }
+@@ -0,0 +0,0 @@ public class PathfinderGoalRemoveBlock extends PathfinderGoalGotoTarget {
+     }
+ 
+     protected boolean a(IWorldReader iworldreader, BlockPosition blockposition) {
+-        Block block = iworldreader.getType(blockposition).getBlock();
++        Block block = world.getBlockIfLoaded(blockposition); // Paper
++        if (block == null) return false; // Paper
+         return block == this.f && iworldreader.getType(blockposition.up()).isAir() && iworldreader.getType(blockposition.up(2)).isAir();
+     }
+ }
+--
\ No newline at end of file
diff --git a/Spigot-Server-Patches/Prevent-pathfinding-from-loading-chunks.patch b/Spigot-Server-Patches/Prevent-pathfinding-from-loading-chunks.patch
new file mode 100644
index 0000000000..9b453d5b87
--- /dev/null
+++ b/Spigot-Server-Patches/Prevent-pathfinding-from-loading-chunks.patch
@@ -0,0 +1,77 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Aikar <aikar@aikar.co>
+Date: Mon, 10 Sep 2018 23:52:28 -0400
+Subject: [PATCH] Prevent pathfinding from loading chunks
+
+
+diff --git a/src/main/java/net/minecraft/server/PathfinderNormal.java b/src/main/java/net/minecraft/server/PathfinderNormal.java
+index 64e0b08170..58aa6df0a1 100644
+--- a/src/main/java/net/minecraft/server/PathfinderNormal.java
++++ b/src/main/java/net/minecraft/server/PathfinderNormal.java
+@@ -0,0 +0,0 @@ import javax.annotation.Nullable;
+ 
+ public class PathfinderNormal extends PathfinderAbstract {
+     protected float j;
++    private World world; // Paper
+ 
+     public PathfinderNormal() {
+     }
+@@ -0,0 +0,0 @@ public class PathfinderNormal extends PathfinderAbstract {
+     public void a(IBlockAccess iblockaccess, EntityInsentient entityinsentient) {
+         super.a(iblockaccess, entityinsentient);
+         this.j = entityinsentient.a(PathType.WATER);
++        this.world = entityinsentient.world; // Paper
+     }
+ 
+     public void a() {
+@@ -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