From cd93e54df38d2f23b04996852b44578e9478abae Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Sun, 10 May 2020 02:26:21 -0400
Subject: [PATCH] Don't use our modified chunk checks for collision in world
 gen

Fixes issues with errors in logs on generating chunks
---
 ...ptimize-Collision-to-not-load-chunks.patch | 23 +++++++++++--------
 ...quid-s-Entity-Collision-optimisation.patch |  4 ++--
 ...me-Streams-usage-in-Entity-Collision.patch | 10 ++++----
 3 files changed, 21 insertions(+), 16 deletions(-)

diff --git a/Spigot-Server-Patches/0453-Optimize-Collision-to-not-load-chunks.patch b/Spigot-Server-Patches/0453-Optimize-Collision-to-not-load-chunks.patch
index 14816aecb7..6b6f3c4b70 100644
--- a/Spigot-Server-Patches/0453-Optimize-Collision-to-not-load-chunks.patch
+++ b/Spigot-Server-Patches/0453-Optimize-Collision-to-not-load-chunks.patch
@@ -14,10 +14,10 @@ movement will load only the chunk the player enters anyways and avoids loading
 massive amounts of surrounding chunks due to large AABB lookups.
 
 diff --git a/src/main/java/net/minecraft/server/ICollisionAccess.java b/src/main/java/net/minecraft/server/ICollisionAccess.java
-index f851ed11df14fd9aa8017f44d82fb6cfc3bde345..ab88a4f6526f3bae324b53d47581faf384a65ede 100644
+index f851ed11df14fd9aa8017f44d82fb6cfc3bde345..f817aaf17bee97e5023a1373bb774d94e7073be7 100644
 --- a/src/main/java/net/minecraft/server/ICollisionAccess.java
 +++ b/src/main/java/net/minecraft/server/ICollisionAccess.java
