mirror of
https://github.com/PaperMC/Paper.git
synced 2025-02-27 22:38:11 +01:00
When per-player mob spawning is enabled we do not need to randomly shuffle the chunk list. Additionally, we can use the NearbyPlayers class to quickly retrieve nearby players instead of possible searching all players on the server.
61 lines
3 KiB
Diff
61 lines
3 KiB
Diff
From 0000000000000000000000000000000000000000 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
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
|
|
index abb75d8bea8f975c5b04c9a9fff7187a3520ac26..d2cdb8100fbbdc3d92eb7a61748340c40de343f7 100644
|
|
--- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
|
|
+++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
|
|
@@ -381,18 +381,20 @@ public class LevelChunk extends ChunkAccess {
|
|
}
|
|
|
|
public FluidState getFluidState(int x, int y, int z) {
|
|
- try {
|
|
- int l = this.getSectionIndex(y);
|
|
-
|
|
- if (l >= 0 && l < this.sections.length) {
|
|
- LevelChunkSection chunksection = this.sections[l];
|
|
+ // try { // Paper - remove try catch
|
|
+ // Paper start - reduce the number of ops in this call
|
|
+ int index = this.getSectionIndex(y);
|
|
+ if (index >= 0 && index < this.sections.length) {
|
|
+ LevelChunkSection chunksection = this.sections[index];
|
|
|
|
if (!chunksection.hasOnlyAir()) {
|
|
- return chunksection.getFluidState(x & 15, y & 15, z & 15);
|
|
+ return chunksection.states.get((y & 15) << 8 | (z & 15) << 4 | x & 15).getFluidState();
|
|
+ // Paper end
|
|
}
|
|
}
|
|
|
|
return Fluids.EMPTY.defaultFluidState();
|
|
+ /* // Paper - remove try catch
|
|
} catch (Throwable throwable) {
|
|
CrashReport crashreport = CrashReport.forThrowable(throwable, "Getting fluid state");
|
|
CrashReportCategory crashreportsystemdetails = crashreport.addCategory("Block being got");
|
|
@@ -402,6 +404,7 @@ public class LevelChunk extends ChunkAccess {
|
|
});
|
|
throw new ReportedException(crashreport);
|
|
}
|
|
+ */ // Paper - remove try catch
|
|
}
|
|
|
|
// CraftBukkit start
|
|
diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java
|
|
index 4eeb719b40ff1c18a7cdda7ecc6b135dbedd626e..b8fee4f8a0cfe32b9ef7f3f3cf818cbaec0d3fca 100644
|
|
--- a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java
|
|
+++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java
|
|
@@ -46,7 +46,7 @@ public class LevelChunkSection {
|
|
}
|
|
|
|
public FluidState getFluidState(int x, int y, int z) {
|
|
- return ((BlockState) this.states.get(x, y, z)).getFluidState();
|
|
+ return this.states.get(x, y, z).getFluidState(); // 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 acquire() {
|