mirror of
https://github.com/YatopiaMC/Yatopia.git
synced 2024-11-29 22:23:50 +01:00
98b47c81e9
Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Tuinity Changes: 84aecdb Merge https://github.com/Spottedleaf/Tuinity into ver/1.16.3 de1983b Updated Upstream (Paper) EMC Changes: 1499c3fb Un-Merge PlayerInteractEntity and PlayerInteractAtEntity 17184238 Updated Paper d0715d42 Updated Paper Purpur Changes: 32b7926 Fix #77 and credit correct author 42d9e8f Updated Upstream (Paper) 5026a31 Controllable minecarts fall damage option and slow down in air fix d9c0631 Updated Upstream (Paper) d40fd41 Fix broken /time command d652384 Updated Upstream (Paper) 86a0769 Configurable daylight cycle
69 lines
3.6 KiB
Diff
69 lines
3.6 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Mykyta Komarn <nkomarn@hotmail.com>
|
|
Date: Tue, 29 Sep 2020 17:27:30 -0700
|
|
Subject: [PATCH] Use faster block collision check for entity suffocation check
|
|
|
|
Improves the speed of checks by ~3,000ns per entity on average.
|
|
|
|
diff --git a/src/main/java/me/jellysquid/mods/lithium/common/entity/movement/ChunkAwareBlockCollisionSweeper.java b/src/main/java/me/jellysquid/mods/lithium/common/entity/movement/ChunkAwareBlockCollisionSweeper.java
|
|
index 7ed343cfb3130446c85dab2ca04d60f91e2c94fb..194d2f177b05c594c7a27b6191860a3f89394f06 100644
|
|
--- a/src/main/java/me/jellysquid/mods/lithium/common/entity/movement/ChunkAwareBlockCollisionSweeper.java
|
|
+++ b/src/main/java/me/jellysquid/mods/lithium/common/entity/movement/ChunkAwareBlockCollisionSweeper.java
|
|
@@ -16,6 +16,7 @@ import net.minecraft.server.VoxelShape;
|
|
import net.minecraft.server.VoxelShapeCollision;
|
|
import net.minecraft.server.VoxelShapes;
|
|
|
|
+import java.util.function.BiPredicate; // Yatopia
|
|
import static me.jellysquid.mods.lithium.common.entity.LithiumEntityCollisions.EPSILON;
|
|
|
|
/**
|
|
@@ -59,6 +60,21 @@ public class ChunkAwareBlockCollisionSweeper {
|
|
private ChunkSection cachedChunkSection;
|
|
private boolean needEntityCollisionCheck;
|
|
|
|
+ // Yatopia start
|
|
+ private boolean checkSuffocation;
|
|
+ private final BiPredicate<IBlockData, BlockPosition> suffocationPredicate = new BiPredicate<IBlockData, BlockPosition>() {
|
|
+ @Override
|
|
+ public boolean test(IBlockData iBlockData, BlockPosition blockPosition) {
|
|
+ return iBlockData.o(view, blockPosition);
|
|
+ }
|
|
+ };
|
|
+
|
|
+ public ChunkAwareBlockCollisionSweeper(ICollisionAccess view, Entity entity, AxisAlignedBB box, boolean checkSuffocation) {
|
|
+ this(view, entity, box);
|
|
+ this.checkSuffocation = checkSuffocation;
|
|
+ }
|
|
+ // Yatopia end
|
|
+
|
|
public ChunkAwareBlockCollisionSweeper(ICollisionAccess view, Entity entity, AxisAlignedBB box) {
|
|
this.box = box;
|
|
this.shape = VoxelShapes.of(box);
|
|
@@ -206,6 +222,11 @@ public class ChunkAwareBlockCollisionSweeper {
|
|
|
|
if (canInteractWithBlock(state, edgesHit)) {
|
|
this.pos.setValues(x, y, z);
|
|
+ // Yatopia start
|
|
+ if (checkSuffocation && !suffocationPredicate.test(state, this.pos)) {
|
|
+ continue;
|
|
+ }
|
|
+ // Yatopia end
|
|
VoxelShape collisionShape = state.getCollisionShape(this.view, this.pos, this.context);
|
|
|
|
if (collisionShape != VoxelShapes.empty()) {
|
|
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
|
index 220d5273543ea0b143cf9c894c89cabea25c29d6..3be9be2df7623ec1068f5782261d70fb34b2aa54 100644
|
|
--- a/src/main/java/net/minecraft/server/Entity.java
|
|
+++ b/src/main/java/net/minecraft/server/Entity.java
|
|
@@ -2156,9 +2156,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
|
float f1 = this.size.width * 0.8F;
|
|
AxisAlignedBB axisalignedbb = AxisAlignedBB.g((double) f1, 0.10000000149011612D, (double) f1).d(this.locX(), this.getHeadY(), this.locZ());
|
|
|
|
- return this.world.b(this, axisalignedbb, (iblockdata, blockposition) -> {
|
|
- return iblockdata.o(this.world, blockposition);
|
|
- }).findAny().isPresent();
|
|
+ return new me.jellysquid.mods.lithium.common.entity.movement.ChunkAwareBlockCollisionSweeper(this.world, this, axisalignedbb, true).getNextCollidedShape() != null; // Yatopia - fast suffocation check
|
|
}
|
|
}
|
|
|