-@@ -83,19 +83,29 @@ public interface ICollisionAccess extends IBlockAccess {
+@@ -83,19 +83,36 @@ public interface ICollisionAccess extends IBlockAccess {
                  }
  
                  while (cursorposition.a()) {
@@ -30,20 +30,25 @@ index f851ed11df14fd9aa8017f44d82fb6cfc3bde345..ab88a4f6526f3bae324b53d47581faf3
                      int j2 = cursorposition.e();
  
                      if (j2 != 3) {
--                        int k2 = k1 >> 4;
--                        int l2 = i2 >> 4;
++                        // Paper start - ensure we don't load chunks
+                         int k2 = k1 >> 4;
+                         int l2 = i2 >> 4;
 -                        IBlockAccess iblockaccess = ICollisionAccess.this.c(k2, l2);
 -
 -                        if (iblockaccess != null) {
 -                            blockposition_mutableblockposition.d(k1, l1, i2);
 -                            IBlockData iblockdata = iblockaccess.getType(blockposition_mutableblockposition);
-+                        // Paper start - ensure we don't load chunks
-+                        //int k2 = k1 >> 4;
-+                        //int l2 = i2 >> 4;
 +                        boolean far = entity != null && MCUtil.distance(entity.locX(), entity.locY(), entity.locZ(), x, y, z) > 8;
-+                        blockposition_mutableblockposition.setValues(x, y, z); // Paper - moved up
++                        blockposition_mutableblockposition.setValues(x, y, z);
 +
-+                        IBlockData iblockdata = !far ? ICollisionAccess.this.getType(blockposition_mutableblockposition) : ICollisionAccess.this.getTypeIfLoaded(blockposition_mutableblockposition);
++                        boolean isRegionLimited = ICollisionAccess.this instanceof RegionLimitedWorldAccess;
++                        IBlockData iblockdata = !isRegionLimited ? ICollisionAccess.this.getTypeIfLoaded(blockposition_mutableblockposition) : null;
++                        if ((isRegionLimited || !far) && iblockdata == null) {
++                            IBlockAccess c = ICollisionAccess.this.c(k2, l2);
++                            if (c != null) {
++                                iblockdata = c.getType(blockposition_mutableblockposition);
++                            }
++                        }
 +                        if (iblockdata == null) {
 +                            if (!(entity instanceof EntityPlayer) || entity.world.paperConfig.preventMovingIntoUnloadedChunks) {
 +                                VoxelShape voxelshape3 = VoxelShapes.of(far ? entity.getBoundingBox() : new AxisAlignedBB(new BlockPosition(x, y, z)));
diff --git a/Spigot-Server-Patches/0512-Implement-JellySquid-s-Entity-Collision-optimisation.patch b/Spigot-Server-Patches/0512-Implement-JellySquid-s-Entity-Collision-optimisation.patch
index b7ce243b29..ee057e7181 100644
--- a/Spigot-Server-Patches/0512-Implement-JellySquid-s-Entity-Collision-optimisation.patch
+++ b/Spigot-Server-Patches/0512-Implement-JellySquid-s-Entity-Collision-optimisation.patch
@@ -9,10 +9,10 @@ Original code by JellySquid, licensed under GNU Lesser General Public License v3
 you can find the original code on https://github.com/jellysquid3/lithium-fabric/tree/1.15.x/fabric (Yarn mappings)
 
 diff --git a/src/main/java/net/minecraft/server/ICollisionAccess.java b/src/main/java/net/minecraft/server/ICollisionAccess.java
-index bdebbaf0b93ae7186b0afb3b2c04fdcf11148121..be4e311eadbd5a3b4d17ec6eb691d3ff0af711ae 100644
+index f817aaf17bee97e5023a1373bb774d94e7073be7..5baae144c598ce6d1c12c292db01d9b25520653e 100644
 --- a/src/main/java/net/minecraft/server/ICollisionAccess.java
 +++ b/src/main/java/net/minecraft/server/ICollisionAccess.java
-@@ -109,11 +109,24 @@ public interface ICollisionAccess extends IBlockAccess {
+@@ -116,11 +116,24 @@ public interface ICollisionAccess extends IBlockAccess {
  
                              if ((j2 != 1 || iblockdata.f()) && (j2 != 2 || iblockdata.getBlock() == Blocks.MOVING_PISTON)) {
                                  VoxelShape voxelshape2 = iblockdata.b((IBlockAccess) ICollisionAccess.this, blockposition_mutableblockposition, voxelshapecollision);
diff --git a/Spigot-Server-Patches/0513-Remove-some-Streams-usage-in-Entity-Collision.patch b/Spigot-Server-Patches/0513-Remove-some-Streams-usage-in-Entity-Collision.patch
index 0f18f491fc..c7191615bf 100644
--- a/Spigot-Server-Patches/0513-Remove-some-Streams-usage-in-Entity-Collision.patch
+++ b/Spigot-Server-Patches/0513-Remove-some-Streams-usage-in-Entity-Collision.patch
@@ -21,7 +21,7 @@ index e865a5694f78fb9273a0625ab2c30b87d0711a90..5648ba73c533f622c35c808decdb305f
      default Stream<VoxelShape> b(@Nullable Entity entity, AxisAlignedBB axisalignedbb, Set<Entity> set) {
          return IEntityAccess.super.b(entity, axisalignedbb, set);
 diff --git a/src/main/java/net/minecraft/server/ICollisionAccess.java b/src/main/java/net/minecraft/server/ICollisionAccess.java
-index 7d9a742224e1694c3d7f1c8dd218598adf6f2767..4fb02328862018e1df12824db5b450333d482b1c 100644
+index 5baae144c598ce6d1c12c292db01d9b25520653e..ab242a82493a78a89bbc0ab9113d10fd61864c02 100644
 --- a/src/main/java/net/minecraft/server/ICollisionAccess.java
 +++ b/src/main/java/net/minecraft/server/ICollisionAccess.java
 @@ -43,18 +43,39 @@ public interface ICollisionAccess extends IBlockAccess {
@@ -94,8 +94,8 @@ index 7d9a742224e1694c3d7f1c8dd218598adf6f2767..4fb02328862018e1df12824db5b45033
                      }
                  }
  
-@@ -98,9 +119,8 @@ public interface ICollisionAccess extends IBlockAccess {
-                         IBlockData iblockdata = !far ? ICollisionAccess.this.getType(blockposition_mutableblockposition) : ICollisionAccess.this.getTypeIfLoaded(blockposition_mutableblockposition);
+@@ -105,9 +126,8 @@ public interface ICollisionAccess extends IBlockAccess {
+                         }
                          if (iblockdata == null) {
                              if (!(entity instanceof EntityPlayer) || entity.world.paperConfig.preventMovingIntoUnloadedChunks) {
 -                                VoxelShape voxelshape3 = VoxelShapes.of(far ? entity.getBoundingBox() : new AxisAlignedBB(new BlockPosition(x, y, z)));
@@ -106,7 +106,7 @@ index 7d9a742224e1694c3d7f1c8dd218598adf6f2767..4fb02328862018e1df12824db5b45033
                              }
                          } else {
                              //blockposition_mutableblockposition.d(k1, l1, i2); // moved up
-@@ -117,14 +137,14 @@ public interface ICollisionAccess extends IBlockAccess {
+@@ -124,14 +144,14 @@ public interface ICollisionAccess extends IBlockAccess {
  
                                  if (voxelshape2 == VoxelShapes.fullCube()) {
                                      if (axisalignedbb.intersects(x, y, z, x + 1.0D, y + 1.0D, z + 1.0D)) {
@@ -125,7 +125,7 @@ index 7d9a742224e1694c3d7f1c8dd218598adf6f2767..4fb02328862018e1df12824db5b45033
                                      }
                                      // Paper end
                                  }
-@@ -133,8 +153,9 @@ public interface ICollisionAccess extends IBlockAccess {
+@@ -140,8 +160,9 @@ public interface ICollisionAccess extends IBlockAccess {
                      }
                  }