diff --git a/nms-patches/EntityHanging.patch b/nms-patches/EntityHanging.patch index 66e94dd2af..36c850d97d 100644 --- a/nms-patches/EntityHanging.patch +++ b/nms-patches/EntityHanging.patch @@ -13,92 +13,77 @@ public abstract class EntityHanging extends Entity { protected static final Predicate b = (entity) -> { -@@ -35,43 +41,52 @@ - this.updateBoundingBox(); - } +@@ -37,28 +43,39 @@ -- protected void updateBoundingBox() { -- if (this.direction != null) { + protected void updateBoundingBox() { + if (this.direction != null) { - double d0 = (double) this.blockPosition.getX() + 0.5D; - double d1 = (double) this.blockPosition.getY() + 0.5D; - double d2 = (double) this.blockPosition.getZ() + 0.5D; -- double d3 = 0.46875D; ++ // CraftBukkit start code moved in to calculateBoundingBox ++ this.a(calculateBoundingBox(this, this.blockPosition, this.direction, this.getHangingWidth(), this.getHangingHeight())); ++ // CraftBukkit end ++ } ++ } ++ ++ // CraftBukkit start - break out BB calc into own method ++ public static AxisAlignedBB calculateBoundingBox(@Nullable Entity entity, BlockPosition blockPosition, EnumDirection direction, int width, int height) { ++ { ++ double d0 = (double) blockPosition.getX() + 0.5D; ++ double d1 = (double) blockPosition.getY() + 0.5D; ++ double d2 = (double) blockPosition.getZ() + 0.5D; + double d3 = 0.46875D; - double d4 = this.a(this.getHangingWidth()); - double d5 = this.a(this.getHangingHeight()); -- ++ double d4 = a(width); ++ double d5 = a(height); + - d0 -= (double) this.direction.getAdjacentX() * 0.46875D; - d2 -= (double) this.direction.getAdjacentZ() * 0.46875D; -- d1 += d5; ++ d0 -= (double) direction.getAdjacentX() * 0.46875D; ++ d2 -= (double) direction.getAdjacentZ() * 0.46875D; + d1 += d5; - EnumDirection enumdirection = this.direction.f(); -+ // CraftBukkit start - break out BB calc into own method -+ public static AxisAlignedBB calculateBoundingBox(Entity entity, BlockPosition blockPosition, EnumDirection direction, int width, int height) { -+ double d0 = (double) blockPosition.getX() + 0.5D; -+ double d1 = (double) blockPosition.getY() + 0.5D; -+ double d2 = (double) blockPosition.getZ() + 0.5D; -+ double d3 = 0.46875D; -+ double d4 = a(width); -+ double d5 = a(height); -+ -+ d0 -= (double) direction.getAdjacentX() * 0.46875D; -+ d2 -= (double) direction.getAdjacentZ() * 0.46875D; -+ d1 += d5; -+ EnumDirection enumdirection = direction.f(); -+ -+ d0 += d4 * (double) enumdirection.getAdjacentX(); -+ d2 += d4 * (double) enumdirection.getAdjacentZ(); -+ if (entity != null) { -+ entity.locX = d0; -+ entity.locY = d1; -+ entity.locZ = d2; -+ } -+ double d6 = (double) width; -+ double d7 = (double) height; -+ double d8 = (double) width; ++ EnumDirection enumdirection = direction.f(); -- d0 += d4 * (double) enumdirection.getAdjacentX(); -- d2 += d4 * (double) enumdirection.getAdjacentZ(); + d0 += d4 * (double) enumdirection.getAdjacentX(); + d2 += d4 * (double) enumdirection.getAdjacentZ(); - this.locX = d0; - this.locY = d1; - this.locZ = d2; - double d6 = (double) this.getHangingWidth(); - double d7 = (double) this.getHangingHeight(); - double d8 = (double) this.getHangingWidth(); -- -- if (this.direction.k() == EnumDirection.EnumAxis.Z) { -- d8 = 1.0D; -- } else { -- d6 = 1.0D; -- } -+ if (direction.k() == EnumDirection.EnumAxis.Z) { -+ d8 = 1.0D; -+ } else { -+ d6 = 1.0D; -+ } -+ -+ d6 /= 32.0D; -+ d7 /= 32.0D; -+ d8 /= 32.0D; -+ return new AxisAlignedBB(d0 - d6, d1 - d7, d2 - d8, d0 + d6, d1 + d7, d2 + d8); -+ } ++ if (entity != null) { ++ entity.locX = d0; ++ entity.locY = d1; ++ entity.locZ = d2; ++ } ++ double d6 = (double) width; ++ double d7 = (double) height; ++ double d8 = (double) width; -- d6 /= 32.0D; -- d7 /= 32.0D; -- d8 /= 32.0D; +- if (this.direction.k() == EnumDirection.EnumAxis.Z) { ++ if (direction.k() == EnumDirection.EnumAxis.Z) { + d8 = 1.0D; + } else { + d6 = 1.0D; +@@ -67,11 +84,12 @@ + d6 /= 32.0D; + d7 /= 32.0D; + d8 /= 32.0D; - this.a(new AxisAlignedBB(d0 - d6, d1 - d7, d2 - d8, d0 + d6, d1 + d7, d2 + d8)); -+ protected void updateBoundingBox() { -+ if (this.direction != null) { -+ // CraftBukkit start code moved in to calculateBoundingBox -+ this.a(calculateBoundingBox(this, this.blockPosition, this.direction, this.getHangingWidth(), this.getHangingHeight())); -+ // CraftBukkit end ++ return new AxisAlignedBB(d0 - d6, d1 - d7, d2 - d8, d0 + d6, d1 + d7, d2 + d8); } } ++ // CraftBukkit end - private double a(int i) { + private static double a(int i) { // CraftBukkit - static return i % 32 == 0 ? 0.5D : 0.0D; } -@@ -83,6 +98,24 @@ +@@ -83,6 +101,24 @@ if (this.e++ == 100 && !this.world.isClientSide) { this.e = 0; if (!this.dead && !this.survives()) { @@ -123,7 +108,7 @@ this.die(); this.a((Entity) null); } -@@ -139,6 +172,21 @@ +@@ -139,6 +175,21 @@ return false; } else { if (!this.dead && !this.world.isClientSide) { @@ -145,7 +130,7 @@ this.die(); this.velocityChanged(); this.a(damagesource.getEntity()); -@@ -151,6 +199,18 @@ +@@ -151,6 +202,18 @@ @Override public void move(EnumMoveType enummovetype, Vec3D vec3d) { if (!this.world.isClientSide && !this.dead && vec3d.g() > 0.0D) { @@ -164,7 +149,7 @@ this.die(); this.a((Entity) null); } -@@ -159,7 +219,7 @@ +@@ -159,7 +222,7 @@ @Override public void f(double d0, double d1, double d2) {