mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
Add 'optimize Chunk#getFluid' patch from Paper PR queue
This commit is contained in:
69
patches/server/0106-Optimise-Chunk-getFluid.patch
Normal file
69
patches/server/0106-Optimise-Chunk-getFluid.patch
Normal file
@@ -0,0 +1,69 @@
|
||||
From e2c2cf4f6ab14470a9360b63143fb84cbe0803e4 Mon Sep 17 00:00:00 2001
|
||||
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
||||
Date: Tue, 14 Jan 2020 14:59:08 -0800
|
||||
Subject: [PATCH] Optimise Chunk#getFluid
|
||||
|
||||
Removing the try catch and generally reducing ops should make it
|
||||
faster on its own, however removing the try catch makes it
|
||||
easier to inline due to code size
|
||||
---
|
||||
src/main/java/net/minecraft/server/Chunk.java | 18 +++++++++++-------
|
||||
.../net/minecraft/server/ChunkSection.java | 2 +-
|
||||
2 files changed, 12 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
|
||||
index 92065fe02..07073af99 100644
|
||||
--- a/src/main/java/net/minecraft/server/Chunk.java
|
||||
+++ b/src/main/java/net/minecraft/server/Chunk.java
|
||||
@@ -297,17 +297,20 @@ public class Chunk implements IChunkAccess {
|
||||
}
|
||||
|
||||
public Fluid a(int i, int j, int k) {
|
||||
- try {
|
||||
- if (j >= 0 && j >> 4 < this.sections.length) {
|
||||
- ChunkSection chunksection = this.sections[j >> 4];
|
||||
-
|
||||
- if (!ChunkSection.a(chunksection)) {
|
||||
- return chunksection.b(i & 15, j & 15, k & 15);
|
||||
+ //try { // Paper - remove try catch
|
||||
+ // Paper start - reduce the number of ops in this call
|
||||
+ int index = j >> 4;
|
||||
+ if (index >= 0 && index < this.sections.length) {
|
||||
+ ChunkSection chunksection = this.sections[index];
|
||||
+
|
||||
+ if (chunksection != null) {
|
||||
+ return chunksection.blockIds.a((j & 15) << 8 | (k & 15) << 4 | i & 15).getFluid();
|
||||
}
|
||||
+ // Paper end
|
||||
}
|
||||
|
||||
return FluidTypes.EMPTY.h();
|
||||
- } catch (Throwable throwable) {
|
||||
+ /*} catch (Throwable throwable) { // Paper - remove try catch
|
||||
CrashReport crashreport = CrashReport.a(throwable, "Getting fluid state");
|
||||
CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Block being got");
|
||||
|
||||
@@ -316,6 +319,7 @@ public class Chunk implements IChunkAccess {
|
||||
});
|
||||
throw new ReportedException(crashreport);
|
||||
}
|
||||
+ */ // Paper - remove try catch
|
||||
}
|
||||
|
||||
// CraftBukkit start
|
||||
diff --git a/src/main/java/net/minecraft/server/ChunkSection.java b/src/main/java/net/minecraft/server/ChunkSection.java
|
||||
index 8b28fb5ee..426221f7c 100644
|
||||
--- a/src/main/java/net/minecraft/server/ChunkSection.java
|
||||
+++ b/src/main/java/net/minecraft/server/ChunkSection.java
|
||||
@@ -46,7 +46,7 @@ public class ChunkSection {
|
||||
}
|
||||
|
||||
public Fluid b(int i, int j, int k) {
|
||||
- return ((IBlockData) this.blockIds.a(i, j, k)).getFluid();
|
||||
+ return ((IBlockData) this.blockIds.a(i, j, k)).getFluid(); // Paper - diff on change - we expect this to be effectively just getType(x, y, z).getFluid(). If this changes we need to check other patches that use IBlockData#getFluid.
|
||||
}
|
||||
|
||||
public void a() {
|
||||
--
|
||||
2.24.0
|
||||
|
||||
Reference in New Issue
Block a user