aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0993-Optimize-Collision-to-not-load-chunks.patch
diff options
context:
space:
mode:
authorJake Potrebic <[email protected]>2024-04-12 12:14:06 -0700
committerGitHub <[email protected]>2024-04-12 12:14:06 -0700
commit526795bacd07c019fe3652c96d74cc9f91ecb1fd (patch)
treed1d57ba4f75f239030713ac504df570c25a244b8 /patches/server/0993-Optimize-Collision-to-not-load-chunks.patch
parent37db2d7e4c10510a39b083600befec5dfc7cfbd4 (diff)
downloadPaper-526795bacd07c019fe3652c96d74cc9f91ecb1fd.tar.gz
Paper-526795bacd07c019fe3652c96d74cc9f91ecb1fd.zip
Update patches to handle vineflower decompiler (#10406)
* Update patches to handle vineflower decompiler * update patches again to handle inlined simple lambdas * update vf again and re-apply/rebuild patches * update patches after removal of verify-merges flag * fix compile issue * remove maven local * fix some issues * address more issues * fix collision patch * use paperweight release * more fixes * update fineflower and fix patches again * add missing comment descriptor --------- Co-authored-by: Jason Penilla <[email protected]>
Diffstat (limited to 'patches/server/0993-Optimize-Collision-to-not-load-chunks.patch')
-rw-r--r--patches/server/0993-Optimize-Collision-to-not-load-chunks.patch98
1 files changed, 48 insertions, 50 deletions
diff --git a/patches/server/0993-Optimize-Collision-to-not-load-chunks.patch b/patches/server/0993-Optimize-Collision-to-not-load-chunks.patch
index b992c3fadf..cfa7f3d55e 100644
--- a/patches/server/0993-Optimize-Collision-to-not-load-chunks.patch
+++ b/patches/server/0993-Optimize-Collision-to-not-load-chunks.patch
@@ -26,7 +26,7 @@ index 461c27292af06a5150de8ec263d0c8527e8c5278..37245ff682837e7e8c9647f4afe30f0d
// CraftBukkit end
entityplayer1.setPos(entityplayer1.getX(), entityplayer1.getY() + 1.0D, entityplayer1.getZ());
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 703b32362cf6a23dfe9326aa4e0ee74511e0d2cb..8531304667a85436fd557d319fe36a37b3661ae5 100644
+index a66fe080ee73171090abec48352ad0bd457a2a6f..d4c8f2cb1e3adf45863226ae9ad31968bc3445c9 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -242,6 +242,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
@@ -38,61 +38,59 @@ index 703b32362cf6a23dfe9326aa4e0ee74511e0d2cb..8531304667a85436fd557d319fe36a37
public @org.jetbrains.annotations.Nullable net.minecraft.server.level.ChunkMap.TrackedEntity tracker; // Paper
diff --git a/src/main/java/net/minecraft/world/level/BlockCollisions.java b/src/main/java/net/minecraft/world/level/BlockCollisions.java
-index f2c423154ed6a00882a46d93b69ed4f6ba73782c..a3eaf80b020c3bbc0306c5d17659ee661dfd275b 100644
+index cd342fa776b5d84e52aa1660c19be9ab45eaad2d..f6cc3d550df8481086acdcb62f44a1051ae79f80 100644
--- a/src/main/java/net/minecraft/world/level/BlockCollisions.java
+++ b/src/main/java/net/minecraft/world/level/BlockCollisions.java
-@@ -65,22 +65,41 @@ public class BlockCollisions<T> extends AbstractIterator<T> {
+@@ -66,18 +66,37 @@ public class BlockCollisions<T> extends AbstractIterator<T> {
+ @Override
protected T computeNext() {
- while(true) {
- if (this.cursor.advance()) {
-- int i = this.cursor.nextX();
-- int j = this.cursor.nextY();
-- int k = this.cursor.nextZ();
-+ int i = this.cursor.nextX(); final int x = i; // Paper
-+ int j = this.cursor.nextY(); final int y = j; // Paper
-+ int k = this.cursor.nextZ(); final int z = k; // Paper
- int l = this.cursor.getNextType();
- if (l == 3) {
- continue;
- }
-+ // Paper start - ensure we don't load chunks
-+ final @Nullable Entity source = this.context instanceof net.minecraft.world.phys.shapes.EntityCollisionContext entityContext ? entityContext.getEntity() : null;
-+ boolean far = source != null && io.papermc.paper.util.MCUtil.distanceSq(source.getX(), y, source.getZ(), x, y, z) > 14;
-+ this.pos.set(x, y, z);
-
+ while (this.cursor.advance()) {
+- int i = this.cursor.nextX();
+- int j = this.cursor.nextY();
+- int k = this.cursor.nextZ();
++ int i = this.cursor.nextX(); final int x = i; // Paper - OBFHELPER
++ int j = this.cursor.nextY(); final int y = j; // Paper - OBFHELPER
++ int k = this.cursor.nextZ(); final int z = k; // Paper - OBFHELPER
+ int l = this.cursor.getNextType();
+ if (l != 3) {
- BlockGetter blockGetter = this.getChunk(i, k);
-- if (blockGetter == null) {
-+ BlockState blockState;
-+ if (this.collisionGetter instanceof net.minecraft.server.level.WorldGenRegion) {
-+ BlockGetter blockGetter = this.getChunk(x, z);
-+ if (blockGetter == null) {
-+ continue;
+- if (blockGetter != null) {
+- this.pos.set(i, j, k);
+- BlockState blockState = blockGetter.getBlockState(this.pos);
+- if ((!this.onlySuffocatingBlocks || blockState.isSuffocating(blockGetter, this.pos))
+- && (l != 1 || blockState.hasLargeCollisionShape())
+- && (l != 2 || blockState.is(Blocks.MOVING_PISTON))) {
++ // Paper start - ensure we don't load chunks
++ // BlockGetter blockGetter = this.getChunk(i, k);
++ if (true) {
++ final @Nullable Entity source = this.context instanceof net.minecraft.world.phys.shapes.EntityCollisionContext entityContext ? entityContext.getEntity() : null;
++ boolean far = source != null && io.papermc.paper.util.MCUtil.distanceSq(source.getX(), y, source.getZ(), x, y, z) > 14;
++ this.pos.set(x, y, z);
++ BlockState blockState;
++ if (this.collisionGetter instanceof net.minecraft.server.level.WorldGenRegion) {
++ BlockGetter blockGetter = this.getChunk(x, z);
++ if (blockGetter == null) {
++ continue;
++ }
++ blockState = blockGetter.getBlockState(this.pos);
++ } else if ((!far && source instanceof net.minecraft.server.level.ServerPlayer) || (source != null && source.collisionLoadChunks)) {
++ blockState = this.collisionGetter.getBlockState(this.pos);
++ } else {
++ blockState = this.collisionGetter.getBlockStateIfLoaded(this.pos);
+ }
-+ blockState = blockGetter.getBlockState(this.pos);
-+ } else if ((!far && source instanceof net.minecraft.server.level.ServerPlayer) || (source != null && source.collisionLoadChunks)) {
-+ blockState = this.collisionGetter.getBlockState(this.pos);
-+ } else {
-+ blockState = this.collisionGetter.getBlockStateIfLoaded(this.pos);
-+ }
-+
-+ if (blockState == null) {
-+ if (!(source instanceof net.minecraft.server.level.ServerPlayer) || source.level().paperConfig().chunks.preventMovingIntoUnloadedChunks) {
-+ return this.resultProvider.apply(new BlockPos.MutableBlockPos(x, y, z), Shapes.create(far ? source.getBoundingBox() : new AABB(new BlockPos(x, y, z))));
++ if (blockState == null) {
++ if (!(source instanceof net.minecraft.server.level.ServerPlayer) || source.level().paperConfig().chunks.preventMovingIntoUnloadedChunks) {
++ return this.resultProvider.apply(new BlockPos.MutableBlockPos(x, y, z), Shapes.create(far ? source.getBoundingBox() : new AABB(new BlockPos(x, y, z))));
++ }
++ continue;
+ }
-+ // Paper end
- continue;
- }
-
-- this.pos.set(i, j, k);
-- BlockState blockState = blockGetter.getBlockState(this.pos);
-- if (this.onlySuffocatingBlocks && !blockState.isSuffocating(blockGetter, this.pos) || l == 1 && !blockState.hasLargeCollisionShape() || l == 2 && !blockState.is(Blocks.MOVING_PISTON)) {
-+ // Paper - moved up
-+ if (/*this.onlySuffocatingBlocks && (!blockState.isSuffocating(blockGetter, this.pos)) ||*/ l == 1 && !blockState.hasLargeCollisionShape() || l == 2 && !blockState.is(Blocks.MOVING_PISTON)) { // Paper - onlySuffocatingBlocks is only true on the client, so we don't care about it here
- continue;
- }
-
++ if (/*(!this.onlySuffocatingBlocks || blockState.isSuffocating(blockGetter, this.pos)) &&*/ (l != 1 || blockState.hasLargeCollisionShape()) && (l != 2 || blockState.is(Blocks.MOVING_PISTON))) { // Paper - onlySuffocatingBlocks is only true on the client, so we don't care about it here
++ // Paper end
+ VoxelShape voxelShape = blockState.getCollisionShape(this.collisionGetter, this.pos, this.context);
+ if (voxelShape == Shapes.block()) {
+ if (this.box.intersects(i, j, k, i + 1.0, j + 1.0, k + 1.0)) {
diff --git a/src/main/java/net/minecraft/world/level/CollisionGetter.java b/src/main/java/net/minecraft/world/level/CollisionGetter.java
-index 140d10807a3a6806578cd203ba58383590c2f2c0..c476e37df8a75d77f5093b2a449e04f25ef2c2dd 100644
+index ea9a5e643d7ccce4e4d20644901c22cf63c6d890..69754fbebb51f7f804c97a749fd65ce15ae22f1b 100644
--- a/src/main/java/net/minecraft/world/level/CollisionGetter.java
+++ b/src/main/java/net/minecraft/world/level/CollisionGetter.java
@@ -44,11 +44,13 @@ public interface CollisionGetter extends BlockGetter {
@@ -100,7 +98,7 @@ index 140d10807a3a6806578cd203ba58383590c2f2c0..c476e37df8a75d77f5093b2a449e04f2
default boolean noCollision(@Nullable Entity entity, AABB box) {
+ try { if (entity != null) entity.collisionLoadChunks = true; // Paper
- for(VoxelShape voxelShape : this.getBlockCollisions(entity, box)) {
+ for (VoxelShape voxelShape : this.getBlockCollisions(entity, box)) {
if (!voxelShape.isEmpty()) {
return false;
}