Files
Purpur/patches/server/0212-Optimize-collisions.patch
BillyGalbreath adb0cafe64 Updated Upstream (Paper)
Upstream has released updates that appear to apply and compile correctly

Paper Changes:
41e6073ce [Auto] Updated Upstream (CraftBukkit)
6f93dc95d Add cause to Weather/ThunderChangeEvents (#4832)
507cf19b3 [CI-SKIP] [Auto] Rebuild Patches
afe0785bf Added PlayerPurchaseEvent for standalone Merchant GUIs (#5583)
615df3d8a Fix entity motion tag from mob spawners (#5718)
2d34898b5 Add methods for getting default item attributes (#5593)
d9766433e Add EntityInsideBlockEvent (#5596)
2021-05-25 04:49:08 -05:00

80 lines
4.3 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: DoctaEnkoda <bierquejason@gmail.com>
Date: Tue, 11 May 2021 00:28:13 +0200
Subject: [PATCH] Optimize collisions
diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java
index 7e943d9ba04abd964850d9b0109c5c6c9a1e5611..0ec132efc49880d9b230e176bce79732b7231765 100644
--- a/src/main/java/net/minecraft/server/level/WorldServer.java
+++ b/src/main/java/net/minecraft/server/level/WorldServer.java
@@ -678,16 +678,10 @@ public class WorldServer extends World implements GeneratorAccessSeed {
}
}
- int minBlockX = MathHelper.floor(axisalignedbb.minX - MCUtil.COLLISION_EPSILON) - 1;
- int maxBlockX = MathHelper.floor(axisalignedbb.maxX + MCUtil.COLLISION_EPSILON) + 1;
-
+ // Purpur Start Rebase - Calculate when needed only
int minBlockY = MathHelper.floor(axisalignedbb.minY - MCUtil.COLLISION_EPSILON) - 1;
int maxBlockY = MathHelper.floor(axisalignedbb.maxY + MCUtil.COLLISION_EPSILON) + 1;
- int minBlockZ = MathHelper.floor(axisalignedbb.minZ - MCUtil.COLLISION_EPSILON) - 1;
- int maxBlockZ = MathHelper.floor(axisalignedbb.maxZ + MCUtil.COLLISION_EPSILON) + 1;
-
-
BlockPosition.MutableBlockPosition mutablePos = new BlockPosition.MutableBlockPosition();
net.minecraft.world.phys.shapes.VoxelShapeCollision collisionShape = null;
@@ -697,6 +691,13 @@ public class WorldServer extends World implements GeneratorAccessSeed {
return ret;
}
+ int minBlockX = MathHelper.floor(axisalignedbb.minX - MCUtil.COLLISION_EPSILON) - 1;
+ int maxBlockX = MathHelper.floor(axisalignedbb.maxX + MCUtil.COLLISION_EPSILON) + 1;
+
+ int minBlockZ = MathHelper.floor(axisalignedbb.minZ - MCUtil.COLLISION_EPSILON) - 1;
+ int maxBlockZ = MathHelper.floor(axisalignedbb.maxZ + MCUtil.COLLISION_EPSILON) + 1;
+ // Purpur End
+
int minYIterate = Math.max(0, minBlockY);
int maxYIterate = Math.min(255, maxBlockY);
diff --git a/src/main/java/net/minecraft/world/level/ChunkCache.java b/src/main/java/net/minecraft/world/level/ChunkCache.java
index b547eb352f90f68cf36ffb82e43ad7acb1892f6a..456ef170f8885ad42c3c2bd2a54c5bc46bfe30cd 100644
--- a/src/main/java/net/minecraft/world/level/ChunkCache.java
+++ b/src/main/java/net/minecraft/world/level/ChunkCache.java
@@ -60,16 +60,10 @@ public class ChunkCache implements IBlockAccess, ICollisionAccess {
}
}
- int minBlockX = net.minecraft.util.MathHelper.floor(axisalignedbb.minX - net.minecraft.server.MCUtil.COLLISION_EPSILON) - 1;
- int maxBlockX = net.minecraft.util.MathHelper.floor(axisalignedbb.maxX + net.minecraft.server.MCUtil.COLLISION_EPSILON) + 1;
-
+ // Purpur Rebase - Calculate when needed only
int minBlockY = net.minecraft.util.MathHelper.floor(axisalignedbb.minY - net.minecraft.server.MCUtil.COLLISION_EPSILON) - 1;
int maxBlockY = net.minecraft.util.MathHelper.floor(axisalignedbb.maxY + net.minecraft.server.MCUtil.COLLISION_EPSILON) + 1;
-
- int minBlockZ = net.minecraft.util.MathHelper.floor(axisalignedbb.minZ - net.minecraft.server.MCUtil.COLLISION_EPSILON) - 1;
- int maxBlockZ = net.minecraft.util.MathHelper.floor(axisalignedbb.maxZ + net.minecraft.server.MCUtil.COLLISION_EPSILON) + 1;
-
-
+
BlockPosition.MutableBlockPosition mutablePos = new BlockPosition.MutableBlockPosition();
net.minecraft.world.phys.shapes.VoxelShapeCollision collisionShape = null;
@@ -79,6 +73,13 @@ public class ChunkCache implements IBlockAccess, ICollisionAccess {
return ret;
}
+ int minBlockX = net.minecraft.util.MathHelper.floor(axisalignedbb.minX - net.minecraft.server.MCUtil.COLLISION_EPSILON) - 1;
+ int maxBlockX = net.minecraft.util.MathHelper.floor(axisalignedbb.maxX + net.minecraft.server.MCUtil.COLLISION_EPSILON) + 1;
+
+ int minBlockZ = net.minecraft.util.MathHelper.floor(axisalignedbb.minZ - net.minecraft.server.MCUtil.COLLISION_EPSILON) - 1;
+ int maxBlockZ = net.minecraft.util.MathHelper.floor(axisalignedbb.maxZ + net.minecraft.server.MCUtil.COLLISION_EPSILON) + 1;
+ // Purpur End
+
int minYIterate = Math.max(0, minBlockY);
int maxYIterate = Math.min(255, maxBlockY);