2021-06-11 14:02:28 +02:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Aikar <aikar@aikar.co>
|
|
|
|
Date: Thu, 3 Mar 2016 02:07:55 -0600
|
2021-12-06 00:32:02 +01:00
|
|
|
Subject: [PATCH] Optimize isInWorldBounds and getBlockState for inlining
|
2021-06-11 14:02:28 +02:00
|
|
|
|
|
|
|
Hot methods, so reduce # of instructions for the method.
|
|
|
|
|
|
|
|
Move is valid location test to the BlockPosition class so that it can access local variables.
|
|
|
|
|
|
|
|
Replace all calls to the new place to the unnecessary forward.
|
|
|
|
|
|
|
|
Optimize getType and getBlockData to manually inline and optimize the calls
|
|
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/core/Vec3i.java b/src/main/java/net/minecraft/core/Vec3i.java
|
2024-04-25 11:42:10 +02:00
|
|
|
index 02367ef1371dde94ff6c4cd40bd32e800d6ccaaf..7b0fc7135bc107103dcaed6dc0707b1829928fae 100644
|
2021-06-11 14:02:28 +02:00
|
|
|
--- a/src/main/java/net/minecraft/core/Vec3i.java
|
|
|
|
+++ b/src/main/java/net/minecraft/core/Vec3i.java
|
2024-04-25 11:42:10 +02:00
|
|
|
@@ -28,6 +28,12 @@ public class Vec3i implements Comparable<Vec3i> {
|
2024-04-12 21:14:06 +02:00
|
|
|
);
|
2021-11-23 13:15:10 +01:00
|
|
|
}
|
2021-06-11 14:02:28 +02:00
|
|
|
|
|
|
|
+ // Paper start
|
2021-12-06 00:32:02 +01:00
|
|
|
+ public final boolean isInsideBuildHeightAndWorldBoundsHorizontal(net.minecraft.world.level.LevelHeightAccessor levelHeightAccessor) {
|
2021-06-14 17:10:25 +02:00
|
|
|
+ return getX() >= -30000000 && getZ() >= -30000000 && getX() < 30000000 && getZ() < 30000000 && !levelHeightAccessor.isOutsideBuildHeight(getY());
|
2021-06-11 14:02:28 +02:00
|
|
|
+ }
|
|
|
|
+ // Paper end
|
|
|
|
+
|
|
|
|
public Vec3i(int x, int y, int z) {
|
|
|
|
this.x = x;
|
|
|
|
this.y = y;
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
|
2024-07-17 19:24:53 +02:00
|
|
|
index a016fb2140d6a43172c3fbc623b23f6d57798d9e..5b893b93a3495b13ae266fb8054d0a454cf02660 100644
|
2021-06-11 14:02:28 +02:00
|
|
|
--- a/src/main/java/net/minecraft/world/level/Level.java
|
|
|
|
+++ b/src/main/java/net/minecraft/world/level/Level.java
|
2024-07-15 20:11:04 +02:00
|
|
|
@@ -824,7 +824,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
2023-09-10 04:28:03 +02:00
|
|
|
// Paper end
|
2021-06-11 14:02:28 +02:00
|
|
|
|
2021-06-12 04:24:43 +02:00
|
|
|
public boolean isInWorldBounds(BlockPos pos) {
|
|
|
|
- return !this.isOutsideBuildHeight(pos) && Level.isInWorldBoundsHorizontal(pos);
|
2021-12-06 00:32:02 +01:00
|
|
|
+ return pos.isInsideBuildHeightAndWorldBoundsHorizontal(this); // Paper - use better/optimized check
|
2021-06-11 14:02:28 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public static boolean isInSpawnableBounds(BlockPos pos) {
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java b/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java
|
2024-07-11 21:09:15 +02:00
|
|
|
index fba548c4e6d589323ec3ea5f6b269a6fe9faf6a1..a7fc4b027cee8e1ed2678be7060040494a65682a 100644
|
2021-06-11 14:02:28 +02:00
|
|
|
--- a/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java
|
|
|
|
+++ b/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java
|
2024-07-11 21:09:15 +02:00
|
|
|
@@ -189,6 +189,7 @@ public abstract class ChunkAccess implements BlockGetter, BiomeManager.NoiseBiom
|
2022-12-07 19:52:24 +01:00
|
|
|
return GameEventListenerRegistry.NOOP;
|
2021-06-12 04:24:43 +02:00
|
|
|
}
|
2021-06-11 14:02:28 +02:00
|
|
|
|
2021-12-06 00:32:02 +01:00
|
|
|
+ public abstract BlockState getBlockState(final int x, final int y, final int z); // Paper
|
2021-06-11 14:02:28 +02:00
|
|
|
@Nullable
|
2021-11-23 13:15:10 +01:00
|
|
|
public abstract BlockState setBlockState(BlockPos pos, BlockState state, boolean moved);
|
2021-06-11 14:02:28 +02:00
|
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/level/chunk/ImposterProtoChunk.java b/src/main/java/net/minecraft/world/level/chunk/ImposterProtoChunk.java
|
2024-06-15 14:12:22 +02:00
|
|
|
index 4af698930712389881601069a921f054c07935f2..d7d332d8ba3442887e80d2c3d7bddb9de2674c2d 100644
|
2021-06-11 14:02:28 +02:00
|
|
|
--- a/src/main/java/net/minecraft/world/level/chunk/ImposterProtoChunk.java
|
|
|
|
+++ b/src/main/java/net/minecraft/world/level/chunk/ImposterProtoChunk.java
|
2024-06-15 14:12:22 +02:00
|
|
|
@@ -99,6 +99,12 @@ public class ImposterProtoChunk extends ProtoChunk implements ca.spottedleaf.moo
|
2021-06-11 14:02:28 +02:00
|
|
|
public BlockState getBlockState(BlockPos pos) {
|
|
|
|
return this.wrapped.getBlockState(pos);
|
|
|
|
}
|
|
|
|
+ // Paper start
|
2021-12-06 00:32:02 +01:00
|
|
|
+ @Override
|
|
|
|
+ public final BlockState getBlockState(final int x, final int y, final int z) {
|
|
|
|
+ return this.wrapped.getBlockStateFinal(x, y, z);
|
2021-06-11 14:02:28 +02:00
|
|
|
+ }
|
|
|
|
+ // Paper end
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public FluidState getFluidState(BlockPos pos) {
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/level/chunk/ProtoChunk.java b/src/main/java/net/minecraft/world/level/chunk/ProtoChunk.java
|
2024-06-15 14:12:22 +02:00
|
|
|
index 207dc31afcf5ca5a59ab27ee263aa10f94a79559..082eae7032d5a8055a0f67b8a5583bbbf6fa9916 100644
|
2021-06-11 14:02:28 +02:00
|
|
|
--- a/src/main/java/net/minecraft/world/level/chunk/ProtoChunk.java
|
|
|
|
+++ b/src/main/java/net/minecraft/world/level/chunk/ProtoChunk.java
|
2024-04-25 11:42:10 +02:00
|
|
|
@@ -97,14 +97,18 @@ public class ProtoChunk extends ChunkAccess {
|
2021-06-11 14:02:28 +02:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public BlockState getBlockState(BlockPos pos) {
|
|
|
|
- int i = pos.getY();
|
2021-06-12 04:24:43 +02:00
|
|
|
- if (this.isOutsideBuildHeight(i)) {
|
|
|
|
+ // Paper start
|
2021-12-06 00:32:02 +01:00
|
|
|
+ return getBlockState(pos.getX(), pos.getY(), pos.getZ());
|
2021-06-11 14:02:28 +02:00
|
|
|
+ }
|
2021-12-06 00:32:02 +01:00
|
|
|
+ public BlockState getBlockState(final int x, final int y, final int z) {
|
2021-06-12 04:24:43 +02:00
|
|
|
+ if (this.isOutsideBuildHeight(y)) {
|
2021-06-11 14:02:28 +02:00
|
|
|
return Blocks.VOID_AIR.defaultBlockState();
|
|
|
|
} else {
|
2021-11-23 13:15:10 +01:00
|
|
|
- LevelChunkSection levelChunkSection = this.getSection(this.getSectionIndex(i));
|
|
|
|
- return levelChunkSection.hasOnlyAir() ? Blocks.AIR.defaultBlockState() : levelChunkSection.getBlockState(pos.getX() & 15, i & 15, pos.getZ() & 15);
|
|
|
|
+ LevelChunkSection levelChunkSection = this.getSections()[this.getSectionIndex(y)];
|
|
|
|
+ return levelChunkSection.hasOnlyAir() ? Blocks.AIR.defaultBlockState() : levelChunkSection.getBlockState(x & 15, y & 15, z & 15);
|
2021-06-11 14:02:28 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
+ // Paper end
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public FluidState getFluidState(BlockPos pos) {
|