--- a/net/minecraft/world/entity/decoration/Painting.java
+++ b/net/minecraft/world/entity/decoration/Painting.java
@@ -129,21 +_,31 @@
 
     @Override
     protected AABB calculateBoundingBox(BlockPos pos, Direction direction) {
+        // CraftBukkit start
+        PaintingVariant variant = (PaintingVariant) this.getVariant().value();
+        return Painting.calculateBoundingBoxStatic(pos, direction, variant.width(), variant.height());
+    }
+
+    public static AABB calculateBoundingBoxStatic(BlockPos pos, Direction direction, int width, int height) {
+        // CraftBukkit end
         float f = 0.46875F;
         Vec3 vec3 = Vec3.atCenterOf(pos).relative(direction, -0.46875);
-        PaintingVariant paintingVariant = this.getVariant().value();
-        double d = this.offsetForPaintingSize(paintingVariant.width());
-        double d1 = this.offsetForPaintingSize(paintingVariant.height());
+        // CraftBukkit start
+        double d = Painting.offsetForPaintingSize(width);
+        double d1 = Painting.offsetForPaintingSize(height);
+        // CraftBukkit end
         Direction counterClockWise = direction.getCounterClockWise();
         Vec3 vec31 = vec3.relative(counterClockWise, d).relative(Direction.UP, d1);
         Direction.Axis axis = direction.getAxis();
-        double d2 = axis == Direction.Axis.X ? 0.0625 : paintingVariant.width();
-        double d3 = paintingVariant.height();
-        double d4 = axis == Direction.Axis.Z ? 0.0625 : paintingVariant.width();
+        // CraftBukkit start
+        double d2 = axis == Direction.Axis.X ? 0.0625 : width;
+        double d3 = height;
+        double d4 = axis == Direction.Axis.Z ? 0.0625 : width;
+        // CraftBukkit end
         return AABB.ofSize(vec31, d2, d3, d4);
     }
 
-    private double offsetForPaintingSize(int size) {
+    private static double offsetForPaintingSize(int size) { // CraftBukkit - static
         return size % 2 == 0 ? 0.5 : 0.0;
     }
 
