Skip to content

Commit

Permalink
Fix the mis-patching of HangingEntity. (Closes #1651)
Browse files Browse the repository at this point in the history
Signed-off-by: 秋雨落 <[email protected]>
  • Loading branch information
qyl27 committed Feb 12, 2025
1 parent cd339d6 commit 08e2d6a
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 40 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,19 @@ public void setItem(ItemStack itemstack, final boolean flag, final boolean playS
}
}

@Inject(method = "calculateBoundingBox", at = @At("HEAD"), cancellable = true)
private void arclight$calculateBoundingBox(BlockPos blockPos, Direction direction, CallbackInfoReturnable<AABB> cir) {
cir.setReturnValue(calculateBoundingBoxStatic(blockPos, direction));
}

@TransformAccess(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC)
private static AABB calculateBoundingBox(Entity entity, BlockPos blockPosition, Direction direction, int width, int height) {
private static AABB calculateBoundingBoxStatic(BlockPos blockPos, Direction direction) {
float f = 0.46875F;
Vec3 vec3d = Vec3.atCenterOf(blockPosition).relative(direction, -0.46875D);
Direction.Axis enumdirection_enumaxis = direction.getAxis();
double d0 = enumdirection_enumaxis == Direction.Axis.X ? 0.0625D : 0.75D;
double d1 = enumdirection_enumaxis == Direction.Axis.Y ? 0.0625D : 0.75D;
double d2 = enumdirection_enumaxis == Direction.Axis.Z ? 0.0625D : 0.75D;
Vec3 vec3d = Vec3.atCenterOf(blockPos).relative(direction, -0.46875D);
Direction.Axis axis = direction.getAxis();
double d0 = axis == Direction.Axis.X ? 0.0625D : 0.75D;
double d1 = axis == Direction.Axis.Y ? 0.0625D : 0.75D;
double d2 = axis == Direction.Axis.Z ? 0.0625D : 0.75D;
return AABB.ofSize(vec3d, d0, d1, d2);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,34 @@
import io.izzel.arclight.common.mod.mixins.annotation.TransformAccess;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.Holder;
import net.minecraft.world.entity.decoration.Painting;
import net.minecraft.world.entity.decoration.PaintingVariant;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
import org.objectweb.asm.Opcodes;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

@Mixin(Painting.class)
public abstract class PaintingMixin extends BlockAttachedEntityMixin {
@Shadow
public abstract Holder<PaintingVariant> getVariant();

@Inject(method = "calculateBoundingBox", at = @At("HEAD"), cancellable = true)
private void arclight$calculateBoundingBox(BlockPos blockPos, Direction direction, CallbackInfoReturnable<AABB> cir) {
var variant = getVariant().value();
cir.setReturnValue(calculateBoundingBoxStatic(blockPos, direction, variant.width(), variant.height()));
}

@TransformAccess(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC)
private static AABB calculateBoundingBoxStatic(BlockPos blockposition, Direction enumdirection, int width, int height) {
private static AABB calculateBoundingBoxStatic(BlockPos blockPos, Direction enumdirection, int width, int height) {
// CraftBukkit end
float f = 0.46875F;
Vec3 vec3d = Vec3.atCenterOf(blockposition).relative(enumdirection, -0.46875D);
Vec3 vec3d = Vec3.atCenterOf(blockPos).relative(enumdirection, -0.46875D);
// CraftBukkit start
double d0 = offsetForPaintingSize0(width);
double d1 = offsetForPaintingSize0(height);
Expand All @@ -27,7 +41,7 @@ private static AABB calculateBoundingBoxStatic(BlockPos blockposition, Direction
Direction.Axis enumdirection_enumaxis = enumdirection.getAxis();
// CraftBukkit start
double d2 = enumdirection_enumaxis == Direction.Axis.X ? 0.0625D : (double) width;
double d3 = (double) height;
double d3 = height;
double d4 = enumdirection_enumaxis == Direction.Axis.Z ? 0.0625D : (double) width;
// CraftBukkit end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,35 +94,4 @@ public abstract class BlockAttachedEntityMixin extends EntityMixin {
private static double a(int i) {
return i % 32 == 0 ? 0.5D : 0.0D;
}

@TransformAccess(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC)
private static AABB calculateBoundingBox(Entity entity, BlockPos blockPosition, Direction direction, int width, int height) {
double d0 = blockPosition.getX() + 0.5;
double d2 = blockPosition.getY() + 0.5;
double d3 = blockPosition.getZ() + 0.5;
double d4 = 0.46875;
double d5 = a(width);
double d6 = a(height);
d0 -= direction.getStepX() * 0.46875;
d3 -= direction.getStepZ() * 0.46875;
d2 += d6;
Direction enumdirection = direction.getCounterClockWise();
d0 += d5 * enumdirection.getStepX();
d3 += d5 * enumdirection.getStepZ();
if (entity != null) {
entity.setPosRaw(d0, d2, d3);
}
double d7 = width;
double d8 = height;
double d9 = width;
if (direction.getAxis() == Direction.Axis.Z) {
d9 = 1.0;
} else {
d7 = 1.0;
}
d7 /= 32.0;
d8 /= 32.0;
d9 /= 32.0;
return new AABB(d0 - d7, d2 - d8, d3 - d9, d0 + d7, d2 + d8, d3 + d9);
}
}

0 comments on commit 08e2d6a

Please sign in to comment.