public void setBoundsOnBlock(Block block) {
    if (haveBlockBounds) {
      block.setBlockBounds(minX, minY, minZ, maxX, maxY, maxZ);
      return;
    }
    if (hasSkin()) {
      Skin skin = null;
      if (worldObj.isRemote) {
        skin = getSkinClient(skinPointer);
      } else {
        skin = getSkinServer(skinPointer);
      }

      if (skin != null) {
        float scale = 0.0625F;
        SkinPart skinPart = skin.getParts().get(0);
        Rectangle3D rec = skinPart.getPartBounds();
        IRectangle3D buildSpace = skinPart.getPartType().getBuildingSpace();

        int x = buildSpace.getX() + buildSpace.getWidth() + rec.getX();
        int y = buildSpace.getY() + buildSpace.getHeight() - rec.getY() - rec.getHeight();
        int z = buildSpace.getZ() + buildSpace.getDepth() - rec.getZ() - rec.getDepth();
        minX = x * scale;
        minY = y * scale;
        minZ = z * scale;
        maxX = (x + rec.getWidth()) * scale;
        maxY = (y + rec.getHeight()) * scale;
        maxZ = (z + rec.getDepth()) * scale;
        rotateBlockBounds();
        haveBlockBounds = true;
        block.setBlockBounds(minX, minY, minZ, maxX, maxY, maxZ);
        return;
      }
    }
    block.setBlockBounds(0F, 0F, 0F, 1F, 1F, 1F);
  }