mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-29 15:49:00 +01:00
a25f99d254
Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 122289ff Add FaceAttachable interface to handle Grindstone facing in common with Switches a6db750e SPIGOT-5647: ZombieVillager entity should have getVillagerType() CraftBukkit Changes:bbe3d58e
SPIGOT-5650: Lectern.setPage(int) causes a NullPointerException3075579f
Add FaceAttachable interface to handle Grindstone facing in common with Switches95bd4238
SPIGOT-5647: ZombieVillager entity should have getVillagerType()4d975ac3
SPIGOT-5617: setBlockData does not work when NotPlayEvent is called by redstone current
40 lines
No EOL
2.2 KiB
Diff
40 lines
No EOL
2.2 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Thu, 2 Apr 2020 02:37:57 -0400
|
|
Subject: [PATCH] Optimize Collision Chunk lookup and avoid loading far chunks
|
|
|
|
Try to use a faster chunk lookup for collision detection, and only
|
|
fall back to the original for nearby chunks.
|
|
|
|
The collision code takes an AABB and generates a cuboid of checks rather
|
|
than a cylinder, so at high velocity this can generate a lot of chunk checks.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/ICollisionAccess.java b/src/main/java/net/minecraft/server/ICollisionAccess.java
|
|
index f851ed11df..d154487294 100644
|
|
--- a/src/main/java/net/minecraft/server/ICollisionAccess.java
|
|
+++ b/src/main/java/net/minecraft/server/ICollisionAccess.java
|
|
@@ -0,0 +0,0 @@ public interface ICollisionAccess extends IBlockAccess {
|
|
}
|
|
|
|
while (cursorposition.a()) {
|
|
- int k1 = cursorposition.b();
|
|
- int l1 = cursorposition.c();
|
|
- int i2 = cursorposition.d();
|
|
+ int k1 = cursorposition.b();int x = k1; // Paper
|
|
+ int l1 = cursorposition.c();int y = l1; // Paper
|
|
+ int i2 = cursorposition.d();int z = i2; // Paper
|
|
int j2 = cursorposition.e();
|
|
|
|
if (j2 != 3) {
|
|
int k2 = k1 >> 4;
|
|
int l2 = i2 >> 4;
|
|
- IBlockAccess iblockaccess = ICollisionAccess.this.c(k2, l2);
|
|
+ // Paper start - ensure we don't load chunks
|
|
+ boolean far = entity != null && MCUtil.distance(entity.locX(), entity.locY(), entity.locZ(), x, y, z) > 32;
|
|
+ IBlockAccess iblockaccess = ICollisionAccess.this instanceof WorldServer ? ((WorldServer) ICollisionAccess.this).getChunkProvider().getChunkAtIfLoadedMainThread(k2, l2) : null;
|
|
+ if (!far && iblockaccess == null) iblockaccess = ICollisionAccess.this.c(k2, l2);
|
|
+ // Paper end
|
|
|
|
if (iblockaccess != null) {
|
|
blockposition_mutableblockposition.d(k1, l1, i2);
|
|
--
|