X : 
-ALL: Block.box(0, 0, 14.45, 16, 16, 16)

PC:
-FOOT: Stream.of(
Block.box(4, 0, 14, 12, 16, 16),
Block.box(12, 8, 14, 16, 14, 16),
Block.box(0, 8, 14, 4, 14, 16)
).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get();
-HEAD: Block.box(4, 0, 14, 12, 16, 16)
-RIGHT: Block.box(9, 8, 14, 16, 14, 16)
-LEFT: Block.box(0, 8, 14, 7, 14, 16)

C:
-FOOT: Block.box(4, 0, 14, 12, 16, 16)
-HEAD: Stream.of(
Block.box(4, 2, 14, 12, 8, 16),
Block.box(4, 8, 14, 12, 16, 16),
Block.box(4, 0, 14, 12, 2, 16),
Block.box(12, 2, 14, 16, 8, 16),
Block.box(0, 2, 14, 4, 8, 16)
).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get();
-LEFT: Block.box(0, 2, 14, 7, 8, 16)
-RIGHT:Block.box(9, 2, 14, 16, 8, 16)

-POLE
upper:
Shapes.join(Stream.of(
Block.box(8, 0, 6, 10, 16, 8),
Block.box(6, 0, 8, 8, 16, 10),
Block.box(8, 0, 8, 10, 16, 10),
Block.box(6, 0, 6, 8, 16, 8)
).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get();, Stream.of(
Block.box(1, 13.5, 10, 15, 15, 11),
Block.box(1, 10.5, 10, 2.5, 13.5, 11),
Block.box(1, 9, 10, 15, 10.5, 11),
Block.box(5.5, 10.5, 10, 10.5, 13.5, 11),
Block.box(13.5, 10.5, 10, 15, 13.5, 11)
).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get();, BooleanOp.OR)

below:
Shapes.join(Stream.of(
Block.box(1, 6.5, 10, 15, 8, 11),
Block.box(1, 3.5, 10, 2.5, 6.5, 11),
Block.box(1, 2, 10, 15, 3.5, 11),
Block.box(5.5, 3.5, 10, 10.5, 6.5, 11),
Block.box(13.5, 3.5, 10, 15, 6.5, 11)
).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get();, Stream.of(
Block.box(8, 0, 6, 10, 16, 8),
Block.box(6, 0, 8, 8, 16, 10),
Block.box(8, 0, 8, 10, 16, 10),
Block.box(6, 0, 6, 8, 16, 8)
).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get();, BooleanOp.OR)

-BED:
Stream.of(
Stream.of(
Stream.of(
Block.box(13.25, 9, -4.5, 17.75, 10, 0.5),
Block.box(16.75, 10, -2.5, 17.75, 14, -1.5),
Block.box(14.25, 13, -2.5, 16.75, 14, -1.5),
Block.box(13.25, 10, -2.5, 14.25, 14, -1.5)
).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get();,
Stream.of(
Block.box(-1.75, 9, -4.5, 2.75, 10, 0.5),
Block.box(-1.75, 10, -2.5, -0.75, 14, -1.5),
Block.box(-0.75, 13, -2.5, 1.75, 14, -1.5),
Block.box(1.75, 10, -2.5, 2.75, 14, -1.5)
).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get();,
Stream.of(
Block.box(0.75, 8, 14.5, 5.25, 9, 19.5),
Block.box(1.75, 12, 16.5, 4.25, 13, 17.5),
Block.box(0.75, 9, 16.5, 1.75, 13, 17.5),
Block.box(4.25, 9, 16.5, 5.25, 13, 17.5)
).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get();,
Stream.of(
Block.box(14.25, 9, 16.5, 15.25, 13, 17.5),
Block.box(10.75, 9, 16.5, 11.75, 13, 17.5),
Block.box(11.75, 12, 16.5, 14.25, 13, 17.5),
Block.box(10.75, 8, 14.5, 15.25, 9, 19.5)
).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get();
).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get();,
Stream.of(
Block.box(2, 0.1, 14, 4, 6.1, 16),
Block.box(12, 0, 14, 14, 6, 16),
Block.box(12, 0, 0, 14, 6, 2),
Block.box(2, 0, 0, 4, 6, 2)
).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get();,
Stream.of(
Block.box(2, 6, -4, 4, 8, 12),
Block.box(2, 6, 12, 4, 8, 19),
Block.box(12, 6, 12, 14, 8, 19),
Block.box(12, 6, -4, 14, 8, 12),
Block.box(-1.75, 8, -3, 4, 9, -1),
Block.box(12, 8, -3, 17.75, 9, -1)
).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get();,
Stream.of(
Block.box(2.152, 8.48, 0.82, 3.082, 14.2, 11.64),
Block.box(0.902, 8.48, 0.82, 2.082, 15.2, 11.64),
Block.box(4.28, 12.88, 0.92, 11.72, 14.06, 11.54),
Block.box(5.03, 11.98, 0.92, 10.97, 12.91, 11.54),
Block.box(13.31, 6.95, 0.82, 14.49, 13.67, 11.64),
Block.box(12.31, 6.95, 0.82, 13.24, 12.67, 11.64)
).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get();
).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get();